在下面的代码中,如何在函数f中获得*args和**kwargs而不需要包装函数?
def f(func):
def wrapper(*args, **kwargs):
print(args)
print(kwargs)
return func(*args,**kwargs)
return wrapper
@f
def write(text):
print(text)
# write = a(write)
write('dog')
Run Code Online (Sandbox Code Playgroud)
尝试失败1:
def f(func):
a=func(*args)
k=func(**kwargs)
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
NameError: global name 'args' is not defined
Run Code Online (Sandbox Code Playgroud)
尝试失败2:
def f(func(*args,**kwargs)):
a=func(*args)
k=func(**kwargs)
Run Code Online (Sandbox Code Playgroud) 这样构建python3流可以吗?
def foo(**kwargs):
kwargs['kw'] = 1
return bar(**kwargs, wk=2)
def bar(**kwargs):
process(1,2,'sss',**kwargs)
for i in kwargs:
print(i)
...etc...
Run Code Online (Sandbox Code Playgroud)
kwarg是要转到单个可变对象(dict),并且仅将其引用沿流传递,还是将我解压缩并一遍又一遍地创建?
更精确的问题。如果我这样做:
def a(**kwargs):
return b(**kwargs)
def b(**kwargs):
return c(**kwargs)
...
def z(**kwargs):
print(**kwargs)
Run Code Online (Sandbox Code Playgroud)
一次只能有1个字典吗?如果是这样,每次调用都会创建一个新对象吗?还是我将它们堆叠?
实际情况是,我是与AVRO通信的子服务之一。因此,我有一个将二进制文件转换为的软件包dict,然后我需要做一些事情并创建一个新的AVRO。
有些字段在新架构中不存在,有些字段已添加,有些字段只是传递而未触及它们。
因此,我只是接受了第一个字典,一遍又一遍地传递它,添加了越来越多的数据,最后我有了另一个架构,而avro包可以接受如此巨大的字典,并且仅序列化架构中定义的内容。
这样可以吗?
我正在尝试执行Django查询:
#att.name is a string
kwargs = {att.name : F('node__product__' + att.name) }
temps = Temp.objects.exclude(**kwargs)
Run Code Online (Sandbox Code Playgroud)
我想知道这是否正确.到目前为止我看到的所有示例都在值中使用字符串,但是如果值是函数,我应该将值设为字符串,就像这样吗?
kwargs = {att.name : 'F('node__product__' + att.name)' }
Run Code Online (Sandbox Code Playgroud)
值中的函数是否在参数列表中急切执行,还是等到需要它?
我想我的函数func(*args, **kwargs)返回一个字典,其中包含我给它的所有参数.例如:
func(arg1, arg2, arg3=value3, arg4=value4)
Run Code Online (Sandbox Code Playgroud)
应该返回一个这样的字典:
{'arg1': value1, 'arg2': value2, 'arg3': value3, 'arg4': value4 }
Run Code Online (Sandbox Code Playgroud) 如果我有一个具有三个或四个可选关键字参数的函数,则最好使用** kwargs或在函数定义中指定它们?
我觉得
def foo(required, option1=False, option2=False, option3=True)
比笨拙得多
def foo(required, **kwargs)。
但是,如果我需要将这些关键字用作条件关键字,而它们却不存在,则会抛出KeyErrors,我想在每个条件有点混乱之前先检查密钥。
def foo(required, **kwargs):
print(required)
if 'true' in kwargs and kwargs['true']:
print(kwargs['true'])
foo('test', true='True')
foo('test2')
Run Code Online (Sandbox Code Playgroud)
与
def foo(required, true=None):
print(required)
if true:
print(true)
foo('test', true='True')
foo('test2')
Run Code Online (Sandbox Code Playgroud)
我想知道最pythonic的方式是什么。我有一个正在使用的函数,具体取决于传递的参数将返回不同的值,所以我想知道处理它的最佳方法。它现在可以工作,但是我想知道是否有更好和更Python化的方式来处理它。
kwargs ×5
python ×5
args ×2
dictionary ×2
python-3.x ×2
avro ×1
decorator ×1
django ×1
python-2.7 ×1