Python更改函数输入名称internaly

时间:2013-01-16 16:27:17

标签: python

我需要创建一个能够:

的功能
  1. 检查输入参数并获取输入数量及其值
  2. 创建一个循环,并在每个输入名称后添加字符串'_in'
  3. 将新输入设为全局
  4. 使用旧值分配新输入
  5. 我尝试使用inspect.getargspec()但似乎应该在函数外部调用它。那么有什么建议吗?

    这是伪代码: 定义此功能:

    def set_global(a1, a2, a3, .... an):
        #the number of arguments is not fixed and we need to detect that
        for old_input in total input:
             new_input_name=str(old_input.name)+'_in'
             global new_input_name 
             new_input_name = old_input.value
    

2 个答案:

答案 0 :(得分:2)

def foo(*args, **kwargs):
    print "number of fixed args: %d" % len(args)
    print "number of keyword args: %d" % len(kwargs)
    print "keyword argument names: %s" % str(kwargs.keys())

我们可以将此globals()应用到您想要的地方:

def set_globals(**kwargs):
    for argname in kwargs:
        globals()['%s_in' % argname] = kwargs[argname]

因此,使用Python交互式解释器中的上述函数:

>>> set_globals(foo='x', bar='y')
>>> foo_in
'x'
>>> bar_in
'y'

答案 1 :(得分:1)

我真的认为你正在寻找globals功能。

a = 1
globals()['a'] = 2
print a  #2
globals()['a_in'] = 2
print a_in  #2

你可以把它放在一个函数中:

def do_something_with_globals(**kwargs):
    for k,v in kwargs.items():
        globals()[k+'_in'] = v

可以像这样调用:

a = 1
b = 2
do_something_with_globals(a=a,b=b)
print a_in
print b_in

但老实说,我真的不认为这是个好主意......