当前位置: 首页 > 面试题库 >

无法通过exec()语句更改函数中的全局变量?

董同
2023-03-14
问题内容

为什么不能使用exec()从函数内部更改全局变量?当赋值语句在exec()之外时,它可以正常工作。这是我的问题的一个例子:

>>> myvar ='test'
>>> def myfunc():
...全球myvar
... exec('myvar =“ changed!”')
...打印(myvar)
... 
>>> myfunc()
测试
>>>打印(myvar)
测试

问题答案:

根据文档,该exec语句采用两个可选表达式,默认为globals()locals(),并且始终在其中进行更改(如果有)locals()

因此,请更加明确/具体/精确…:

>>> def myfunc():
...   exec('myvar="boooh!"', globals())
... 
>>> myfunc()
>>> myvar
'boooh!'

…并且您将能够使全局变量更贴近您的内心。



 类似资料:
  • 问题内容: 我在VBA中有以下代码: newvalue和tempvalue都是全局变量,并且已经被设置为值。语法上,这有意义吗?还是我缺少引号? 问题答案: 试试这个: 如果是 数字 : If是 字符串 (如果/不包含单引号): If是 字符串 (如果/包含单引号,如): 如果是 日期 : 感谢@HansUp在注释中指出, MID是函数的名称,因此在SQL语句中将该字段名称放在方括号或别名中会更安

  • 我在jupyter notebook(python 3.6.8)中运行此代码。我希望代码打印2作为结果,但不知何故它仍然打印1。我想知道为什么。 我使用的jupyter笔记本环境是: jupyter核心:4.6.3 jupyter-笔记本:6.1.4 QtConsole:4.7.7 ipython:7.16.1 ipycore:5.3.4 jupyter客户端:6.1.7 jupyter实验室:2

  • 问题内容: 我正在尝试使用exec运行一段python代码。 这导致以下输出 但是,如果我将代码更改为此- 然后工作正常-提供以下输出- 显然,A存在并且可以访问-在第一段代码中出了什么问题?我正在使用2.6.5,欢呼声, 科林 更新1 如果我检查类中的locals()- 然后很明显,locals()在两个地方都不相同- 但是,如果我这样做,就没有问题- 更新2 好的,所以这里的文档-http:

  • 问题内容: 这(我的代码的简化版本)不起作用: 为什么?我要访问,因为如果失败,我想在上面记录错误。 递归地调用自身以创建目录列表,因此我担心将整体传递给自身(如中所述)可能会损害性能。 有没有一种方法可以在不传递参数的情况下访问内部?(PHP 5.2.x +) 编辑: 如果代码看起来像这样呢? 问题答案: 您必须将其传递给函数: 或将其声明为global: 如果变量不是全局变量,而是在外部函数中

  • 问题内容: 发布之前,我读过几篇有关开发USD函数的文章,但尚未遇到解决我的问题的方法…如下: 我有一个非常简单的数据库,该数据库存储篮球运动员,并由ID,Age,Height和Name列组成。我想做的是使用一个参数@set varchar(10)实现一个函数’height’,该函数取决于一个@set值将触发不同的select语句 我试图实现的是伪代码: 谁能给我一个提示如何实现它? 问题答案:

  • 问题内容: 该文件说: Swift编译器会自动将C和Objective-C源文件中定义的全局常量作为Swift全局常量导入。 但这并没有说相反的话。我需要定义一个全局swift常数,并且能够像全局c常数一样客观地看到它。如快速定义: 并在物镜c端使用它,例如 我该怎么办?我已经导入了迅速自动生成的标题,例如: 在Xcode中,如果我使用它,它将带我到swift代码中的正确位置,但是在编译时,我得到