标签: kwargs

通过func获取*args和**kwargs

在下面的代码中,如何在函数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)

python decorator args kwargs python-3.x

1
推荐指数
1
解决办法
912
查看次数

python的**变形效率

这样构建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包可以接受如此巨大的字典,并且仅序列化架构中定义的内容。

这样可以吗?

python dictionary kwargs python-3.x avro

1
推荐指数
1
解决办法
323
查看次数

Python中的**kwargs是渴望还是懒惰?

我正在尝试执行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)

值中的函数是否在参数列表中急切执行,还是等到需要它?

python django lazy-evaluation kwargs

0
推荐指数
1
解决办法
525
查看次数

如何在python中将所有参数转换为字典

我想我的函数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)

python dictionary args kwargs python-2.7

0
推荐指数
1
解决办法
4514
查看次数

When using optional arguments when is it best to use **kwargs and best to use keywords?

如果我有一个具有三个或四个可选关键字参数的函数,则最好使用** 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化的方式来处理它。

python kwargs

0
推荐指数
1
解决办法
194
查看次数