[英]Little confused with import python
我來自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
?>
第一個echo命令將只打印“A”字符串,因為它沒有分配給變量的任何值。 下一個echo將打印一個完整的字符串,這要歸功於它之前的include。
但是,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會直接獲取所包含文件中的所有代碼並將其放在您調用include的任何位置。 這對於編寫Web應用程序很方便,因為您可以輕松地將頁面分成多個部分(例如頁眉,導航,頁腳等)。
另一方面,Python不僅僅用於Web應用程序。 要重用代碼,您必須依賴函數或良好的舊的面向對象編程。 PHP還具有FYI的功能和面向對象的編程。
您在文件中編寫函數和類,並將其導入另一個文件。 這使您可以訪問這些函數或使用您在其他文件中定義的類。
假設你在文件file1.py
有一個名為foo
的函數。 從file2.py
,您可以編寫import file1
。 然后,使用file1.foo()
調用foo。 或者, from file1 import foo
寫入,然后可以使用foo()
調用foo。 請注意, from
允許您直接調用foo。 有關更多信息,請查看python文檔。
在技術層面上,Python導入與PHP需求非常相似,因為它將執行導入的文件。 但由於Python不是為最終生成HTML文件而設計的,因此使用它的方式非常不同。
通常,Python文件在模塊級別上根本不包含很多可執行代碼,而是包含函數和類的定義。 您可以導入它們並將它們用作庫。
因此,在Python中使用header()和footer()之類的東西是沒有意義的。 這些只是功能。 像這樣調用它們,它們生成的結果將被忽略。
那么你如何拆分你的Python代碼呢? 好吧,你將它分成函數和類,然后將它們放入不同的文件中,然后導入。
有一個execfile()
函數可以做一些與PHP的include
模糊的東西,在這里,但它幾乎肯定是你不想做的事情。 正如其他人所說,它只是一個不同的模型和Python中不同的編程需求。 你的代碼將從一個函數變為另一個函數,只要它們處於你使用它們之前定義的順序,它就不會對你放置它們的順序產生影響。 您只是不想像某些有序文檔那樣通常使用PHP,因此不需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.