[英]Python: pass method as argument in function
我看过很多帖子,但没有一个真正解决我的问题。 使用 Python,我试图将一个方法作为参数传递给需要两个 arguments 的 function:
# 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 并不高兴:它需要两个arguments 用于 logIn() function。 很公平。 如果认为问题在于 getAccount() 方法返回了一个元组,即一个object。 我当时试过:
def getAccount(self):
return self.__username, self.__password
但这两者都没有任何区别。
那么我如何将数据从 getAccount() 传递到 logIn()? 当然,如果我不明白这一点,我就错过了编程逻辑中的一些基本内容:)
感谢您的帮助。 本杰明
您想使用python 参数解包:
myData = myModule.logIn( * myObject.getAccount() )
function 的参数前的*
表示应将以下元组拆分为其组成部分并作为位置 arguments 传递给 function。
当然,您可以手动执行此操作,或者按照其他人的建议编写一个采用元组的包装器,但对于这种情况,解包更有效且更符合Python 风格。
这个
myData = myModule.logIn( * myObject.getAccount() )
您的方法需要两个参数,而如果您想在一个方法中隐藏登录执行,您可以轻松地传递一个参数,执行它并检索数据:
# 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)
请注意,该方法是在没有括号的情况下传递的,然后您在登录名中执行它以检索数据。
您的标题有点令人困惑,因为您实际上可以传递一个方法。 在 Python 中,函数首先是 class,这意味着您可以将它们作为任何值传递。
但是,您的文字表明您想做其他事情。
Python 真的返回多个值作为一个值,一个值的元组。
return 1, 2
真的和
return (1, 2)
但是,如果您需要解压缩这些值,就像您的情况一样,有几种方法可以实现这一点。
您可以将它们解压缩到变量中:
usn, psw = myObject.getAccount()
或者您可以将它们“扩展”到 function 调用中:
myModule.logIn(*myObject.getAccount())
这要求 arguments 的数量与元组的维度相同(2 个参数 function 需要一个元组(x, y)
)
如果您想传递该方法,您可以这样做,但您需要注意不要调用它:
def logIn(self, a):
usn, psw = a()
# do stuff
logIn(myObject.getAccount)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.