标签: kwargs

使用字典更新App Engine模型

您可以使用字典在App Engine中创建新模型:

my_model = MyModel.get_or_insert(keyname, **kwargs)
Run Code Online (Sandbox Code Playgroud)

有没有办法使用字典更新模型而不是执行以下操作?

my_model.firstprop = 'first'
my_model.secondprop = 'second'
Run Code Online (Sandbox Code Playgroud)

google-app-engine dictionary model models kwargs

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

Python关键字args vs kwargs

这可能是一个简单的问题:

这两个之间有什么区别:

def myfunc(a_list = [], **kwargs):
    my_arg = kwargs.get('my_arg', None)
    pass
Run Code Online (Sandbox Code Playgroud)

def myfucn(a_list = [], my_arg = None):
    pass
Run Code Online (Sandbox Code Playgroud)

如果没有,哪个会被认为更加pythonic?

谢谢,-Matt

python kwargs keyword-argument

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

Clunky arg检查Python

我有一个功能:

def check_user(self, **args):
    allowed = ['name', 'screen_name', 'url', 'description', 'location']
    arg_check = [val for val in args if val not in allowed]
    if arg_check:
        raise ValueError('Invalid args: ' + ' '.join(arg_check))
Run Code Online (Sandbox Code Playgroud)

它有效,但感觉非常单调.有没有更好的方法来检查这个?我希望不必写一个很大的if/else语句.

这样我就可以轻松地在循环中遍历args.

python kwargs

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

args在python中映射到kwargs

所以我昨天做了一些事情,发现这种事情是可能的.

In [3]: class Foo():
    def __init__(self, data=False):
        print data
   ...:

In [4]: foo = Foo(True)
True
Run Code Online (Sandbox Code Playgroud)

所以你可以看到一个arg被映射到一个kwarg,我想知道为什么这个工作,以及如何?

感谢那些可以给我一个相关例子的人.

python args kwargs python-2.7

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

函数采用kwargs是一个dict,其键是动态生成的字符串

例:

def foo(v0 = 'a', v1 = 'b', v2 = 'c'):
    print(v0, v1, v2)

for i in range(0, 3):
    target = "v" + str(i)
    foo(target = 'z')
Run Code Online (Sandbox Code Playgroud)

我希望以下输出:

z b c
a z c
a b z
Run Code Online (Sandbox Code Playgroud)

但是,就目前而言,上面的代码提出了以下内容TypeError:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-7b3fb4086218> in <module>()
      4 for i in range(0, 3):
      5     target = "v" + str(i)
----> 6     foo(target = 'z')

TypeError: foo() got an unexpected keyword argument 'target'
Run Code Online (Sandbox Code Playgroud)

我如何动态地将'target'设置为'v0','v1'等?

这只是我需要做的一个例子.对于我的情况,是与SQLAlchemy一起使用,以便能够动态选择我将使用的表.我不能用if.

python function kwargs

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

Python使用*args填充函数的输入参数

如果我有一个支持变量参数号的函数,即使用*args,我如何从循环/列表理解中填充参数?假设函数需要多个列表作为参数,并且我有一个表/数据帧,并希望将每列用作输入参数,为什么这不起作用?

funName([df[iCol].values for iCol in df.columns])

假设我的数据框有5列,我需要像这样调用函数:

funName(col1, col2, col3, col4, col5)

但我不想为每列手动创建变量,而是动态填充参数列表.谢谢.

python arguments function args kwargs

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

如何迭代不同的kwargs?

我觉得以前一定要问过这个问题,但我找不到,对不起,如果是这样的话!

我有一个不同参数的函数,如:

def f(arg1, arg2, ...,argN, kw1=0, kw2=0, kw3=0):
    # some code ...
Run Code Online (Sandbox Code Playgroud)

假设我定义了我的(强制性)参数:

arg1 = some_value_1
arg2 = some_value_2
...
argN = some_value_N
Run Code Online (Sandbox Code Playgroud)

我想浓缩一些重复的函数调用,如

f(arg1, arg2, ... argN, kw1=1)
f(arg1, arg2, ... argN, kw1=23)
f(arg1, arg2, ... argN, kw2=456)
f(arg1, arg2, ... argN, kw2=789)
f(arg1, arg2, ... argN, kw3='a')
f(arg1, arg2, ... argN, kw3='b')
...
Run Code Online (Sandbox Code Playgroud)

看起来像:

for kw_def in [kw1=1, kw1=23, kw2=456, kw2=789, kw3='a', kw3='b',...]:
    f(arg1, arg2, ... argN, kw_def)
Run Code Online (Sandbox Code Playgroud)

但语法上正确.什么是正确的pythonic方式?

python kwargs

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

如何在python中使用.endswith函数测试几个条件

我有一个包含不同扩展名的文件列表.淘汰者我想筛选出只有那些扩展.bam,.bai,.vcf和更多一些.有没有办法使用带有多个参数的endswith函数而不是多次重复它?

所以代替:

for name in list:
    if name.endswith('.bam') or name.endswith('.bai') or name.endswith('.bai'):
        # do stuff
Run Code Online (Sandbox Code Playgroud)

就像是:

for name in list:
    if name.endswith(*['.bai', '.bam', '.vcf']):
        # do stuff
Run Code Online (Sandbox Code Playgroud)

python string kwargs

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

**kwargs和默认参数

class Klass:
  def __init__(self, **kwargs):
    self.func(variable=True, **kwargs)

  def func(self, variable=True, **kwargs):
    print(variable)


if __name__ == '__main__':
  Klass(variable=False)
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我会得到TypeError: func() got multiple values for keyword argument 'variable'.

我认为它应该打印,False因为我覆盖默认值为variableto False并传递kwargs.

python kwargs python-2.7

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

执行子功能的主功能

我有两个接受不同参数的函数:

def foo(name, age):
    pass
def bar(color, shape):
    pass
Run Code Online (Sandbox Code Playgroud)

现在,我有一个主函数,我希望能够使用我要执行的函数及其参数进行调用。由于它是一个可以调用foo或bar的主函数,因此仅使用两个参数(要执行的函数和该函数的参数)进行调用。

function是一个字符串,告诉执行什么功能

params将是参数字典(例如** kwargs)

我可以这样做以使其工作:

def master(function, params):
    if function == 'foo':
        foo(params['name'], params['age'])
    elif function == 'bar':
        foo(params['color'], params['shape'])
Run Code Online (Sandbox Code Playgroud)

然后我打电话给师父:

master('foo',{'name': 'John', 'age': 99})
Run Code Online (Sandbox Code Playgroud)

但是,如果master需要调用许多子功能,则条件太多,无法为每个函数选择正确的参数。

所以我基本上有两个问题:

1)我可以直接传递要执行的功能,而不是用功能名称调用master,然后在某种情况下检查该名称吗?如果是这样,我该如何执行该功能?

像这样打电话给主人:

master(foo(), {'name': 'John', 'age': 99})
Run Code Online (Sandbox Code Playgroud)

2)函数foo并且bar没有** kwargs,但是如果我可以仅通过字典调用它们,然后将它们从dict赋给每个变量的值,那将非常方便。

所以基本上,我可以这样做:

params = {'name':'John', 'age':99, 'color':red, 'shape':circle}
foo(params)  # I would like to to this even if foo doesn't have **kwargs
bar(params)  # same for bar
Run Code Online (Sandbox Code Playgroud)

因此,最后,我理想的主人呼吁是:

params = {'name':'John', 'age':99, …
Run Code Online (Sandbox Code Playgroud)

python function kwargs

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