eag*_*arn 5 python python-module python-import
这是我的模块:
测试1.py
regions=["a","b","c"]
print "from test1 module"
Run Code Online (Sandbox Code Playgroud)
测试2.py
from test1 import regions
print "from test2 module", regions
Run Code Online (Sandbox Code Playgroud)
运行 test2.py
python test2.py
from test1 module
from test2 module ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
我看到print语句 fromtest1.py被调用,虽然我只导入regionslist from test1.py。我不是说import test1.py一切都要被执行。
1)为什么它会执行test1.py文件中的所有内容(当然不是__name__==__main__if 包含的)。
2)如何import在不执行所有其他语句的情况下只执行regions listfrom test1 module?
我不知道这就是导入的工作原理,并且由于这个原因,我已经研究了 3 天的错误。
这就是进口的运作方式。
def my_function():
print("Hello")
Run Code Online (Sandbox Code Playgroud)
上面的代码片段是什么?它肯定是一个函数定义,但Python中的函数定义是语句,必须执行它们才能定义函数。因此,当您导入上述模块时,它会执行,这def会创建一个新函数并将其分配给my_function。它基本上与以下相同:
my_function = ...definition..
Run Code Online (Sandbox Code Playgroud)
因此,当您导入模块时,您总是执行其内容。否则,您将无法使用该模块中的任何函数(或类)。
当然,还有其他方法可以在 Python 中定义函数。
def create_my_function(x):
def local_function():
print(x)
global my_function
my_function = local_function
create_my_function("Hello")
Run Code Online (Sandbox Code Playgroud)
这大致相当于 的原始定义my_function()。
由于您可以将任何语句放入Python模块中,因此Python无法知道必须执行哪些语句才能定义您感兴趣的符号。因此它必须执行所有语句。
Python需要执行模块中的所有语句,因为它们可能会产生相关的副作用。例如考虑
a = 2
b = a*3
Run Code Online (Sandbox Code Playgroud)
如果我从该模块导入 b 会发生什么?一般来说,除 main 之外的模块不应具有导入时有害的副作用。一般来说,模块应该定义类、函数和变量,但不应该执行打开文件、连接数据库等操作。
| 归档时间: |
|
| 查看次数: |
1613 次 |
| 最近记录: |