首页 > 解决方案 > #include 在 Python 中,但实际上只包含

问题描述

我想问:有没有(在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 连接和类似数据的定义变量,对于更多脚本来说很常见。

标签: pythoninclude

解决方案


当你导入一个模块时,导入模块的全局范围内的任何东西都会被执行,这包括语句、变量定义、类定义等。

例如,如果我要修改您的mysum.py

a = 1
b = 4
def some_func(a,b):
    return a+b

然后在另一个脚本中运行

import mysum

所有这些语句都将被执行。我可以访问mysum.a,mysum.bmysum.some_func因为它们是在导入时执行的。你的c = a+b行为完全一样

现在让我们检查一下您拥有的脚本:

c = a+b

即使您正在导入它,也务必将其视为独立脚本,这一点很重要。在该脚本的整个范围内没有 a或未定义任何变量,因此当您导入时,将对其进行评估,而这些变量均未定义。bc=a+b

我不确定你想要做什么的确切用例,但如果你想要一些函数来添加两个变量,我会这样做:

#mysum.py

def some_add(a,b):
    return a+b

#other_module.py
import mysum
a = 2
b = 3
c = mysum.some_add(a,b)

你会注意到我没有使用全局风格的ablike

def some_add():
   return a+b

因为这又需要 a 和 b 在该模块的全局范围内,您将再次得到NameErrors


推荐阅读