将字符串转换为函数参数

时间:2019-02-11 09:50:57

标签: python

在将某些外部模块方法应用于类时,我需要能够将arg = 'value'的不同对传递给函数,例如:

Ad.nodes.get(id_ = '11974312')

如何将字典或元组传递给该函数,以便将'id_'(字符串)识别为id_(参数) ('id_', '11974312')(元组)还是{'id_':'11974312'}(词典)?

基本上,我只需要从id_中取出'id_'

作为参考,我正在尝试将neomodel模块用于neo4j图数据库。

2 个答案:

答案 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'