首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么within exec()函数可以在原始代码中工作,而不能在Python3.7中的函数或类中工作?

在原始代码中,exec()函数可以执行动态生成的代码字符串。它将字符串作为参数,并在当前的全局命名空间中执行该字符串表示的代码。这意味着在执行exec()函数时,代码将在当前的命名空间中执行,可以访问和修改全局变量。

然而,在Python3.7中的函数或类中,exec()函数的行为有所不同。在函数或类中,每个函数或类都有自己的局部命名空间,而不是共享全局命名空间。因此,当在函数或类中使用exec()函数时,它将在该函数或类的局部命名空间中执行代码,而不是在全局命名空间中执行。

这种行为的改变是为了增加代码的可靠性和安全性。在函数或类中使用exec()函数可能导致意外的副作用,因为它可以修改局部变量,而这些变量可能在函数或类的其他部分使用。此外,函数或类的局部命名空间是在运行时动态创建的,因此在编写代码时无法预先确定。

如果需要在函数或类中执行动态生成的代码,可以考虑使用eval()函数。eval()函数可以计算并执行单个表达式,并返回结果。与exec()函数不同,eval()函数只能执行单个表达式,而不能执行多行代码。但是,需要注意的是,使用eval()函数也可能存在安全风险,因为它可以执行任意的Python表达式。

总结起来,exec()函数在原始代码中可以工作,因为它在全局命名空间中执行代码。然而,在Python3.7中的函数或类中,exec()函数无法工作,因为它在函数或类的局部命名空间中执行代码,而不是在全局命名空间中执行。如果需要在函数或类中执行动态生成的代码,可以考虑使用eval()函数,但需要注意安全性问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5年 Python 功力,总结了 10 个开发技巧

比如在 PyCharm ,你可以 Ctrl + 鼠标点击 进入函数代码。 那如果没有 IDE 呢? 当我们想使用一个函数时,如何知道这个函数需要接收哪些参数呢?...这就是 Python 默认开启自动关联异常上下文。 如果你想自己控制这个上下文,可以加个 from 关键字(from 语法会有个限制,就是第二个表达式必须是另一个异常实例。)...Python 3 print 作为一个函数,由于可以接收更多参数,所以功能变为更加强大,指定一些参数可以将 print 内容输出到日志文件 代码如下: >>> with open('test.log...为了实现这个需求,Python 3.2 + 给我们提供了一个机制,可以很方便实现,不需要你去写这样逻辑代码。 这个机制实现于 functool 模块 lru_cache 装饰器。...程序退出前执行代码技巧 使用 atexit 这个内置模块,可以很方便注册退出函数。 不管你在哪个地方导致程序崩溃,都会执行那些你注册过函数。 示例如下 ?

58110

跟着存档教程动手学RNAseq分析(三):使用DESeq2进行计数标准化

img 除了许多不关心因素之外,每个基因比对reads计数与RNA表达成正比。标准化是对原始计数值进行缩放以解释无关因素过程。通过这种方式,表达水平样本之间和/样本内部更具有可比性。...创建DESeq2对象 Bioconductor软件包通常在R定义和使用一个自定义来存储数据(输入数据、中间数据和结果)。这些自定义数据结构与列表相似,因为它们可以包含多种不同数据类型/结构。...但是,与列表不同是,它们有预先指定数据槽,用于存放特定类型/数据。存储在这些预先指定槽位数据可以通过使用特定包定义函数来访问。...例如,假设我们想要原始计数矩阵,我们将使用counts()(注意:我们将其嵌套在View()函数,这样我们就可以脚本编辑器中看到它,不是控制台中打印): View(counts(dds))...我们完成工作过程,我们将使用相关函数来检查对象存储了哪些信息。

2.9K21

Python – 编写可视化界面(Python+PyCharm+PyQt)

Python主要是通过来生成界面的,可以进行界面的生成,控件创建,创建控件响应函数,connect控件与控件响应函数。...其中函数 __init__(self) 可以理解为该类构造函数,其中界面的初始化该部分执行; 函数 InitUI(self) 主要是生成界面控件; 当创建完成后,只需要在主函数调用该类即可。..._()) 以上代码,主要是界面添加了一个按钮(btn),一个编辑框(le),一个按钮响应函数(ShowDialog),其中ShowDialog响应函数打开了一个标准输入窗口,并将标准输入窗口中输入值显示到编辑框...可以通过以上代码进行测试。 6、Ubuntu下python2.7安装pyqt5 上面记录都是windows+python3环境下pyqt5安装。...由于工作需要,需要在Ubuntu+python2.7环境下安装pyqt5,根据pyqt5官网,pyqt5只有针对python3安装包,没有python2.7,所以可以通过在线安装方式安装,下面是

