模塊
當代碼量很大的時候,我們不可能把所有的代碼寫在一個文件中,所以這時候就需要分多個.py文件進行寫代碼。一個.py文件就是一個模塊。如文件名為main.py,那么模塊名就為main。即可以把模塊理解為文件。像之前的 import random,random就是一個文件
模塊的使用
1. from 模塊名 import xx
從指定的模塊中導入指定的東西。如下在main文件中導入function模塊中的函數(shù)
function.py
def add(a , b):
c = a + b
print(c)
def jian(a,b):
c = a + b
print(c)
print("ok")
main.py
將function模塊中的add,jian函數(shù)導入,默認其他的輸出語句也會導進來
from function import add,jian
add(2,3)
jian(5,2)

2. from 模塊名 import *
從指定的模塊中導入所有的東西。但是不推薦使用,容易導致函數(shù)不知道來自哪個模塊
main.py
from function import *
add(2,3)
jian(5,2)

3. import 模塊名
或者可以直接先導入模塊,然后在需要調(diào)用模塊中的函數(shù)的時候,模塊名.函數(shù)名,即可
function.py
def add(a , b):
c = a + b
print(c)
def jian(a,b):
c = a + b
print(c)
print("ok")
main.py
import function
function.add(2,3)

if __name__ == "__main__":
在上面介紹的三種導入模塊的方法中我們知道,導入的時候不僅會導入指定的函數(shù),還會將其他的print等一些語句導入進去,這顯然不會我們想要的
function.py
def add(a , b):
c = a + b
print(c)
def jian(a,b):
c = a + b
print(c)
print("ok")
add(4,4)
main.py
from function import add
add(5,6)
本來只想導入add這個函數(shù),然后把其他的無關(guān)緊要的測試語句要導入進來了

為了避免這些測試代碼在模塊被導入后執(zhí)行,可以利用__name__屬性。
function.py
我們將一些測試語句放在__name__ == '__main__'下面,導包的時候就不會將這些無關(guān)的數(shù)據(jù)導入進去
def add(a , b):
c = a + b
print(c)
def jian(a,b):
c = a + b
print(c)
if __name__ == '__main__':
print("ok")
add(4,4)
main.py
from function import add
add(5,6)

包
那什么是包了?多個相同功能的模塊,放在同一個文件夾下,并且擁有__init__.py 這個文件,那么這個文件夾就叫包。
__init__.py
當?shù)谷氚臅r候,包中的__init__.py中的內(nèi)容會自動執(zhí)行,無需手動調(diào)用
package包內(nèi)容如下

test.py
test.py與package文件夾處于同一級目錄,導入包中的read, write模塊中的函數(shù),此時會自動導入__init__.py中的內(nèi)容
from package.read import re #從包中的模塊中導入函數(shù)
from package.write import wr
re()
wr()
__inti__.py中的文件內(nèi)容
print("沒有主動調(diào)用也會自動調(diào)用")

原文鏈接:
https://blog.csdn.NET/qq_44159028/article/details/120415294