page contents

Python exec 函数的全面指南:动态执行代码的利器

本文讲述了python exec 函数的全面指南:动态执行代码的利器!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

attachments-2024-02-uFkwjeZr65c08da50eef6.png本文讲述了python exec 函数的全面指南:动态执行代码的利器!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

Python exec函数是Python中一个非常重要的函数,它可以执行一段字符串代码,并且可以在运行时创建新的变量和函数。Python exec函数的使用非常灵活,可以用于很多场景,比如动态生成代码、动态加载模块等。本文将从多个角度来分析Python exec函数的使用方法。

1 exec函数的介绍

1.1 函数作用

python内置函数exec支持动态执行python代码,传入exec函数的object实参可以是字符串,也可以是字节码对象。如果object实参是字符串则会被exec函数编译并执行,如果是字节码对象则会被直接执行。通常exec配合compile函数来使用。

1.2 函数定义

exec(object[, globals[, locals]])参数:

object 可以是字符串或者字节码对象;

globals 可选参数,如果提供了必须是字典对象,若不提供,则使用当前作用域里的;

globalslocals 可选参数,任意字典映射对象。

返回值:无

2 exec函数简单应用

2.1 参数expression的使用

code_str = "x = 10\ny = 20\nprint(x + y)"

exec(code_str)

# 输出结果为 30

exec函数没有返回值,因此在执行代码的时候,在字符串中使用print来打印。

2.2 参数globals的使用

x = 10

y = 20

exec('print(x + y)', {'x': 1, 'y': 2})

# 3

exec函数只提供了globals参数而忽略了locals参数,因此locals会取globals参数的值,即:x = 1, y = 2,sum = x + y = 3

2.3 参数locals的使用

x = 10

y = 20

exec('print(x + y)', {'x': 1, 'y': 2}, {'y': 3, 'z': 4})

# 4

exec函数的globals参数和locals都被提供了,那么exec函数会先从全部作用域globals中找到变量x, 从局部作用域locals中找到变量y,即:x = 1, y = 3

3 exec函数执行代码块

exec最大的特点就是可以执行复杂的python代码。

code_str = '''

import json

data = {

    "name": "张三",

    "age": 18,

}

res = json.dumps(data, ensure_ascii=False)

print(type(res))

print(res)

'''

exec(code_str)

# <class 'str'>

# {"name": "张三", "age": 18}

code_str = '''

from dataclasses import dataclass, field

@dataclass

class Student:

    name: str

    age: int = 0

    # 个人信息

    info: str = field(init=False)

    def __post_init__(self):

        self.info = f'我的名字叫{self.name}, 今年{self.age}岁了'

stu = Student("张三", 20)

print(stu)

'''

exec(code_str)

# Student(name='张三', age=20, info='我的名字叫张三, 今年20岁了')

✏ 总结

在 Python 中,eval() 和 exec() 都可以用于动态执行代码,但它们的具体用途和行为略有不同:

eval() 函数主要用于计算数学表达式或解析字符串中的表达式。它将字符串作为参数,将其作为一个 Python 表达式进行求值并返回结果。eval() 函数可以接受一个字典作为可选参数,用于指定全局和局部命名空间。

exec()函数则用于执行一段代码块,可以是单个语句或多个语句。与 eval() 不同,exec() 不会返回任何值,它只是执行代码并将结果存储在变量中(如果指定了变量)。exec() 函数也可以接受一个字典作为可选参数,用于指定全局和局部命名空间。

因此,eval() 和 exec() 的主要区别在于它们的返回值。eval() 返回表达式的计算结果,而 exec() 没有返回值,只是在运行时执行代码。此外,eval() 更适合用于简单的表达式计算,而 exec() 更适合用于复杂的代码块执行。但同时这两个函数都存在安全风险,使用的时候请谨慎。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-02-05 15:27
  • 阅读 ( 130 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章