gpt4 book ai didi

python - 在给定条件的情况下,是否有一种简洁的(Pythonic?)方法在Python中使用命名参数默认值?

转载 作者:行者123 更新时间:2023-12-01 03:49:24 24 4
gpt4 key购买 nike

我有一个带有一些命名参数的函数,以及一个包含具有这些名称的键以及其他一些键的字典。我想使用字典中的值调用该函数。

  • 我无法使用**data因为Python会引发TypeError: unexpected keyword argument因为有额外的 key 。
  • 字典可能不包含某些键,因此我无法在不检查它们是否存在的情况下引用这些键(并且我不想传递 get 的默认值)。
  • 我无法重写该函数,因为它位于单独的库中。

如何只解压与函数参数匹配的键?

def do_something(arg1=None, arg2=''):
...

data = {'arg1': 1, 'arg2': 2, 'other': 3}

# doesn't work if key doesn't exist
do_something(arg1=data['arg1'], arg2=data['arg2'])

# too verbose, hard to extend
if 'arg1' in data:
do_something(arg1=data['arg1'], arg2=data['arg2'])
else:
do_something(arg2=data['arg2'])

最佳答案

或者,我只是从我的一个项目中挖掘出这个

def call_with_optional_arguments(func, **kwargs):
'''
calls a function with the arguments **kwargs, but only those that the function defines.
e.g.

def fn(a, b):
print a, b

call_with_optional_arguments(fn, a=2, b=3, c=4) # because fn doesn't accept `c`, it is discarded
'''

import inspect
function_arg_names = inspect.getargspec(func).args

for arg in kwargs.keys():
if arg not in function_arg_names:
del kwargs[arg]

func(**kwargs)

就您而言,它可以这样使用:

call_with_optional_arguments(do_something, **data)

--

(如果您想知道这个名称,我用它来触发我的库的用户将传入的回调函数。在这种情况下,“可选”意味着 func 没有接受我调用的所有参数)

关于python - 在给定条件的情况下,是否有一种简洁的(Pythonic?)方法在Python中使用命名参数默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38484555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com