我来自 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 那样得到某种有序文档,因此不需要。