【Day 19】if __name__ == '__main__' :

前言

大家在查找程序码时可能会看到 if __name__=='__main__': 这段 code,这个是什麽意思呢?

如果你写程序时都只使用一个 Python 档,那就不需要用到这段程序码,但是如果要引用别的档案就有可能会用到了!

开始吧!

我这边沿用前一天写的费氏数列的程序来举例,以下两段程序码的输出结果都是一样的,但是为什麽要再加一行 if __name__=='__main__': 呢?

# a.py
def Fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return Fibonacci(n - 2) + Fibonacci(n - 1)
for i in range(3):
    print(Fibonacci(i))

# a.py
def Fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return Fibonacci(n - 2) + Fibonacci(n - 1)
if __name__=='__main__':
    for i in range(3):
        print(Fibonacci(i))

当我想要在别的档案中使用我在 a.py 中定义的函式 Fibonacci(n) 时,如果在同一个目录下有一个档案 b.py 我把这个函式 Fibonacci(n) 引用至里面。

底下的程序码把 a.py 里面的函式 Fibonacci import。我想要得到费氏数列的第五项,预期得到的结果应该是 5,但是如果没有加上 if __name__=='__main__': 的话,输出为

# b.py
from a import Fibonacci
x = Fibonacci(5)
print(x)

main.py 被引用的同时又被执行一次了!
所以 if __name__=='__main__': 这段程序码在程序被引用时不会执行,只要自己在执行的时候会呼叫,这样就可以避免呼叫别的档案的函式时又被执行到。

a.py 加入 if __name__=='__main__': 之後再看 b.py 的输出就会变下面这样了。

 __name__ 是 python 中内建、隐含的变数,不必宣告即可用,当程序是直接执行时,__name__ 的值就是 __main__,当程序是被引用时,__name__ 的。

待续...


<<:  [15] 建立 class 创建实例的继承

>>:  Day-19 面试考古题破解区(1)

[Day12]- 函数设计

基本函数设计 函数基本定义,基本格式如下: def 函数名称 (参数1,参数2,….): 要执行的...

Day 26 隐藏小知识

一般来说, 如果要在Odoo原生资料表增加栏位, 只要在py里写好就好, 像是这样 上图是Many2...

Day9. 以放声思考法快速进行概念验证

为何要进行前期概念验证 一般来说,设计产品的流程会经过三个大阶段: (1)概念发想 → (2)设计(...

[Day 29] - 手把手跨出第一步!– 烧录闪烁程序到Arduino Part.2

17King 制造中,订阅一下吧(*´∀`)~♥ 今日影片长度:08 分 36 秒 上集重点条列: ...

用 Python 畅玩 Line bot - 17:Template message

Line bot API 中有一种只有 line bot 专属的讯息种类,叫做 Template m...