首頁>Club>
這段程式碼該怎麼理解?
15
回覆列表
  • 1 # 留德華叫獸

    對於很多程式語言來說,程式都必須要有一個入口,比如 C,C++,以及完全面向物件的程式語言 Java,C# 等。如果你接觸過這些語言,對於程式入口這個概念應該很好理解,C 和 C++ 都需要有一個 main 函式來作為程式的入口,也就是程式的執行會從 main 函式開始。同樣,Java 和 C# 必須要有一個包含 Main 方法的主類來作為程式入口。而 Python 則有不同,它屬於指令碼語言,不像編譯型語言那樣先將程式編譯成二進位制再執行,而是動態的逐行解釋執行。也就是從指令碼第一行開始執行,沒有統一的入口。

    一段好的示例程式碼勝過一切

    這裡有倆個程式

    const.py用來定義常數PI

    area.py需要PI這個常數來計算圓的面積

    const.py 程式碼如下:

    PI = 3.14def main():print "PI:", PImain()

    當執行python const.py,輸出

    PI: 3.14

    area.py (匯入PI的值來計算圓面積)程式碼如下

    from const import PIdef calc_round_area(radius):return PI * (radius ** 2)def main():print "round area: ", calc_round_area(2)main()

    當執行python area.py,因為匯入了const,輸出

    PI: 3.14round area: 12.56

    可以看到

    const.py裡面的main()也被執行了

    但這是我們所不希望的

    怎麼辦?

    只需在const.py中加入一句:

    PI = 3.14def main():print "PI:", PIif __name__ == "__main__":main()

    _name_代表當前模組的名字

    當我們再次執行“python area.py”時

    對於const.py來說

    _name_不再是_main_

    因此其中的main()不再被執行

    最終得到我們想要的輸出

    round area: 12.56

    以上示例程式碼及註釋部分取自博文(非常好的總結文章,還詳細解釋了_name_):

    https://dwz.cn/20WehPTe

  • 2 # 程式設計字典

    的作用

    當Python直譯器讀取原始檔時,它會執行其中的所有程式碼。

    在執行程式碼之前,它將定義一些特殊變數。例如,如果Python直譯器將該模組(原始檔)作為主程式執行,則它將特殊變數設定為具有值。如果從另一個模組匯入此檔案,則將其設定為模組的名稱。

    例項

    import time, threaddef myfunction(string, sleeptime, lock, *args): while True: lock.acquire() t...教程:Python專題:http://codingdict.com/article/22037

  • 3 # Bean蠶豆

    if __name__ == "__main__",意思是當該檔案被直接執行(run)時,該語句後面的程式碼被執行;當該檔案被其它檔案以模組的形式存在被引用時,該語句後面的程式碼不被執行。

    __name__是內建變數,表示當前模組的名字。

    比如,我們有下面這樣一個檔案

    該檔案中有一個函式,用於計算兩個時間之間相隔多少秒。如果我們寫了一行

    if __name__ == "__main__"

    這樣的話,我們在引用該py檔案的時候,下面的total_seconds(afteer - before)的計算就不會被執行。如果我們此時,換成不帶__name__型別這種方式的話就會,函式的結果就會被執行出來。

  • 4 # 網際網路麵霸

    要理解if __name__ == "main",首先要理解一下python的變數命名規則:

    1.普通變數:小寫字母,單詞之間用_分割 比如:a, score, user_info

    2.單下劃線開頭: 表示該變數是一個受保護(protected)的變數,原則上不允許直接訪問,但外部類還是可以訪問到這個變數。這只是程式設計師之間的一個約定,用於警告說明這是一個私有變數,外部類不要去訪問它。例如:_name

    3.雙下劃線開頭:表示的是私有型別(private)的變數

    只能是允許這個類本身進行訪問了, 連子類也不可以.用於命名一個類屬性(類變數),呼叫時名字被改變(在類User內部,__name變成_User__name,如 self._User__name)雙下劃線開頭的例項變數是不是一定不能從外部訪問呢?其實也不是.仍然可以透過 _User__name來訪問__name變數:

    示例

    class User:

    def __init__(self, name):

    self.__name=name

    user=User("test")

    print(user._User__name)

    4.單下劃線結尾:變數名跟關鍵詞衝突時,可以加單下劃線區分。例如:type_

    5.以雙下劃線開頭,並且以雙下劃線結尾的,是內建變數.

    內建變數是可以直接訪問的,不是 private 變數,如__init__,__name__因此可知__name__ 是一個內建變數,但是那個物件的內建變數呢?就是該模組的內建變數,模組是物件,並且每個模組都有一個內建屬性__name__

    瞭解了__name__ 的含義,接下來我們看一下__name__ 的取值

    在python中,如果當前模組當做一個指令碼執行時(不透過import方式執行),

    moduel.__name__的值將是"__main__";

    而當一個模組被其它模組引用時,module.__name__將是module自己的名字(可以理解為"if __name__=="__main__":" 即作為入口;)

    示例:

    vi test_module.py

    def main():

    print("__name__ is :", __name__)

    if __name__ == "__main__":

    main()

    如果直接python test_module.py

    輸出:__name__ is : __main__

    如果import 的方式調

    輸出:__name__ is : test_module

  • 中秋節和大豐收的關聯?
  • 末代皇帝溥儀是如何被趕出紫禁城的?