一. 基本概念
1.1 什么是模塊
模塊是一個(gè)文件,模塊文件名通常以 '.py' 結(jié)尾涡戳,由一系列數(shù)據(jù)结蟋,函數(shù),類等組成渔彰。
1.2 模塊的作用
- 讓一些相關(guān)的數(shù)據(jù)嵌屎,函數(shù),類等有邏輯地組織在一起恍涂,使邏輯結(jié)構(gòu)更加清晰宝惰。
- 模塊中的變量,函數(shù)和類等可提供給其它模塊或程序使用再沧。
1.3 模塊的分類
- 內(nèi)置模塊
builtins
:在解析器的內(nèi)部可以直接使用尼夺; - 標(biāo)準(zhǔn)庫(kù)模塊:裝 Python 時(shí)已安裝且可以直接使用;
- 第三方模塊:需要自行安裝后使用炒瘸;
- 自定義模塊:用戶自己編定的模塊淤堵,可以作為其他人的第三方模塊使用。
二. 模塊的導(dǎo)入
2.1 import 語(yǔ)句
- 語(yǔ)法:
import 模塊名1 [as 模塊新名1]顷扩, 模塊名2 [as 模塊新名2]拐邪, ...
- 示例:
>> import math
>> import sys, os
>> import copy as cp
- 作用:將一個(gè)模塊整體導(dǎo)入到當(dāng)前模塊中;
- 屬性用法:
模塊名.屬性名
-
help()
可以查看模塊的文檔字符串:
# 相當(dāng)于在當(dāng)前模塊隘截,用math變量綁定一個(gè)對(duì)象
>> import math
>> help(math)
2.2 from ... import ... 語(yǔ)句
- 語(yǔ)法:
from 模塊名 import 模塊屬性名1 [as 屬性名新名1]扎阶, 模塊屬性名2 [as 屬性名新名2]...
- 作用:將某個(gè)模塊的一個(gè)或多個(gè)屬性導(dǎo)入到當(dāng)前模塊的作用域汹胃。
>> from math import pi
>> from math import sin
>> from math import factorial as fac
2.3 from ... import * 語(yǔ)句
- 語(yǔ)法:
from 模塊名 import *
- 作用:將某模塊的所有屬性導(dǎo)入到當(dāng)前模塊的作用域。
>> from math import *
>> sin(pi/2)
1.0
>> print(factorial(10))
3628800
并不推薦采用此種方法乘陪,會(huì)污染當(dāng)前環(huán)境的變量名空間统台;而且對(duì)引用的函數(shù),屬性并不清楚其來源于哪個(gè)模塊啡邑。
三. dir函數(shù)
- 語(yǔ)法:
dir([對(duì)象])
返回一個(gè)字符串列表贱勃。 - 作用:如果沒有參數(shù)調(diào)用,則返回當(dāng)前作用域內(nèi)所有變量的列表谤逼;如果給定一個(gè)對(duì)象作為參數(shù)贵扰,則返回這個(gè)對(duì)象所在的變量(屬性)列表:
dir(math)
。
1. 對(duì)于一個(gè)模塊流部,返回這個(gè)模塊的全部變量戚绕;
2. 對(duì)于一個(gè)類對(duì)象,返回類對(duì)象的所有變量枝冀,并遞歸基類對(duì)象的所有變量舞丛;
3. 對(duì)于其它對(duì)象,返回所有變量果漾。
四. 自定義模塊
文件組織形式如下:
提示:請(qǐng)先忽略
__init__.py
文件球切,在介紹包的概念時(shí),再做講解绒障。
my_mode.py
代碼:
"""示意自定義模塊
此模塊中有2個(gè)函數(shù):my_fac(n), my_sum(n)
此模塊中有2個(gè)變量:name1, name2
"""
import math
def my_fact(n):
print(n, "的階乘為:", math.factorial(n))
def my_add(n):
my_sum = sum(range(n+1))
print("1+2+...+" + str(n) + "=" + str(my_sum))
name1 = "Alex"
name2 = "Nore"
print("mymod 模塊導(dǎo)入吨凑!")
run.py
代碼:
import mymode.my_mode as my_mode
from mymode.my_mode import name1, name2
if __name__ == "__main__":
print("run.py 的 __name__ 屬性為: ", __name__)
print("導(dǎo)入的 my_mode 模塊的 __name__ 屬性為:", my_mode.__name__)
my_mode.my_fact(5)
my_mode.my_add(5)
print(name1, name2)
運(yùn)行結(jié)果:
模塊被首次導(dǎo)入后,所有語(yǔ)句都會(huì)被自上而下執(zhí)行一遍户辱,所有變量被定義鸵钝,并綁定一個(gè)對(duì)象。