如何通过在Python3函数中执行文本文件行来实例化全局变量?

弗洛里安·拉兰德(Florian Lalande)

我想使用Python函数将变量实例化为my_var默认值。接下来,我要使用以下input.txt文本文件来修改的值my_var

my_var = 0.15 # Change the value
print(f"In the text file, my_var={my_var}")
my_var = 0.15; print(f"In the same line, my_var={my_var}")

这是Python脚本,用于读取文本文件中的行并逐行执行:

def run_exec():
    my_var = 1.0 # Default value
    f = open("input.txt")
    lines = f.readlines()
    for l in lines:
        exec(l)
    print(f"Within the function, my_var={my_var}")
    return my_var

my_var = run_exec()
print(f"Outside the function, my_var={my_var}")

在终端中运行此脚本时,我得到:

At the beginning, my_var=1.0
In the text file, my_var=1.0
In the same line, my_var=0.15
Within the function, my_var=1.0
Outside the function, my_var=1.0

看起来每个执行的文本行都有其自己的作用域...我如何才能my_var=0.15超出函数范围?

姆霍克

是的,每次调用代码exec()都会在其自己的范围内运行。不可能直接影响中的函数的局部变量exec(),但是您可以传递字典以exec()用作在函数中创建的新局部变量的容器:

def run_exec():
    local_dict = {}        # container for local variables in exec()
    my_var = 1.0   # Default value
    with open("input.txt") as f:
        for line in f:
            exec(line, globals(), local_dict)

    # local variable unchanged
    print(f"Within the function, {my_var=}")

    my_var = local_dict.get('my_var', my_var)    # defaults to my_var
    print(f"Within the function {my_var=} after explicit assignment")
    return my_var

my_var = run_exec()
print(f"Outside the function, my_var={my_var}")

输出

In the text file, my_var=0.15
In the same line, my_var=0.15
Within the function, my_var=1.0
Within the function my_var=0.15 after explicit assignment
Outside the function, my_var=0.15

当然,您永远不要这样做,因为执行不受信任的代码极其危险,例如,如果文件包含以下内容:

exec('import os; os.remove("some_important_file")')

除此之外,还有更好的方法来执行此操作,例如配置文件,使用所需变量导入模块,JSON文件等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从python3中的文本文件更新变量

通过Python3从网页读取文本文件

如何通过使用python函数从文本文件导入坐标来计算距离

如何在Python3中从文本文件获取和创建自定义变量?

如何通过迭代找到字符频率形式的文本文件?(python3)

如何在Python3中颠倒个别行和单词,专门用于文本文件中的每个段落?

如何从2行文本文件读取并将每行输出到vb.net中的2个变量

Python如何从文本文件制作可执行文件

我如何让python3在文本文件中搜索特定的字符串

如何获得一个Perl脚本来执行文本文件中的命令?

如何创建多个文件夹并通过从文本文件中读取行来命名它们?

如何在整个文本文件中搜索一行文本

如何检查文本文件中的一行文本?

VB如何根据用户选择从文本文件中调出一行文本?

PHP在Smarty .conf文本文件中使用定义的全局变量

当我尝试在Python3中的函数中打印全局变量时出现错误

如何读取3行文本文件C#

JSONDecodeError 在 Python 中打开多行文本文件

如何从可执行C的elf文件中的名称获取函数或全局变量的地址?

Python 3+ 如何编辑文本文件中的一行

如何使用用户输入 Python 3 删除文本文件中的特定行

从文本文件中读取行,并通过将行中的值写入新的文本文件中来按均值(平均值)对行进行排序

从文本文件中删除所有行直到特定的字符串-python3

如何在Python中读取100GB单行文本文件?

如何在python 3.6中编辑多行文本文件?

如何通过从文本文件中获取 rssi 值来计算距离?

使用文本文件中列出的参数执行函数

可执行文本文件设置为执行

如何通过函数更新全局变量