我明白我做了什么,现在

I do understand what I did, now

我试图在循环中创建变量。即我传递了一个变量模式,它们的值和变量的模式相应地创建并存储在一个文本文件中。

但是,我尝试了一些题外话并做了这个:

a = lambda a: a
for i in ["a", "b"]:
    b = eval(i)(a)
    print(i)

输出是:

a
b

谁能解释一下这里发生了什么?

编辑: 我已经分析了它的答案。 我将其粘贴在下面。 请验证是否正确。 谢谢!

让我们先把问题分成几个部分。

def a(n):
    return n
b = eval("a")(a)
print("a")
b = eval("b")(a)
print("b")

我们可以清楚地看到输出是由于两个打印语句。

print("a")
print("b")

因此,其余语句在输出中不起作用。

def a(n):
    return n
b = eval("a")(a)
b = eval("b")(a)

这些陈述可以简单地这样表达:

def a(n):
    return n
b = a(a)
b = b(a)

声明

b = a(a)

效果相同
def b(n):
    return n

因此整个代码可以这样写:

def a(n):
    return n
def b(n):
    return n
print("a")
print("b")

所以这个问题现在没有歧义了。

您可以通过以下方式解构循环以便自己理解,请不要按照评论中指出的那样去做。

a = lambda a: a

# First iteration
i = "a"
b = eval(i)(a)
print(i) # a

# Second iteration
i = "b"
b = eval(i)(a) # eval("b") is now <function __main__.<lambda>(a)>
print(i) # b

您正在打印变量 i(它取值“a”和“b”,因为您遍历 [“a”,“b”])。如果您想查看变量 b 取哪些值,请打印 b:

a = lambda a: a
for i in ["a", "b"]:
   b = eval(i)(a)
   print(b)

让我们先把问题分成几个部分。

def a(n):
    return n
b = eval("a")(a)
print("a")
b = eval("b")(a)
print("b")

我们可以清楚地看到输出是由于两个打印语句。

print("a")
print("b")

因此,其余语句在输出中不起作用。

def a(n):
    return n
b = eval("a")(a)
b = eval("b")(a)

这些陈述可以简单地这样表达:

def a(n):
    return n
b = a(a)
b = b(a)

声明

b = a(a)

效果相同
def b(n):
    return n

因此整个代码可以这样写:

def a(n):
    return n
def b(n):
    return n
print("a")
print("b")

所以这个问题现在没有歧义了。