【问题标题】:Calling a function using variables from other functions as parameters/arguments使用来自其他函数的变量作为参数/参数调用函数
【发布时间】:2018-08-15 20:34:36
【问题描述】:

我正在尝试调用我创建的一组子例程,这些子例程使用来自其他子例程的参数。例如,变量“用户名”应该能够传递到“db_username_searcher”。

def signer():           
  def login():
    username = entry_user.get()  
    password = entry_user.get()  
    if username in admin_array:
        admin_pass = 'pass'  

    return username, password, admin_pass


win = tkinter.Tk()
win.title('Sign In')  
win.geometry('800x800') 
lbl_user = tkinter.Label(win, text='Username ')  
entry_user = tkinter.Entry(win)

lbl_pwd = tkinter.Label(win, text='Password ')
entry_pwd = tkinter.Entry(win, show='x')  
lbl_output = tkinter.Label(win)
btn_signin = tkinter.Button(win, text='Sign in', command=login)
lbl_user.pack()
entry_user.pack()
lbl_pwd.pack()
entry_pwd.pack()
lbl_output.pack()
btn_signin.pack()
entry_user.focus_set()

win.mainloop()

这是分配和返回“用户名”的代码:

def db_username_sercher(username, password):

conn = sqlite3.connect('passwordDbase.db')
c = conn.cursor()
c.execute("SELECT * FROM passwordDb WHERE employee_username=?", (username, ))

r = c.fetchone()

if r:
    message = 'correct'

else:
    message = ' '

if message == 'correct':
    dbpassword = c.execute("SELECT employee_password FROM passwordDb WHERE employee_username=?", (username, ))
    if dbpassword == password:
        message = 'correct'

    else:
        message = ' '

conn.commit()
c.close()
conn.close()
return message

当我尝试调用这两个函数时,我不知道如何处理参数:

signer()
db_username_searcher(username, password)

"unresolved reference 'password' "

我该如何正确称呼它?,在此先感谢。

【问题讨论】:

  • 您的代码格式不正确。请在定义 db_username_searcher 后插入必要的缩进
  • 抱歉,您的代码格式错误。我跟不上潮流。但是您是否打算将用户名和密码定义为全局变量?如果是这样,您应该在函数login() 中将它们声明为全局,并在其中覆盖它们

标签: python function variables parameters arguments


【解决方案1】:

有两种方法可以做到这一点。

一个:您需要在调用db_username_earcher() 之前添加一行代码,其中您将catchsigner() 编辑的所有变量return 转换为list/多个变量。然后,您可以通过使用列表索引或分配的变量来捕获用户名来传递用户名。

二:你可以使用global变量,你的signer()函数可以简单地覆盖用户名,这样你就可以毫无困难地传递用户名。

编辑(响应 cmets):

对于catch 变量,您可以使用a, b, c = signer(),其中a 将包含username 的值。

关于列表方法,我的意思是你需要return一个列表而不是三个变量,然后你可以直接使用your_caught_list[0]引用username

【讨论】:

  • 我试图避免使用全局变量。由于我想要的变量在另一个子例程签名者中的登录中,它是否会改变任何东西?我尝试使用“list = [signer.login.username]”添加到列表,但它不起作用。
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多