2.6K20

解决python3关于import疑难杂症

pythonimport与包管理 概念:模块与包 模块module:一般是以.py为后缀文件,也包括.pyo、.pyc、.pyd、.so和.dll后缀文件,模块内定义了函数以及变量 包package...,记录函数变量 global namespace:模块命名空间,记录模块变量(函数、导入模块、模块级别的变量和常量) build-in namespace:包含build-in function...module代码时python解释器需要先搜索到对应.py文件,搜索顺序为: sys.path:包含了当前脚本路径和其他查找包(系统库、第三方库等)路径,你也可以代码通过sys.path.append...如果只是导入一个包import package指名任何模块,且包__init__.py没有其他初始化操作,那么包下面的模块是无法被自动导入。 6....尽量不要使用相对引用 Python3建议使用相对引用,最好遵循一定开发规范,不要在代码混用绝对引用与相对引用。

1.7K30

Python内置(3)exec&eval、globals&locals、input&print、5个基本类型、object

所有的内置函数 compile, exec and eval exec x = [1, 2] print(x) 保存为文件并运行,或者解释器中直接运行,都会得到输出[1, 2] 除此之外,你还可以将程序作为字符串传递给内置函数...2.我们可以使用内置函数compile将其编译为代码对象。然后,代码对象上用exec运行它。...如果你希望每次打印末尾打印一个新行,你可以使用:end='' >>> for i in range(10): ......这是因为, bool实际上不是一个原始数据类型 -- 它实际上是int ! 您可以通过查看这些mro属性来自己检查它。 mro代表“方法解析顺序”。它定义了查找上调用方法顺序。...从它们“祖先”可以看出,所有其他数据类型都不是任何东西“子类”(除了object,它将永远存在)。bool 继承自int 。 现在,在这一点上,您可能想知道“为什么

53520

python基础教程:模块高级技巧

注意你可以程序修改sys.path。sys.path是一个Python列表结构,我们可以像修改列表那样修改它,增加、删除、修改路径顺序。...这种命名方式方便不同版本Python编译模块同时存在造成冲突。 Python两种情况下不检查缓存。 其一,它总是重新编译并且不存储直接从命令行加载模块结果。...这种方式适合把编译好pyc发布给其他人不是给它们源代码,使用这种方式时,把.pyc文件从__pycache__拷贝到.py文件相同目录下并删掉.py文件即可。...其中一些模块内置解释器,它们提供对不属于语言核心但仍然内置操作访问,以提高效率提供对系统调用等操作系统原语访问。这些模块集合是一个配置选项,它也取决于底层平台。...一个值得注意模块是sys,它内置于每个Python解释器。 Python标注模块会在我们今后编程不断遇到和使用,具体学习可以今后用到时再学习。

78510

Python模块与包#学习猿地

