在将某些外部模块方法应用于类时,我需要能够将arg = 'value'
的不同对传递给函数,例如:
Ad.nodes.get(id_ = '11974312')
如何将字典或元组传递给该函数,以便将'id_'
(字符串)识别为id_
(参数)
('id_', '11974312')
(元组)还是{'id_':'11974312'}
(词典)?
基本上,我只需要从id_
中取出'id_'
作为参考,我正在尝试将neomodel模块用于neo4j图数据库。
答案 0 :(得分:2)
要将多个参数传递给函数,请使用*
运算符和**
运算符,如下所示。
def myfoo(*arg, **karg):
print arg, karg
*
运算符将所有有序参数打包在其中,而**
运算符将所有不匹配的键参数打包在其中。
例如:
def myfoo(a, *arg):
return a, arg
myfoo(11,22,33)
>> (11, [22, 33])
myfoo(11)
>> (11, [])
对于关键参数,其工作方式相同,
def myfoo(a=11, b=22, **kargs):
return a, b, kargs
myfoo(22, c=100, b=233)
>> (22, 233, {'c': 100})
(ref.)
答案 1 :(得分:1)
您可以使用单个星号*
展开函数的位置参数,并使用两个星号**
将字典作为键/值对展开。例如
def get(a, b, c=0):
print(a, b, c)
args = (1, 2)
kwargs = {'c': 3}
get(*args, **kwargs)
Python Reference对此有详细说明。
OP的更具体示例
如果您的函数get(id_=None)
具有关键字参数 id_
,则可以使用**some_dict
将键/值对展开为关键字参数。例如
In [1]: def get(id_=None):
...: print(id_)
...: # do something with id_ ...
...:
In [2]: get(**{'id_': 1})
1
In [3]: get(**{'id_': 2})
2
相反,如果您有一个带有位置参数的函数get(id_)
id_
,则可以使用*some_iterable
将这些值展开为位置参数。您还可以使用**some_dict
来展开键/值对,只要键与位置参数完全匹配即可。例如
In [4]: def get(id_):
...: print(id_)
...: # do something with id_ ...
...:
In [5]: get(*(1,))
1
In [6]: get(*(2,))
2
In [7]: get(**{'id_': 3})
3
In [8]: # this will fail because `id` is not the argument, `id_` is
In [9]: get(**{'id': 4})
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-922e10531f8a> in <module>
----> 1 get(**{'id': 4})
TypeError: get() got an unexpected keyword argument 'id'