python - #include 在 Python 中,但实际上只包含

标签 python include

我想问: 有没有(在Python中)任何方法,如何绝对愚蠢地将其他文件包含到源代码中?没有任何诸如模块之类的舞蹈, 即相当于 C 中的 #include ? 对此提出了很多问题,但所有问题都在打开导入模块。不,我只想将任何文件中的一些文本行插入到我的代码中,而不对其进行预处理。

例如:

让我们归档mysum.py

c = a + b # there is just this one line

我想包含另一个源代码: 文件experiment.py:

#!/usr/bin/python
# -*- coding: UTF8 -*-
import importlib
import sys
import math
 a = 1
 b = 2
 import **mysum**
 print c

好吧,这不起作用,

Traceback (most recent call last):
  File "./experiment.py", line 12, in <module>
    import mysum
  File "/home/rna/unix/mypok/mysum.py", line 5, in <module>
    c = a + b
NameError: name 'a' is not defined

我真的需要一个简短的头文件包含更多不同的脚本,其中会有关于MySQL连接和类似数据的定义变量,对于更多脚本来说很常见。

最佳答案

execfile 曾经在 Python 2 中执行此操作,但在 Python 3 中已被替换为:

exec(open('myfile.py').read())

这实际上只是读取该文件(在运行时),然后 exec 就是结果。请注意,这与 C++ 所做的不太一样,C++ 的做法是预处理器在文件运行(或编译)之前完成所有这些工作,但这可能是最接近的事情。

如果你想让它成为某种可重用的函数,你可以这样做

import sys
def include(filename):
    with open(filename, 'r') as f:
        exec(f.read(), sys._getframe(1).f_globals, sys._getframe(1).f_locals)

include("myfile.py") # literally reads the file and evaluates it at runtime

调用exec(f.read(), sys._getframe(1).f_locals, sys._getframe(1).f_locals)意味着exec call 在父函数的作用域中运行。另请参阅 What is an alternative to execfile in Python 3? 的答案

关于python - #include 在 Python 中,但实际上只包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54810879/

相关文章:

python - Pycharm 退出代码 0

python - 导入错误 :No module named difflib_data

c++ - 使用#include 包含代码段

c - C 中的#define 和#include 命令

entity-framework - 如果我从IQueryable中选择,那么包含将丢失

python - 使用 sklearn 和 pandas 在一个模型中结合词袋和其他特征

python - 用数组索引多维数组

python - 在请求库中处理 Decimal 到 Json

css - 如何在多个jsp中包含css?

c++ - Qt creator 直接文件包含