## 模块 > 定义一个python文件,后缀名为.py。这个文件被称为模块。 > > 模块通常会定义一些相似的 函数代码内容,提供给别的程序引入后使用。...我是一个模块func函数') # 定义变量 love = 'iloveyou' ``` 定义一个python脚本就可以引入上面的文件作为模块使用 main.py ```python # main.py...lv # 导入My模块love变量,起个别名 print(love) print(lv) ``` #### 模块测试代码 ```python # 自定义模块,通常只是去定义函数,变量,等,...并不调用 # 如果在自定义模块,想要写一些测试代码,在当前模块作为主程序使用时执行, # 作为模块被别的程序导入时执行,那么可以把测试代码写到 下面代码 if __name__ == '__main...直接把包当作模块导入,可以内容是 __init__.py文件定义 # 推荐这种用法 import package package.funcpa() #2。

35710

Python模块与包#学习猿地

## 模块 > 定义一个python文件,后缀名为.py。这个文件被称为模块。 > > 模块通常会定义一些相似的 函数代码内容,提供给别的程序引入后使用。...我是一个模块func函数') # 定义变量 love = 'iloveyou' ``` 定义一个python脚本就可以引入上面的文件作为模块使用 main.py ```python # main.py...lv # 导入My模块love变量,起个别名 print(love) print(lv) ``` #### 模块测试代码 ```python # 自定义模块,通常只是去定义函数,变量,等,...并不调用 # 如果在自定义模块,想要写一些测试代码,在当前模块作为主程序使用时执行, # 作为模块被别的程序导入时执行,那么可以把测试代码写到 下面代码 if __name__ == '__main...直接把包当作模块导入,可以内容是 __init__.py文件定义 # 推荐这种用法 import package package.funcpa() #2。

48110

【JS】246-如何在JavaScript面试过五关斩六将?

与其他编程语言不同,函数可以赋值给变量,可以作为参数传递给另一个函数,也可以从另一个函数返回。因此,函数是 JS 第一公民。 这里就不赘述函数概念了,但你知道吧?函数就类似这样!...你可能在某些代码中经常看到这种语法。... Python/Ruby ,输入/输出过程可能会阻塞代码不允许进一步执行。但在 JavaScript ,因其允许异步操作,所以可以给异步函数提供回调。...filter 与 map 用法相近,因为 filter 也是处理数组每个元素并最终返回另一个数组(不像 reduce 返回一个值)。筛选后数组长度可以小于等于原始数组。...执行代码前,可以使用新布尔函数(ES5,ES6)检查变量是否有效,是否为 null undefined。

1.2K30

Linux进程控制

进程拥有独立性,fork之后就变成了两个程序,父子进程共享后边代码。 那么为什么给父进程返回就是子进程pid,给子进程返回就是0呢?...就好比孩子只能有一个亲生父亲,一个父亲可以拥有很多亲生孩子,每个孩子都是独立不同。 fork函数什么时候创建子进程呢?...进程终止 退出码 写C/C++时候,我们main函数是程序开始,但是最后一个位置会写return 0; 这也就代表一个程序退出,至于为什么要写return 0,不是返回其他,亦或者是写都可以...,我们输入ls什么时候不同文件会有颜色,但是如果调用exec里面就需要自己添加颜色选项,我们又不能在屏幕输入,所以只能在代码添加,首先判断一定要是ls命令才行,然后添加颜色选项。...第三步是打印,创建一个子进程帮我们工作,这是因为exec函数会替换掉原来程序中所有的代码和数据: 然后我们还可以设置一个条件编译来看看字符指针数组字符切割是否正确: 先来测试一下上面的程序是否正确

2.9K00

qt多线程编程实例_lgbt

QT中所有的组件和几个相关只能工作GUI线程,不能工作在次线程,次线程即工作线程,主要负责处理GUI线程卸下工作。...另一个线程(不是创建它线程)delete QObject对象是不安全。除非可以保证同一时刻对象不在处理事件。...例如:不能在不属于这个对象线程启动一个定时器连接一个socket,必须保证删除QThread之前删除所有创建在这个线程对象。...在实践,只能在主线程而非其它线程中使用GUI可以很轻易地被解决:将耗时操作放在一个单独工作线程,当工作线程结束后GUI线程由屏幕显示结果。...工程实践,为了避免冻结主线程事件循环(即避免因此冻结了应用UI),所有的计算工作一个单独工作线程完成工作线程结束时发射一个信号,通过信号参数将工作线程状态发送到GUI线程函数更新

