簡體   English   中英

與進口python有點混淆

[英]Little confused with import python

我來自PHP(以及其他一些東西)背景,我正在玩Python。 在PHP中,當我想要包含另一個文件時,我只是includerequire並且包含該文件中的所有內容。

但似乎在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM