阅读一些内容后,我发现自己在使用两种不同的方法将参数列表传递给函数时遇到了困难。我读了一些迹象。这就是我到目前为止的想法:
实际代码:
文件调用者.py:
import worker
worker.version_check(iserver,login,password,proxyUser,proxyPass,
proxyServer,packageInfo)
worker.version_get(iserver,login,password,proxyUser,proxyPass,
proxyServer,packageInfo)
worker.version_send(iserver,login,password,proxyUser,proxyPass,
proxyServer,packageInfo)
文件:worker.py:
def version_check(iserver,login,password,proxyUser,proxyPass,proxyServer,service):
#code and more code
def version_get(iserver,login,password,proxyUser,proxyPass,proxyServer,service):
#code and more code
def version_send(iserver,login,password,proxyUser,proxyPass,proxyServer,service):
#code and more code
现在我有:
文件调用者.py:
import worker
args = (env, family, host, password, prefix, proxyServer,
proxyUser, proxyPass, option, jokerVar
)
worker.version_check(*args)
worker.version_get(*args)
worker.version_send(*args)
文件:worker.py:
def version_check(*args):
env = args[0]
family = args[1]
host = args[2]
password = args[3]
prefix = args[4]
proxyServer = args[5]
proxyUser = args[6]
proxyPass = args[7]
option = args[8]
jokerVar = args[9]
#code and more code
def version_get((*args):
env = args[0]
family = args[1]
host = args[2]
password = args[3]
prefix = args[4]
proxyServer = args[5]
proxyUser = args[6]
proxyPass = args[7]
option = args[8]
jokerVar = args[9]
#code and more code
def version_send(*args):
env = args[0]
family = args[1]
host = args[2]
password = args[3]
prefix = args[4]
proxyServer = args[5]
proxyUser = args[6]
proxyPass = args[7]
option = args[8]
jokerVar = args[9]
#code and more code
使用旧方法(实际代码)我相信仅在一行中调用一个函数会更“友好”(如您在 worker.py 中所见)。但是,使用新方法,我认为代码变得更加广泛,因为我必须为每个函数定义所有相同的变量。但这是最好的做法吗?我仍在缓慢地学习 Python,因此,对于代码中的任何错误,我们深表歉意。
一件重要的事情是,大部分变量都是从数据库中检索的,因此它们不是静态的。
最佳答案
我真的不建议定义像 def version_check(*args):
这样的函数,除非您特别需要。快速,无需阅读源代码:参数的顺序是什么?如何为 proxyServer 指定默认值?请记住,“显式优于隐式”。
有一次我经常偏离这条规则是在我包装另一个函数时,例如:
def foo(bar):
print 'Bar:', bar
def baz(qux, *args):
print 'Qux:', qux
foo(*args)
对于这样一个简单的例子,我永远不会这样做,但假设 foo
是一个来自第三方包的函数,它不在我的控制范围内,有很多默认值、关键字参数等。在那种情况下,我宁愿将参数解析为 Python 而不是自己尝试。
就我个人而言,我会把它写成一个类:
class Worker(object):
def __init__(iserver,login,password,proxyUser,proxyPass,proxyServer,service):
self.iserver = iserver
self.login = login
self.password = password
self.proxyUser = proxyUser
self.proxyPass = proxyPass
self.proxyServer = proxyServer
self.service = service
def version_check(self): ...
def version_get(self): ...
def version_send(self): ...
然后在客户端中,写:
from worker import Worker
w = Worker(iserver,login,password,proxyUser,proxyPass,proxyServer,service)
w.version_check()
w.version_get()
w.version_send()
如果你真的需要编写带有大量参数的函数而不是将状态封装在一个类中——这是一种更典型的 Pythonic 方式——那么请考虑 namedtuple来自最新 Python 版本的数据类型。它允许您指定一个元组,其中的项可以通过关键字寻址,并且可以生成一些非常干净、优雅的代码。
关于python - 传递和处理函数参数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844963/