1.5K10

27 个问题,告诉你Python为什么这么设计

为什么 join()是一个字符串方法不是列表元组方法? 异常有多快? 为什么Python没有switchcase语句? 难道不能在解释器模拟线程,而非得依赖特定于操作系统线程实现吗?...与其他语言中添加功能lambda表单不同,Python lambdas只是一种速记符号,如果您懒得定义函数的话。 函数已经是Python第一对象,可以本地范围内声明。...字典工作方式是使用 hash() 内置函数计算字典存储每个键hash代码。...为什么没有goto? 可以使用异常捕获来提供 “goto结构” ,甚至可以函数调用工作 。...另一个次要原因是冒号使带有语法突出显示编辑器更容易工作;他们可以寻找冒号来决定何时需要增加缩进,不必对程序文本进行更精细解析。 为什么Python列表和元组末尾允许使用逗号?

6.7K11

python基础教程:内置函数(二)

locals 可以是任何映射对象。 这个函数可以用来执行任何代码对象(如 compile() 创建)。这种情况下,参数是代码对象,不是字符串。...请注意即使传递给 exec() 函数代码上下文中,return 和 yield 语句也不能在函数定义之外使用。该函数返回值是 None 。...这总是当前模块字典(函数方法,不是调用它模块,而是定义它模块)。 locals() 更新并返回表示当前本地符号表字典。函数不是调用 locals() 时会返回自由变量。..._x 这段代码与第一个示例完全等效。 要保证其他函数指定与原始属性相同名称(本例为x)。 返回属性对象还具有与构造函数参数对应属性fget,fset和fdel。...super有两个典型用例。具有单继承层次结构,super可用于引用父不显式命名它们,从而使代码更易于维护。这种用法与其他编程语言中super使用密切相关。

1.3K20

python模块之re(正则表达式)

re.VERBOSE 同re.X,对应内联标识为(?x)。冗余模式,此模式下可以表达式添加注释,使其更具可读性,但在编译时会忽略多余空格和注释。...如果返回None表示匹配失败 即使MULTILINE模式下,match()函数也只会匹配字符串开头,不会匹配每行开头 re.fullmatch(pattern, string, flags=0) 如果...repl可以是字符串函数,如果是字符串,其中所有\都将进行转义处理,比如\n表示换行符,反向引用\6表示pattern匹配第六个分组,某些无意义转义可能原样保留导致异常: >>> re.sub...如果参数为0,返回值为pattern匹配完整字符串 如果参数1-99范围内,返回对应分组匹配字符串 如果参数为负数大于pattern定义分组数量,抛出IndexError异常 如果对应分组无匹配...'first_name': 'Malcolm', 'last_name': 'Reynolds'} Match.start([group]) Match.end([group]) 返回由group匹配子字符串原始字符串开始和结束索引

1.1K61

19.USENIXSec21 DeepReflect:通过二进制重构发现恶意行为(经典)

整个工作非常充实,也是恶意代码分析一篇经典文章。 希望自己能在科研路上不断前行,不断学习和总结更高质量论文。由于自己很菜,只能通过最土办法慢慢提升,也请大家批评和指正。...本文提出了一种解释框架(如我们提出 AE SHAP)定位恶意软件重要部分方法,该方法可以映射回原始二进制控制流图特征。...DEEPREFLECT通过学习正常情况下良性二进制函数工作。因此,任何异常都表明这些函数不会出现在良性二进制文件可能被用于恶意行为。...RoI检测优点是分析人员可以快速定位启动和操作恶意行为特定代码区域。先前工作只关注于创建临时签名,简单地将二进制文件标识为恶意软件仅基于API调用某些函数。...)18个特征(之前论文已提出),并且提出了一种解释框架定位恶意软件重要部分方法,该方法可以映射回原始二进制控制流图特征。

