您可以使用字典在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) 这可能是一个简单的问题:
这两个之间有什么区别:
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
我有一个功能:
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.
所以我昨天做了一些事情,发现这种事情是可能的.
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,我想知道为什么这个工作,以及如何?
感谢那些可以给我一个相关例子的人.
例:
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.
如果我有一个支持变量参数号的函数,即使用*args,我如何从循环/列表理解中填充参数?假设函数需要多个列表作为参数,并且我有一个表/数据帧,并希望将每列用作输入参数,为什么这不起作用?
funName([df[iCol].values for iCol in df.columns])
假设我的数据框有5列,我需要像这样调用函数:
funName(col1, col2, col3, col4, col5)
但我不想为每列手动创建变量,而是动态填充参数列表.谢谢.
我觉得以前一定要问过这个问题,但我找不到,对不起,如果是这样的话!
我有一个不同参数的函数,如:
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方式?
我有一个包含不同扩展名的文件列表.淘汰者我想筛选出只有那些扩展.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) 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.
我有两个接受不同参数的函数:
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) kwargs ×10
python ×9
function ×3
args ×2
python-2.7 ×2
arguments ×1
dictionary ×1
model ×1
models ×1
string ×1