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

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

3. import 模塊名
或者可以直接先導入模塊,然后在需要調用模塊中的函數的時候,模塊名.函數名,即可
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__":
在上面介紹的三種導入模塊的方法中我們知道,導入的時候不僅會導入指定的函數,還會將其他的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這個函數,然后把其他的無關緊要的測試語句要導入進來了

為了避免這些測試代碼在模塊被導入后執行,可以利用__name__屬性。
function.py
我們將一些測試語句放在__name__ == '__main__'下面,導包的時候就不會將這些無關的數據導入進去
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
當倒入包的時候,包中的__init__.py中的內容會自動執行,無需手動調用
package包內容如下

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

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