与进口python有点混淆

时间:2013-06-22 19:39:19

标签: python python-2.7 import module

我来自PHP(以及其他一些东西)背景,我正在玩Python。在PHP中,当我想要包含另一个文件时,我只需要includerequire,并且包含该文件中的所有内容。

但似乎在python中做推荐的方法似乎是from file import,但这似乎更适合包含库和东西?你如何在几个文件中分离你的代码?唯一的方法是使用一大堆函数调用单个文件然后导入其他15个文件?

5 个答案:

答案 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,因此不需要。