eval(dir()[0])在python中做什么

eval(dir()[0])在python中做什么,python,python-3.x,python-2.7,dictionary,eval,Python,Python 3.x,Python 2.7,Dictionary,Eval,我在python中找到了一个程序的解决方案,但即使在搜索之后,我也无法理解它的功能。有人能解释一下这句话的意思吗 a, b, c = map(numpy.array,eval(dir()[0])) 函数,在不带参数调用时返回所有局部变量的名称,类似于locals.keys 显然,dir[0]是第一个局部变量的名称,evaldir[0]计算变量名称,即返回第一个局部变量的值 def f(y): print(dir()) # prints ['y'] print(dir()[

我在python中找到了一个程序的解决方案,但即使在搜索之后,我也无法理解它的功能。有人能解释一下这句话的意思吗

a, b, c = map(numpy.array,eval(dir()[0]))
函数,在不带参数调用时返回所有局部变量的名称,类似于locals.keys

显然,dir[0]是第一个局部变量的名称,evaldir[0]计算变量名称,即返回第一个局部变量的值

def f(y):
     print(dir())  # prints ['y']
     print(dir()[0])  # prints 'y'
     print(eval(dir()[0]))  # prints the value of y
例如:

>>> f(77)
['y']
y
77
>>> f([1,2,3])
['y']
y
[1, 2, 3]
函数调用第一个参数,该参数必须与第二个参数中的每个值一起调用,第二个参数必须是iterable,并生成结果,例如

>>> for result in map(str.upper, ['foo', 'bar', 'baz']):
...     print(result)
...
FOO
BAR
BAZ
将这些变量组合在一起,并假设第一个局部变量是名为first_variable的列表,则此代码:

a, b, c = map(numpy.array,eval(dir()[0]))
a, b, c = first_variable
a = numpy.array(a)
b = numpy.array(b)
c = numpy.array(c)
与此代码相同:

a, b, c = map(numpy.array,eval(dir()[0]))
a, b, c = first_variable
a = numpy.array(a)
b = numpy.array(b)
c = numpy.array(c)
函数,在不带参数调用时返回所有局部变量的名称,类似于locals.keys

显然,dir[0]是第一个局部变量的名称,evaldir[0]计算变量名称,即返回第一个局部变量的值

def f(y):
     print(dir())  # prints ['y']
     print(dir()[0])  # prints 'y'
     print(eval(dir()[0]))  # prints the value of y
例如:

>>> f(77)
['y']
y
77
>>> f([1,2,3])
['y']
y
[1, 2, 3]
函数调用第一个参数,该参数必须与第二个参数中的每个值一起调用,第二个参数必须是iterable,并生成结果,例如

>>> for result in map(str.upper, ['foo', 'bar', 'baz']):
...     print(result)
...
FOO
BAR
BAZ
将这些变量组合在一起,并假设第一个局部变量是名为first_variable的列表,则此代码:

a, b, c = map(numpy.array,eval(dir()[0]))
a, b, c = first_variable
a = numpy.array(a)
b = numpy.array(b)
c = numpy.array(c)
与此代码相同:

a, b, c = map(numpy.array,eval(dir()[0]))
a, b, c = first_variable
a = numpy.array(a)
b = numpy.array(b)
c = numpy.array(c)

哪一部分你不明白?一般来说,每当你看到呼叫eval或exec时,从左肩上吐三口唾沫然后逃跑,因为evaldir[0]是可怕而脆弱的。不要将此作为您应该在自己的代码中执行的操作的示例。是当前本地命名空间中的第一个名称,按字母顺序排序。eval计算该名称以获取它所表示的对象。map然后在evaldir[0]中对x执行numpy.arrayx迭代。然后我们假设evaled对象中有三个项,并将map中的三个数组分配给这些变量。这就是为什么它们在正常程序中执行毫无意义的操作。您不了解其中的哪一部分?一般来说,每当您看到调用eval或exec时,都会从左肩上吐三口唾沫然后逃跑,因为evaldir[0]是可怕而脆弱的。不要将此作为您应该在自己的代码中执行的操作的示例。是当前本地命名空间中的第一个名称,按字母顺序排序。eval计算该名称以获取它所表示的对象。map然后在evaldir[0]中对x执行numpy.arrayx迭代。然后,我们假设evaled对象中有三个项,并将map中的三个数组分配给这些变量,这就是为什么它们在正常程序中执行毫无意义的操作。