Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何有条件地传递不同的参数_Python - Fatal编程技术网

Python 如何有条件地传递不同的参数

Python 如何有条件地传递不同的参数,python,Python,我希望能够在满足条件时将参数更改为函数 目前我正在做这项工作,但我重复第一个论点,有没有办法改变第二个论点 credential = './credentials.json' if os.path.exists(credential): account = authenticate(client_config=secrets, credentials=credential) else: account = authenticate(client_config=secrets, seri

我希望能够在满足条件时将参数更改为函数

目前我正在做这项工作,但我重复第一个论点,有没有办法改变第二个论点

credential = './credentials.json'

if os.path.exists(credential):
  account = authenticate(client_config=secrets, credentials=credential)
else:
  account = authenticate(client_config=secrets, serialize=credential)

优雅的方法是使用kwargs:

credential = './credentials.json'
key = "credentials" if os.path.exists(credentials) else "serialize"
auth_kwargs = {"client_config": secrets, key: credential}    

account = authenticate(**auth_kwargs)
您可以将(未打包的)字典传递给函数:

credential = './credentials.json'
arguments = {'client_config': secrets, 'serialize': credential}  # default

if os.path.exists(credentials):
    arguments.pop('serialize')
    arguments['credentials'] = credential

account = authenticate(**arguments)

我认为你的方式也很好,但你可以做到

credential='./credentials.json'
params={'serialize':凭证}
如果os.path.存在(凭据):
params['credentials']=params.pop('serialize')
帐户=身份验证(客户端配置=机密,**参数)
对于这一点,有以下几种方法:

from functools import partial

credential = './credentials.json'

auth = partial(authenticate, client_config=secrets)

if os.path.exists(credential):
  account = auth(credentials=credential)
else:
  account = auth(serialize=credential)

代码中有一个语法错误和一个小错误。首先,不要使用三个等号,第二,如果没有条件,你可以只做
是的,我修复了这个问题,还修改了它来检查文件是否存在,但我想避免使用其他条件,可能会做一些三元运算,只要在“凭证”中声明函数就行了请注意,这是一个打字错误?老实说,这些答案没有一个比您的代码短(在更复杂的情况下可能更短)。您没有使用
…有点困惑。
key
在哪里使用?@matiss抱歉,我忘了把它添加到dict中-已修复