1.1K20

通过小事例来重温 ES10 几个新特性

正则表达式捕获组 regex 捕获组只是从 () 括号中提取一个模式,可以使用 /regex/.exec(string) 和string.match 捕捉组。...ES10建议解决方案是将未配对代理代码点表示为JSON转义序列,不是将它们作为单个UTF-16代码单元返回。 ?...所有对象(包括函数)都是通过基于原型继承从它继承。 这意味着我们以前已经有 funcion.toString() 方法了。 但是 ES10 进一步尝试标准化所有对象和内置函数字符串表示。...11.BigInt -任意精度整数 BigInt 是第七种 原始类型。 BigInt 是一个任意精度整数。这意味着变量现在可以 表示²⁵³ 数字,不仅仅是9007199254740992。...尽管这些特性许多对于Web应用程序开发可能不是必需,但是一些特性可以规制咱们以前通过技巧大量冗长实现代码

91810

使用 Golang 和 Docker 运行 Python 代码

,我们首先需要排除掉使用 os/exec 这类方式,丑陋(不可靠、不稳定)使用 Shell 来执行 Python 代码。...完整代码开源 soulteary/docker-python-in-go,你可以自取。 折腾之前,我们先聊聊原理和场景限制。...不过,随着 Python 版本迭代和变动,项目陷入了困境: Python 3.8 ,需要调整 Python 源码实现,移除 PyEval_ReInitThreads 函数,才能够正常工作。...所以,如果我们愿意调整 Python 源码,那么我们可以使用 3.8 版本 Python,否则方案就只能在 3.7 版本 Python 运行。...实现 Golang 程序 Golang 程序实现也不复杂,我们可以将上面的代码直接 HardCode 到 Go 里,或者使用 os、io 包里函数,来读取我们 Python 程序,大概 20 行内就能解决战斗

54620

C++:21---仿函数

因此,这里需要明确两点:   1 仿函数不是函数,它是个;   2 仿函数重载了()运算符,使得它对你可以函数那样子调用(代码形式好像是调用函数)。...怎么样找到以上两个函数一个折中解决方案呢?  有三种解决方案可以考虑: 1、函数局部变量; 局部变量不能在函数调用传递,而且caller无法访问。...原因有以下几点要考虑: 1、容易出错;   为什么这么说呢,我们必须先初始化maxLength值,才能继续接下来工作,如果我们忘了,则可能无法得到正确答案。...因而你functor可以应用于不同场合,STL算法中就大量使用了functor,下面是STLfor_each中使用functor示例: struct sum { sum(int *...这意味着它可以内联这个函数调用。如果使用函数指针,编译器不能直接确定指针指向函数,而这必须在程序运行时才能得到并调用。

49430

Web前端面试敲重点知识,14个TypeScript核心基础面试题和答案

void 表示变量没有类型,它充当与任何相反类型,它在返回值函数特别有用 如果变量是 void 类型,则只能将 null undefined 值分配给该变量。...函数是执行特定代码代码函数可以有选择地接受一个多个参数,处理它们,并有选择地返回一个值。 image.png 8、如何在 TypeScript 创建对象 ?...对象类型可以具有零个多个可选属性,属性名称之后 image.png 10、说说枚举 TypeScript 是如何工作 ?...protected:受保护成员仅对包含该成员子类可见。扩展容器外部代码无法访问受保护成员。 private:私有成员仅在内部可见,没有外部代码可以访问私有成员。... TypeScript ,您可以将任何数据和函数创建为简单对象,而无需创建包含。 因此 TypeScript 不需要静态,单例只是 TypeScript 一个简单对象。

11.5K10
领券