【Python】详解Python模块、包、库
本文目錄
1.模塊 定義模塊 導入模塊 調(diào)用模塊中函數(shù) 方法1 模塊名.函數(shù)名 方法2 from 模塊名 import 函數(shù)名1.函數(shù)名2,.. 方法3 from 模塊名 import * 給模塊取個別名 給模塊中函數(shù)取個別名 以腳本的方式執(zhí)行模塊 __name__怎么理解 查看模塊中的屬性:dir函數(shù) 導入模塊時sys.path怎么理解 2.包(庫) 建立一個包 包中__init__.py文件作用 從包中導入單個模塊 方法1 方法2 從包中導入所有模塊正文開始啦
1.模塊
python模塊是一個包含Python定義和語句的文件(就是一個.py結(jié)尾的腳本文件);
文件名為模塊名,文件后綴為 .py;
在一個模塊內(nèi)部,模塊名可以通過?__name__方法獲得。
定義模塊
定義一個模塊fibo,即創(chuàng)建一個fibo.py文件。#fibo.py
#?Fibonacci?numbers?moduledef?fib(n):????#?write?Fibonacci?series?up?to?na,?b?=?0,?1while?a?<?n:print(a,?end='?')a,?b?=?b,?a+bprint()def?fib2(n):???#?return?Fibonacci?series?up?to?nresult?=?[]a,?b?=?0,?1while?a?<?n:result.append(a)a,?b?=?b,?a+breturn?result導入模塊
python習慣上把所有?import?語句放在腳本的開頭,全局調(diào)用。
>>>?import?fibo#導入模塊fibo >>>?fibo.__name__#__name__方法獲得模塊fibo的模塊名 'fibo'調(diào)用模塊中函數(shù)
方法1 模塊名.函數(shù)名
>>>?import?fibo >>>?fibo.fib2(100) [0,?1,?1,?2,?3,?5,?8,?13,?21,?34,?55,?89]方法2 from 模塊名 import 函數(shù)名1.函數(shù)名2,..........
>>>?from?fibo?import?fib,fib2#多個函數(shù)名之間使用逗號隔開 >>>?fib2(100) [0,?1,?1,?2,?3,?5,?8,?13,?21,?34,?55,?89]方法3 from 模塊名 import *
*表示該模塊中所有的函數(shù),會導致代碼可讀性差(不建議使用)。
>>>?from?fibo?import?* >>>?fibo.fib2(100) [0,?1,?1,?2,?3,?5,?8,?13,?21,?34,?55,?89]給模塊取個別名
import 模塊名 as 別名
>>>?import?fibo?as?fb >>>?fb.fib2(100) [0,?1,?1,?2,?3,?5,?8,?13,?21,?34,?55,?89]給模塊中函數(shù)取個別名
from 模塊名 import 函數(shù)名 as 函數(shù)別名
>>>?from?fibo?import?fib2?as?fb2 >>>?fb2(100) [0,?1,?1,?2,?3,?5,?8,?13,?21,?34,?55,?89]以腳本的方式執(zhí)行模塊
#fibo.py
#?Fibonacci?numbers?module def?fib(n):????#?write?Fibonacci?series?up?to?na,?b?=?0,?1while?a?<?n:print(a,?end='?')a,?b?=?b,?a+bprint()def?fib2(n):???#?return?Fibonacci?series?up?to?nresult?=?[]a,?b?=?0,?1while?a?<?n:result.append(a)a,?b?=?b,?a+breturn?resultif?__name__?==?"__main__":print("現(xiàn)在該模塊被當做腳本執(zhí)行啦!")print(("此時__name__?==?%s"%(__name__)))#此時模塊的__name__為__main__import?sysresult?=?fib2(int(sys.argv[1]))print(result)> python fibo.py 100#if __name__ == "__main__":之后代碼塊執(zhí)行了(常用于測試)
現(xiàn)在該模塊被當做腳本執(zhí)行啦!
此時__name__ == __main__
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
__name__怎么理解
__name__是個全局變量,存放模塊的名字;
當該模塊被其它模塊調(diào)用時,__name__=模塊名,對于fibo.py,__name__="fibo";
當該模塊被當做執(zhí)行腳本時,__name__為__main__( A module’s __name__ is set equal to '__main__' when read from standard input, a script, or from an interactive prompt)。
對于fibo.py,如果終端執(zhí)行 python fibo.py 100 ,if __name__ == "__main__":后面代碼會執(zhí)行;如果在別的模塊中執(zhí)行import fibo,,if __name__ == "__main__":后面代碼不會執(zhí)行。
>>> import fibo#if __name__ == "__main__":之后代碼塊沒執(zhí)行
>>>
查看模塊中的屬性:dir函數(shù)
>>>?import?fibo >>>?dir(fibo) ['__builtins__',?'__cached__',?'__doc__',?'__file__',?'__loader__',?'__name__',?'__package__',?'__spec__',?'fib',?'fib2']以__開頭和結(jié)尾的屬性為python的內(nèi)置屬性;
'fib', 'fib2'為自定義屬性。
導入模塊是sys.path怎么理解
sys.path收集python模塊的所有搜索路徑,可以自己添加搜索路徑(sys.path.append('yourpath'))舉個栗子:
#test.py #!/usr/bin/python import?sys sys.path.append('~/biosoft/') print(sys.path)>?python?test.py ['/home/pylearning',?'/home/software/anaconda3/lib/python37.zip','/home/software/anaconda3/lib/python3.7',?'/home/.local/lib/python3.7/site-packages',? '/home/software/anaconda3/lib/python3.7/site-packages', '~/biosoft/' ]任何一個python程序執(zhí)行時,會搜索其導入模塊的路徑,先搜索內(nèi)置模塊路徑;
然后搜索sys.path收集的路徑,sys.path中路徑依次為:
['/home/pylearning', #被執(zhí)行程序test.py所在路徑'/home/software/anaconda3/lib/python37.zip','/home/software/anaconda3/lib/python3.7', #環(huán)境變量PYTHONPATH中路徑'/home/.local/lib/python3.7/site-packages', #標準庫路徑'/home/software/anaconda3/lib/python3.7/site-packages',#標準庫路徑'~/biosoft/'#自己添加路徑]
2.包(庫)
建立一個包
sound包包含formats,effects,filters三個子包。
sound/??????????????????????????#Top-level?package(頂層包sound)__init__.py??????????????#該文件可以為空,只有該文件存在時sound才會被當做包而不是目錄formats/??????????????????#Subpackage(子包)__init__.py?????#同上,該文件存在時,formats才會被當做包而不是目錄wavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.pyhaha.py...effects/??????????????????Subpackage?for?sound?effects__init__.pyecho.pysurround.pyreverse.pyhaha.py...filters/??????????????????Subpackage?for?filters__init__.pyequalizer.pyvocoder.pykaraoke.py...包中__init__.py文件作用
只有目錄中添加__init__.py文件時,目錄才會被當做包而不是目錄;
__init__.py 可以為空;
__init__.py中可以設(shè)置?__all__?變量,這個變量主要影響包的導入
- 對于上文的sound包,sound/filters/__init__.py中輸入__all__ == ["equalizer", "vocoder"]時,from sound.filters import *時不會導入karaoke模塊。
從包中導入單個模塊
導入sound包中子包effects中的echo模塊
方法1
import sound.effects.echo引用它時必須使用它的全名,sound.effects.echo(xxx)。
方法2
from sound.effects import echo引用方法,echo(xxx)
從包中導入所有模塊
from?sound.effects?import?*引用方法,echo(xx)
參考資料
https://docs.python.org/zh-cn/3.8/library/__main__.html?highlight=__main__#module-__main__https://www.zhihu.com/question/49136398https://blog.konghy.cn/2017/04/24/python-entry-program/https://docs.python.org/zh-cn/3/tutorial/modules.html
往期精彩回顧適合初學者入門人工智能的路線及資料下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統(tǒng)計學習方法》的代碼復現(xiàn)專輯 AI基礎(chǔ)下載本站qq群955171419,加入微信群請掃碼:
總結(jié)
以上是生活随笔為你收集整理的【Python】详解Python模块、包、库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js滚动,滑动,幻灯片,轮播,swipe
- 下一篇: 【Python】5个方便好用的Pytho