我来自PHP(以及其他一些东西)背景,我正在玩Python。在PHP中,当我想要包含另一个文件时,我只需要include
或require
,并且包含该文件中的所有内容。
但似乎在python中做推荐的方法似乎是from file import
,但这似乎更适合包含库和东西?你如何在几个文件中分离你的代码?唯一的方法是使用一大堆函数调用单个文件然后导入其他15个文件?
答案 0 :(得分:9)
PHP和Python之间的情况完全不同,原因很多。
但似乎在python中推荐的方法是
from file import
,但这似乎更适合包含库和东西?
实际上,import
语句用于将对象从另一个模块导入当前模块。您可以将导入模块的所有对象导入当前模块:
import foo
print foo.bar
或者您可以从该模块中选择您想要的内容:
from foo import bar
print bar
甚至更好,如果您导入模块两次,它将只导入一次:
>> import foo as foo1
>> import foo as foo2
>> foo1 is foo2
True
如何在多个文件中分隔您的代码?
你必须考虑你的代码......这就是所谓的软件设计,这里有一些规则:
唯一的例外是当您想从命令行启动程序时,请附加:
if __name__ == "__main__":
在模块的最后。我最好的建议是在之后调用你的第一个函数:
if __name__ == "__main__":
main()
唯一的方法是使用一大堆函数调用单个文件然后导入其他15个文件吗?
这不是唯一的方法,但这是最好的方法。您将所有算法都放入函数和对象库中,然后在其他库中导入完全所需的内容。这就是您如何创建可重用代码的整个世界,而不必重新发明轮子!所以忘记文件,考虑包含对象的模块。
最后,我对你学习python的最好建议是忘掉你编写PHP时的每一个习惯和用法,并以不同的方式再次学习这些东西。最后,这只会让你成为一名更好的软件工程师。
答案 1 :(得分:3)
我想我明白你要说什么和做什么。
以下是来自PHP的随机包含示例:
文件#1 - vars.php
<?php
$color = 'green';
$fruit = 'apple';
?>
文件#2 - main.php
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?>
第一个echo命令只打印&#34; A&#34; string,因为它没有分配给vars的任何值。由于你之前的包含,下一个echo将打印一个完整的字符串。
Python&#34; import&#34;但是,导入模块或它的一部分,因此您可以在当前模块中使用它。
这是一个python示例:
文件1 - echo.py
apple = 'apple'
color = 'green'
文件2 - main.py
import echo
def func():
print "A "+echo.color+" "+echo.fruit
if __name__ == '__main__':
func()
换句话说 - 您从一个模块导入一些功能,然后在另一个模块中使用它。
上面的例子在编程标准或最佳实践方面并不是很好,但我认为它可以让你有所了解。
答案 2 :(得分:1)
有趣的问题。如您所知,在PHP中,您可以使用include来分隔您的代码,include会直接获取所包含文件中的所有代码并将其放在您调用include的任何位置。这对于编写Web应用程序很方便,因为您可以轻松地将页面分成多个部分(例如页眉,导航,页脚等)。
另一方面,Python不仅仅用于Web应用程序。要重用代码,您必须依赖函数或良好的旧的面向对象编程。 PHP还具有FYI的功能和面向对象的编程。您可以在文件中编写函数和类,并将其导入另一个文件中。这使您可以访问这些函数或使用您在其他文件中定义的类。
假设您在文件foo
中有一个名为file1.py
的函数。从file2.py
,你可以写
import file1
。然后,使用file1.foo()
调用foo。或者,写from file1 import foo
,然后您可以使用foo()
调用foo。请注意,from
允许您直接调用foo。有关更多信息,请查看python文档。
答案 3 :(得分:1)
在技术层面上,Python导入与PHP需求非常相似,因为它将执行导入的文件。但由于Python不是为最终生成HTML文件而设计的,因此您使用它的方式非常不同。
通常,模块级别的Python文件根本不包含很多可执行代码,而是函数和类的定义。您可以导入它们并将它们用作库。
因此,在Python中使用header()和footer()之类的东西是没有意义的。这些只是功能。像这样调用它们,它们生成的结果将被忽略。
那么你如何分割你的Python代码呢?好吧,你将它分成函数和类,然后将它们放入不同的文件中,然后导入。
答案 4 :(得分:0)
这里有一个execfile()
函数可以与PHP的include
进行模糊的比较,但这几乎肯定是你不想做的事情。正如其他人所说,它只是一个不同的模型和Python中不同的编程需求。你的代码将从一个函数变为另一个函数,只要它们处于你使用它们之前定义的顺序,它就不会对你放置它们的顺序产生影响。您只是不想像某些有序文档那样通常使用PHP,因此不需要。