我看过很多帖子,但没有一个真正解决我的问题。使用Python,我试图在一个需要两个参数的函数中将一个方法作为参数传递:
# this is a method within myObject
def getAccount(self):
account = (self.__username, self.__password)
return account
# this is a function from a self-made, imported myModule
def logIn(username,password):
# log into account
return someData
# run the function from within the myObject instance
myData = myModule.logIn(myObject.getAccount())
然后Python不高兴:它想要logIn()函数的两个参数。很公平。如果认为问题是getAccount()方法返回了一个元组,它是一个对象。我当时试过了:
def getAccount(self):
return self.__username, self.__password
但这要么没有区别。
如何将getAccount()中的数据传递给logIn()?当然,如果我不明白,我在编程逻辑中缺少一些基本的东西:)
感谢您的帮助。 本杰明
答案 0 :(得分:8)
您想使用python argument unpacking:
myData = myModule.logIn( * myObject.getAccount() )
函数参数前的*
表示后面的元组应该被拆分成它的成分并作为位置参数传递给函数。
当然,您可以手动执行此操作,或者编写一个包含其他人建议的元组的包装器,但对于这种情况,解包更有效和pythonic 。
答案 1 :(得分:6)
此
myData = myModule.logIn( * myObject.getAccount() )
答案 2 :(得分:3)
您的方法要求两个参数,而如果您想在方法中隐藏登录执行,您可以轻松传递一个参数,执行它并检索数据:
# this is a method within myObject
def getAccount(self):
account = (self.__username, self.__password)
return account
# this is a function from a self-made, imported myModule
def logIn(account):
user , passwd = account()
# log into account
return someData
# run the function from within the myObject instance
myData = myModule.logIn(myObject.getAccount)
请注意,该方法不带括号,然后在检索数据的登录中执行。
答案 3 :(得分:3)
你的标题有点令人困惑,因为你实际上可以通过一种方法。在Python中,函数是第一类,这意味着你可以将它们作为任何值传递。
但是,您的文字表明您想要做其他事情。
Python确实将多个值作为一个值返回,这是值的元组。
return 1, 2
与
完全相同return (1, 2)
但是,如果您需要解压缩这些值,就像在您的情况下一样,有几种方法可以实现此目的。
您可以将它们解压缩为变量:
usn, psw = myObject.getAccount()
或者您可以将它们“扩展”到函数调用中:
myModule.logIn(*myObject.getAccount())
这要求参数的数量与元组的维度相同(2参数函数需要元组(x, y)
)
如果你想要传递方法,你可以这样做,但你需要小心不要叫它:
def logIn(self, a):
usn, psw = a()
# do stuff
logIn(myObject.getAccount)