python中exec是什么意思_Python中的exec()

本文详细介绍了Python的exec()函数,它用于动态执行Python代码。通过字符串或代码对象传递代码,可以控制全局和局部变量,限制功能访问,并演示了如何在不同场景下使用该函数。此外,还讨论了如何通过限制全局参数来提高代码安全性。
摘要由CSDN通过智能技术生成

Exec函数可以动态执行python程序的代码。该代码可以作为字符串或目标代码传递给此函数。在第一次解析字符串并检查是否存在语法错误时,将按原样执行目标代码。如果没有语法错误,则将解析的字符串作为python语句执行。

exec()方法语法exec(object, globals, locals)

哪里对象-传递给方法的字符串或代码对象。

globals-可用的全局方法和变量的字典。

locals-可用的本地方法和变量的字典。

传递字符串

在下面的示例中,我们将一行代码作为字符串传递给该exec()函数。Itr被解析并执行以提供输出。x = 9

exec ('print(5*x)')

输出结果

运行上面的代码给我们以下结果-45

传递代码对象

现在,我们了解如何通过多个代码语句传递代码块。由于它是一个代码对象,因此将直接执行以给出结果。请注意,我们如何使用\ n和空格创建带有适当缩进的python代码块。

示例prog_block = 'x = 3 \nif(x 

exec(prog_block)

输出结果

运行上面的代码给我们以下结果-9

没有全局和局部参数

当我们不为全局和局部参数传递任何值时,我们将根据导入到程序中的包获得默认的可用功能。在下面的示例中,当跳过全局和局部参数值时,我们将看到为我们提供所有可用功能的代码。from time import *

exec("print(dir())")

运行上面的代码给我们以下结果-['In', 'Out', '_', '__', '___', '__builtin__', '__builtins__', '__doc__', '__file__', '__name__',

'__package__', '_dh', '_exit_code', '_i', '_i1', '_i10', '_i11', '_i12', '_i13', '_i14', '_i15',

'_i16', '_i17', '_i18', '_i19', '_i2', '_i20', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'clock',

'copysign', 'cos', 'cosh', 'ctime', 'daylight', 'degrees', 'e', 'erf', 'erfc', 'exit', 'exp', 'expm1',

'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'get_ipython', 'gmtime', 'hypot',

'isinf', 'isnan', 'ldexp', 'lgamma', 'localtime', 'log', 'log10', 'log1p', 'mktime', 'modf', 'pi',

'pow', 'prog', 'prog_block', 'quit', 'radians', 'sin', 'sinh', 'sleep', 'sqrt', 'strftime', 'strptime',

'struct_time', 'tan', 'tanh', 'time', 'timezone', 'trunc', 'tzname', 'x']

应用具有全局参数的限制

我们可以通过传递空字典作为全局参数来限制对导入模块的任何功能的访问。在这种情况下,结果将仅显示内置功能,而不会显示导入模块中的任何功能。这就是我们限制和使功能更安全的方式。

示例from time import *

exec("print(dir())",{})

输出结果

运行上面的代码给我们以下结果-['__builtins__']

仅允许选择的功能

接下来,我们将看到如何仅将某些选定的函数应用于exec()导入模块中的方法。在下面的示例中,我们仅使用Global选项将所需的函数用作参数。该localtime()方法是在程序中导入的时间模块的一部分。from time import *

exec("print lclt()",{"lclt":localtime})

输出结果

运行上面的代码给我们以下结果-time.struct_time(tm_year=2019, tm_mon=7, tm_mday=19, tm_hour=12, tm_min=33, tm_sec=53, tm_wday=4, tm_yday=200, tm_isdst=0)

传递局部参数

我们还可以通过使用局部参数并完全排除内置函数来限制从导入模块中使用各种函数。在下面的示例中,我们选择“无”作为内置全局参数的值。

示例from time import *

exec("print(dir())", {"__builtins__" : None}, {"gtime": gmtime, "print": print, "dir": dir})

运行上面的代码给我们以下结果-['dir', 'gtime', 'print']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值