我来自 PHP(以及其他一些东西)背景,我正在玩 Python。在 PHP 中,当我想包含我刚刚执行的另一个文件时,include
或者require
该文件中的所有内容都包含在内。
但似乎推荐的在 python 中做东西的方法是from file import
,但这似乎更多地用于包含库和东西?你如何将你的代码分成几个文件?唯一的方法是拥有一个包含一大堆函数调用的文件,然后导入其他 15 个文件吗?
我来自 PHP(以及其他一些东西)背景,我正在玩 Python。在 PHP 中,当我想包含我刚刚执行的另一个文件时,include
或者require
该文件中的所有内容都包含在内。
但似乎推荐的在 python 中做东西的方法是from file import
,但这似乎更多地用于包含库和东西?你如何将你的代码分成几个文件?唯一的方法是拥有一个包含一大堆函数调用的文件,然后导入其他 15 个文件吗?
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 时的每一个习惯和用法,并以不同的方式重新学习这些东西。最后,那只会让你成为更好的软件工程师。
我想我明白你想说什么和做什么。
这是来自 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
?>
第一个回显命令将只打印“A”字符串,因为它没有分配给变量的任何值。下一个回显将打印一个完整的字符串,这要归功于您之前的包含。
然而,Python 的“导入”会导入一个模块或它的一部分,因此您可以在当前模块中使用它。
这是一个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()
换句话说 - 你从一个模块导入一些功能,然后在你的另一个模块中使用它。
从编程标准或最佳实践来看,上面的示例并不是很好,但我认为它可以让您有所了解。
有趣的问题。如您所知,在 PHP 中,您可以使用 include 来分隔代码,它从字面上获取包含文件中的所有代码并将其放在您调用 include 的任何位置。这对于编写 Web 应用程序很方便,因为您可以轻松地将页面分成几部分(例如页眉、导航、页脚等)。
另一方面,Python 不仅仅用于 Web 应用程序。要重用代码,您必须依赖函数或古老的面向对象编程。PHP 也有函数和面向对象的编程仅供参考。
您在一个文件中编写函数和类并将其导入另一个文件。这使您可以访问函数或使用您在其他文件中定义的类。
假设您有一个foo
在 file中调用的函数file1.py
。从file2.py
,你可以写
import file1
。然后,调用 foo 与file1.foo()
. 或者,写from file1 import foo
,然后你可以调用 foo foo()
。请注意,from
您可以直接调用 foo 。有关更多信息,请查看 python 文档。
在技术层面上,Python 导入与 PHP 要求非常相似,因为它将执行导入的文件。但由于 Python 并非旨在最终生成 HTML 文件,因此您使用它的方式非常不同。
通常,模块级别的 Python 文件根本不包含很多可执行代码,而是函数和类的定义。您导入它们并将它们用作库。
因此,像 header() 和 footer() 这样的东西在 Python 中是没有意义的。这些只是功能。像这样调用它们,它们生成的结果将被忽略。
那么如何拆分 Python 代码呢?好吧,您将其拆分为函数和类,然后将它们放入不同的文件中,然后导入。
有一个execfile()
函数可以与 PHP 做一些模糊的比较include
,在这里,但它几乎肯定是你不想做的事情。正如其他人所说,这只是 Python 中的不同模型和不同的编程需求。您的代码将从一个函数转到另一个函数,并且您放置它们的顺序并没有真正的区别,只要它们的顺序是您在使用它们之前定义事物的顺序。您只是不想像通常使用 PHP 那样得到某种有序文档,因此不需要。