如何通过传递** args来更新函数变量

时间:2017-04-21 11:07:50

标签: python python-3.x

目前我正在努力获得Python的类功能'进入一个功能。

示例代码:

def image_gen(**kwargs):
    anglerange= 45
    print(image_gen.__dict__)
    image_gen.__dict__.update(kwargs)
    print(image_gen.__dict__)
    print(anglerange)

args = dict(anglerange=15)

image_gen(**args)

返回:

{}
{'anglerange': 15}
45

这不是解决参数更新的正确方法,但它的正确方法是什么?在类中,您可以调用self.update.__dict__,如何在函数中配置?

我需要在函数中初始化参数,以便运行标准副本。

使用Python 3.5

2 个答案:

答案 0 :(得分:1)

我可能误解了这一点,但我认为你要遇到的问题是功能数据会带来"实例"因为只有一个函数的副本,并且该函数的所有使用将共享同一个对象。请参阅以下示例:

# helper function, not really relevant
def print_non_builtins(func):
    orig = dir(func) + ['inspect']
    func.inspect = lambda: {k: getattr(func, k) for k in dir(func) if k not in orig}
    return func

@print_non_builtins
def function_with_data(**kwargs):
    for k, v in kwargs.items():
        setattr(function_with_data, k, v)


function_with_data(a=1, b=2)
print(function_with_data.inspect())
# {'a': 1, 'b': 2}

function_with_data(b=3)
print(function_with_data.inspect())
# {'a': 1, 'b': 3}

答案 1 :(得分:0)

逻辑不清楚...按键更新字典值:

def image_gen(**kwargs):
 print(kwargs)
 kwargs['anglerange'] = 45
 print(kwargs)

image_gen(**{'anglerange': 15})
{'anglerange': 15}
{'anglerange': 45}

参数通常不会在函数体中发生变化,它们可以循环重写等。其他例子:

def image_gen(anglerange=45):
 print anglerange

image_gen()
45
image_gen(15)
15

def rewrite_example(a):
 i = 0
 i = 1
 while i < 3:
  print("i =", i, a)
  i += 1

rewrite_example('text')
i = 1 text
i = 2 text