python在函数里面中如何动态定义变量名并赋值呢,要作用到函数的局部变量而不是局部变量的复制字典上?

img


如图所示已经使用exec('count_{}=0'.format(i))创建了count_0但是这个变量没有真正作用在局部变量上 ,如何让它真正地作用在局部变量上呢?

exec 函数设置 locals 参数,
参考
Python: exec 函数的 globals 和 locals 参数的用法 - Huang Huang 的博客 我们都知道 exec 函数可以用来动态执行 python 代码: >> exec('foobar = 123') >>> foobar 123 那么大家是否知道 exec 函数还支持两个可选参数呢(不支持通过关键字去指定参数)? : exec(object[, globals[, locals]]) 这两个参数可以用来指定执行代码时可以使用的全局变量和局部变量, 以及收集执行代码后的全局变量和局部变量。 globals 默认为 globals() locals 默认为 globals 参数的值 下面将举例说明指定 globals 和 locals 时的效果。 globals¶ globals 是个 dict 对象,用来指定代码执行时可以使用的全局变量以及收集代码执行后的全局变量: >>> age = 10 >>> exec('abc = age + 1') >>> exec('abc = age + 1', {}) Traceback (most recent call last): File "", line 1, in File "", line 1, in NameError: name 'age' is not defined >>> exec('abc = age + 1', {'age': 2}) >>> >>> g = {'age': 2} >>> exec('abc = age + 1', g) >>> g['abc'], g['age'] (3, 2) 如果只指定了 globals 参数,它的值将同样用于 locals 参数。 有一点需要注意的是: 当 globals 字典不包含 __builtins__ 这个 key 时, python 会自动加一个指向 builtins 的引用。所以如果要禁止/限制代码使用内置函数的话, 需要同时指定 __builtins__ 这个 key: >>> exec('int(1)', {}) >>> exec('int(1)', {'__builtins__': {}}) Traceback (most recent call last): File "", line 1, in File "", line 1, in NameError: name 'int' is not defined locals¶ locals 可以是任何 mapping 对象,用来指定代码执行时的局部变量以及收集代码执行后的局部变量: >>> exec('abc = age + 1', {}, {'age': 2}) >>> >>> local = {} >>> exec(''' ... name = 'Tom' ... age = 13 ... ''', {}, local) >>> local {'age': 13, 'name': 'Tom'} 参考资料¶ 2. Built-in Functions — Python 3.5.1 documentation https://mozillazg.com/2016/03/python-exec-function-globals-and-locals-arguments.html
exec函数并不能真正动态创建局部变量
只能通过locals 参数的字典获取exec函数内创建变量的值

def fun():
    gl = globals()
    lo = locals()
    exec("aa=666",gl,lo)
    print(lo["aa"])

fun()

你需要的是list,字典,或者自定义类这些东西来装你的变量,而不是把变量定义成一个一个的字符串

编程,你需要始终围绕你的目的,寻找更佳的手段,而不是纠结手段忘记目的