gpt4 book ai didi

python - exec()在函数python3.x中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:57 25 4
gpt4 key购买 nike

我正在尝试运行这段代码,但似乎 exec() 没有执行函数内的字符串:

def abc(xyz):
for i in fn_lst:
s = 'temp=' + i + '(xyz)'
exec(s)
print (temp)

abc('avdfbafadnf')

我收到的错误:

NameError                                 Traceback (most recent call last)
<ipython-input-23-099995c31c78> in <module>()
----> 1 abc('avdfbafadnf')

<ipython-input-21-80dc547cb34f> in abc(xyz)
4 s = 'temp=' + i + '(word)'
5 exec(s)
----> 6 print (temp)

NameError: name 'temp' is not defined

fn_lst 是函数名称列表,即:['has_at', 'has_num' ...]

如果可能的话,请告诉我 exec() 的替代方法。

最佳答案

首先,我们展示了如何通过传递给 exec() 的字符串设置一个变量,该变量在 exec() 调用之外可用。然后我们展示一些示例,说明如何在调用 exec() 的函数调用之外使变量可用。

核心概念包括 exec() 作为参数、要执行的字符串以及用作全局和局部范围的两个字典。

例如,我们可以像这样传递实际的全局和局部作用域:

exec( 'a = 3', globals(), locals() )

print( a )

这将打印以下结果:

3

但是,我们选择将哪些字典传递给 exec() 具有相当大的灵 active ,这提供了几种方法来从调用 exec() 的函数中设置局部范围内的变量。

例如,我们可以将当前局部作用域传递给一个函数,然后将其用作 exec() 的局部字典,如下所示:

def demofunction( adict ):

exec( 'a=1.', globals(), adict )

print( 'before calling the function' )
try:
print( a )
except Exception as e:
print( e )

demofunction( locals() )

print( 'after calling the function' )
print( 'a =', a )

这打印:

before calling the function
name 'a' is not defined

after calling the function
a = 1.0

由于调用范围对于函数内部的范围是全局的,从函数内部设置局部变量的另一种简单方法是仅使用 globals() 作为 exec() 的第二个参数。

def demofunction( adict ):

exec( 'a=1.', None, globals() )

print( 'before calling the function' )
try:
print( a )
except Exception as e:
print( e )

demofunction( locals() )

print( 'after calling the function' )
print( 'a =', a )

再次打印:

before calling the function
name 'a' is not defined

after calling the function
a = 1.0

因此,我们看到 exec() 实际上可以从函数内部在我们的本地范围内创建变量。

此外,您不限于 globals() 和 locals()。您可以将任何有效的字典传递给它。

def demofunction( adict ):

exec( 'a=1.', None, adict )


somedict = { 'b': 1 }
print( somedict )

demofunction( somedict )

print( somedict )

现在的输出是:

{'b': 1}
{'b': 1, 'a': 1.0}

注意:在第一个示例中,单独使用本地参数就足够了,即省略 globals()。两者都包含在这里以说明更一般的情况。您可以在 Python Textbook - Scope 中阅读 Python 中的“作用域”

关于python - exec()在函数python3.x中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41100196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com