与进口python有点混淆

Little confused with import python

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

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


php和python完全不同,原因很多。

But it seems the recommended way to do stuff in python is from file import but that seems to be more for including libraries and stuff?

实际上,import语句用于将对象从另一个模块导入到当前模块。您可以将导入模块的所有对象导入当前模块:

1
2
3
import foo

print foo.bar

或者您可以从该模块中选择所需内容:

1
2
3
from foo import bar

print bar

更好的是,如果导入一个模块两次,则只导入一次:

1
2
3
4
>> import foo as foo1
>> import foo as foo2
>> foo1 is foo2
True

How do you separate your code amongst several files?

你必须考虑你的代码…这就是所谓的软件设计,这里有一些规则:

  • 您从不在模块级别编写算法;而是将其设为函数,并调用该函数
  • 永远不要在模块级别实例化对象;您应该将其嵌入到函数中,并调用该函数
  • 如果需要多个不同函数中的对象,请创建一个类并将该对象封装到该类中,然后在绑定到该类的函数中使用它(因此现在称为方法)。

唯一的例外是,当您想从命令行启动程序时,可以附加:

1
if __name__ =="__main__":

在模块的末尾。我最好的建议是,稍后再调用您的第一个函数:

1
2
if __name__ =="__main__":
    main()

Is the only way to do it, to have a single file with a whole bunch of function calls and then import 15 other files?

这不是唯一的方法,但这是最好的方法。您将所有的算法制作成函数和对象库,然后准确导入其他库等中所需的内容。这就是你如何创造一个可重用代码的世界,而不必重新发明轮子!所以忘记文件,想想包含对象的模块。

最后,我对您学习Python的最好建议是,在编写PHP时摒弃所有的习惯和用法,并以不同的方式重新学习这些东西。最后,这只能让你成为一个更好的软件工程师。


我想我明白你想说什么,想做什么。

下面是来自php的随机包含示例:

文件1-vars.php

1
2
3
4
5
6
<?php

$color = 'green';
$fruit = 'apple';

?>

文件2-main.php

1
2
3
4
5
6
7
8
9
<?php

echo"A $color $fruit"; // A

include 'vars.php';

echo"A $color $fruit"; // A green apple

?>

first echo命令将只打印"a"字符串,因为它没有分配给vars的任何值。下一个echo将打印一个完整的字符串,这要感谢前面的include。

然而,python的"import"导入了一个模块或它的一部分,因此您可以在当前模块中使用它。

下面是一个python示例:

文件1-echo.py

1
2
    apple = 'apple'
    color = 'green'

文件2-main.py

1
2
3
4
5
6
7
import echo

def func():
    print"A"+echo.color+""+echo.fruit

if __name__ == '__main__':
    func()

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

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


在技术层面上,python导入非常类似于php需求,因为它将执行导入的文件。但是,由于Python的设计并不是最终生成HTML文件,所以使用它的方式非常不同。

通常,一个python文件在模块级别上根本不包含太多可执行代码,而是包含函数和类的定义。你可以把它们导入并用作图书馆。

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

那么,如何分割您的Python代码呢?好吧,你把它分成函数和类,放到不同的文件中,然后导入。


有趣的问题。如您所知,在PHP中,您可以使用include来分隔您的代码,include可以从字面上提取包含文件中的所有代码,并将其放在您调用include时的任何位置。这对于编写Web应用程序很方便,因为您可以轻松地将页面划分为多个部分(如页眉、导航、页脚等)。

另一方面,python不仅仅用于Web应用程序。要重用代码,必须依赖函数或良好的面向对象编程。PHP还具有函数和面向对象编程功能。

在一个文件中编写函数和类,并将其导入另一个文件中。这允许您访问函数或使用在另一个文件中定义的类。

假设在文件file1.py中有一个名为foo的函数。从file2.py你可以写import file1。然后,用file1.foo()给foo打电话。或者,编写from file1 import foo,然后您可以使用foo()调用foo。注意,from允许您直接呼叫foo。有关更多信息,请查看python文档。


这里有一个execfile()函数,它的功能与php的include有些许相似,但它几乎肯定是你不想做的。正如其他人所说,在Python中,它只是一个不同的模型和不同的编程需求。您的代码将从一个函数到另一个函数,只要它们的顺序是您在使用前定义事物的,那么您对它们的放置顺序并没有什么区别。你只是不想最终得到某种有序的文档,就像你通常使用的是PHP一样,所以没有必要这样做。