我有一个代码,我希望将其拆分为多个文件。在matlab中,可以简单地调用.m
文件,只要它没有被定义为特定的任何东西,它就会像被调用的代码一样运行。示例(已编辑):
test.m (matlab)
function [] = test()
... some code using variables ...
test2
test2.m (matlab)
... some more code using same variables ...
调用test
运行test中的代码以及test2中的代码。
python是否有类似的方式将... some more code ...
放入外部文件中,只是将其读取就好像它在调用它的文件中一样?
答案 0 :(得分:52)
当然!
#file -- test.py --
myvar = 42
def test_func():
print("Hello!")
现在,这个文件(“test.py”)在python术语中是一个“模块”。我们可以导入它(只要它可以在我们的PYTHONPATH
中找到)请注意,当前目录总是在PYTHONPATH
中,所以如果use_test
从test.py
运行{ {1}}生活,你已经准备好了:
#file -- use_test.py --
import test
test.test_func() #prints "Hello!"
print (test.myvar) #prints 42
from test import test_func #Only import the function directly into current namespace
test_func() #prints "Hello"
print (myvar) #Exception (NameError)
from test import *
test_func() #prints "Hello"
print(myvar) #prints 42
通过使用允许您将多个文件视为单个模块的特殊__init__.py
文件,您可以做更多的事情,但这会回答您的问题,我想我们会离开再休息一次。
答案 1 :(得分:31)
我刚才正在研究python中的模块用法,并且我认为我会回答Markus在上面的评论中提出的问题(“当它们嵌入到模块中时如何导入变量?”)从两个角度来看:
以下是我将如何重写主程序f1.py以演示Markus的变量重用:
import f2
myStorage = f2.useMyVars(0) # initialze class and properties
for i in range(0,10):
print "Hello, "
f2.print_world()
myStorage.setMyVar(i)
f2.inc_gMyVar()
print "Display class property myVar:", myStorage.getMyVar()
print "Display global variable gMyVar:", f2.get_gMyVar()
以下是我将如何重写可重用模块f2.py:
# Module: f2.py
# Example 1: functions to store and retrieve global variables
gMyVar = 0
def print_world():
print "World!"
def get_gMyVar():
return gMyVar # no need for global statement
def inc_gMyVar():
global gMyVar
gMyVar += 1
# Example 2: class methods to store and retrieve properties
class useMyVars(object):
def __init__(self, myVar):
self.myVar = myVar
def getMyVar(self):
return self.myVar
def setMyVar(self, myVar):
self.myVar = myVar
def print_helloWorld(self):
print "Hello, World!"
执行f1.py时,输出结果如下:
%run "f1.py"
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Display class property myVar: 9
Display global variable gMyVar: 10
我认为马库斯的观点是:
答案 2 :(得分:20)
Python有导入和命名空间,这很好。在Python中,您可以导入到当前名称空间,例如:
>>> from test import disp
>>> disp('World!')
或者使用命名空间:
>>> import test
>>> test.disp('World!')
答案 3 :(得分:3)
您可以通过简单地导入第二个文件在python中执行相同操作,顶级代码将在导入时运行。我认为这最好是混乱,而不是一个好的编程习惯。最好将代码组织到modules
中示例:
F1.py:
print "Hello, "
import f2
F2.py:
print "World!"
运行时:
python ./f1.py
Hello,
World!
编辑澄清:我建议的部分“凌乱”仅使用import
语句来生成输出的副作用,而不是创建单独的源文件。