5

我来自 PHP(以及其他一些东西)背景,我正在玩 Python。在 PHP 中,当我想包含我刚刚执行的另一个文件时,include或者require该文件中的所有内容都包含在内。

但似乎推荐的在 python 中做东西的方法是from file import,但这似乎更多地用于包含库和东西?你如何将你的代码分成几个文件?唯一的方法是拥有一个包含一大堆函数调用的文件,然后导入其他 15 个文件吗?

4

5 回答 5

10

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 时的每一个习惯和用法,并以不同的方式重新学习这些东西。最后,那只会让你成为更好的软件工程师。

于 2013-06-22T21:48:39.450 回答
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

?>

第一个回显命令将只打印“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()

换句话说 - 你从一个模块导入一些功能,然后在你的另一个模块中使用它。

从编程标准或最佳实践来看,上面的示例并不是很好,但我认为它可以让您有所了解。

于 2013-06-22T21:33:29.987 回答
1

有趣的问题。如您所知,在 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 文档。

于 2013-06-22T19:51:05.173 回答
1

在技​​术层面上,Python 导入与 PHP 要求非常相似,因为它将执行导入的文件。但由于 Python 并非旨在最终生成 HTML 文件,因此您使用它的方式非常不同。

通常,模块级别的 Python 文件根本不包含很多可执行代码,而是函数和类的定义。您导入它们并将它们用作库。

因此,像 header() 和 footer() 这样的东西在 Python 中是没有意义的。这些只是功能。像这样调用它们,它们生成的结果将被忽略。

那么如何拆分 Python 代码呢?好吧,您将其拆分为函数和类,然后将它们放入不同的文件中,然后导入。

于 2013-06-22T21:49:28.763 回答
0

有一个execfile()函数可以与 PHP 做一些模糊的比较include,在这里,但它几乎肯定是你不想做的事情。正如其他人所说,这只是 Python 中的不同模型和不同的编程需求。您的代码将从一个函数转到另一个函数,并且您放置它们的顺序并没有真正的区别,只要它们的顺序是您在使用它们之前定义事物的顺序。您只是不想像通常使用 PHP 那样得到某种有序文档,因此不需要。

于 2013-06-23T02:24:03.133 回答