python中exec作用域的问题

新手上路,请多包涵

我是小白,在看一本爬虫教材时用到了exec方法,但有一个地方不懂,就把那一段简化成一个函数。
第一个情况,把name变量和两端用+连接,第二种直接写在一个字符串中,第三种直接打印
看不懂前两个的区别,不都是一个字符串吗?顺便请教一下exec的作用域的问题...心好累
请教好心人,非常感谢

def func():

list = ['a', 'b', 'c']

x = 1
for a in list:
    name = 'number' + str(x)  # 动态创建变量
    exec(name + '=a')  # 赋值
    exec('print(' + name + ')')
    x += 1

func()

a

b

c

def func():

list = ['a', 'b', 'c']

x = 1
for a in list:
    name = 'number' + str(x)  # 动态创建变量
    exec(name + '=a')  # 赋值
    exec('print(name)')
    x += 1

func()

number1

number2

number3

def func():

list = ['a', 'b', 'c']

x = 1
for a in list:
    name = 'number' + str(x)  # 动态创建变量
    exec(name + '=a')  # 赋值
    print(name)
    x += 1

func()

number1

number2

number3

阅读 2.4k
1 个回答

默认情况下exec作用域就在当前语句块范围, 第一份代码中,name的值是'number' + str(x), 把name替换为它的值就比较好理解了

def func():
    list = ['a', 'b', 'c']

    x = 1
    for a in list:
        name = 'number' + str(x)  # 动态创建变量
        exec(name + '=a')  # 赋值
        exec('print(' + 'number' + str(x) + ')')
        x += 1

所以,第一份代码打印的是'number' + str(x)变量的值,第二份打印的是name变量的值

exec
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题