測試環境為 CentOS 8 x86_64 (虛擬機)
Module 模組的使用.
[root@localhost ~]# vi mod1.py def multi(n,m): return n*m def add(n,m): return n+m def sub(n,m): return n-m
要使用剛剛定義好的 Module 模組只需要透過 import modeule 名稱,即可使用.使用時 模組名稱.函數名稱
[root@localhost ~]# vi mod_test1.py import mod1 print(mod1.multi(2,3)) print(mod1.add(2,3)) print(mod1.sub(2,3))
執行結果.
[root@localhost ~]# python3 mod_test1.py 6 5 -1
__name__
關於 object.__name__ 說明 : https://docs.python.org/3/library/stdtypes.html?#definition.__name__
The name of the class, function, method, descriptor, or generator instance.
通常會直接在 Module 裡面就會測試一下函數的功能.
[root@localhost ~]# vi mod1.py def multi(n,m): return n*m def add(n,m): return n+m def sub(n,m): return n-m print(multi(2,3)) print(add(2,3)) print(sub(2,3))
執行結果.
[root@localhost ~]# python3 mod1.py 6 5 -1
但這樣會出現匯入時就順便執行程式了
[root@localhost ~]# python3 mod_test1.py 6 5 -1 6 5 -1
這時候可以透過 __name__ 的值判斷檔案被直接執行或是被引用的.
- 直接執行其 __name__ 的值為 __main__
[root@localhost ~]# vi mod2.py print('__name__:' + __name__)
執行結果.
[root@localhost ~]# python3 mod2.py __name__:__main__
- 被引用其 __name__ 的值為 mod2(模組名稱)
[root@localhost ~]# vi mod_test2.py import mod2
執行結果.
[root@localhost ~]# python3 mod_test2.py __name__:mod2
所以前面 Module 的 範例 mod1.py 使用 if __name__ == ‘__main__’: 來確保只有在直接執行時才執行.
[root@localhost ~]# vi mod1.py def multi(n,m): return n*m def add(n,m): return n+m def sub(n,m): return n-m if __name__ == '__main__': print(multi(2,3)) if __name__ == '__main__': print(add(2,3)) if __name__ == '__main__': print(sub(2,3))
執行結果.
[root@localhost ~]# python3 mod1.py 6 5 -1
[root@localhost ~]# python3 mod_test1.py 6 5 -1
可以看到當 mod_test1.py 引用 mod1.py 時不會去執行測試用程式碼.
沒有解決問題,試試搜尋本站其他內容