Python3中的模組化程式設計

2021-10-08 22:32:46 字數 4349 閱讀 5280

模組化程式設計指的是把程式進行封裝(函式封裝,物件導向,檔案封裝…)

# 在定義函式時,在小括號內可以定義形式引數

def love (w):

print(f'i',end=' ')

print('love',end=' ')

print('you')

# 呼叫帶有形式引數的函式時,需要傳遞實際引數

# love('hh, ')

# love() 如果定義時有引數,呼叫時沒有使用引數就會報錯

# 帶有多個引數的函式

def love (w,x):

print(f'',end=' ')

print('love',end=' ')

print('you')

love('hh, ','jj') # 函式定義了幾個引數,在呼叫時就必須按順序進行引數的指定

引數的型別

普通引數,就是位置引數也叫 順序引數,也是必須傳遞的引數

def love(x,y):

print(x,y)

love(1,2)

預設引數

# 比如要求有三個引數,至少要傳遞兩個引數,那麼這時最後乙個引數就是預設引數

# 預設引數,需要在定義形式引數時,指定預設值

# 三個引數的預設值,前面可以沒有預設值,但如果有,前兩個引數都要設定預設值

def func(x,y,i=10):

print(x,y,i)

# 呼叫時傳遞了預設的引數,那麼裡面使用的就是傳遞的實際引數

func(1,2,3)

# 呼叫時如果沒有傳遞預設引數,那麼就會使用預設值

func(1,2)

收集引數

# 定義乙個形式引數,專門收集多餘的實際引數

# 或者可以理解為,不確定需要傳遞多少個實際引數,直接用乙個形式引數來接收

# 注意事項:在定義函式時,如果需要收集引數,那麼這個形式引數前面需要加*,例如*args

# 接收的多餘的引數,會儲存在args中,形成乙個元組

def func(x='+',*args):

print(type(args))

if x == '+':

print('加法運算',args)

else:

print('減法運算',args)

func('+',200,300) ##加法運算 (200, 300)

命名關鍵字引數

# 1.關鍵字引數定義在 收集引數 後面

# 2.關鍵字引數必須通過形式引數的名字來進行傳遞

def love(a,b,c=3,*args,name):

print(a,b,c)

print(args)

print(name)

# 在呼叫時,必須按照形式引數的名字進行引數的傳遞

love(1,2,4,5,6,7,8,9,name='hello')

# love(1,2,3,4,5,'hello') 錯誤

def love(age,name):

print(name)

print(age)

# love('abc')

# 在呼叫普通函式時,需要按照順序進行引數的傳遞

# 也可以把普通函式的普通引數按照關鍵字引數進行傳遞

love(name='sadas',age='13')

關鍵字引數收集

# 定義時,關鍵字收集引數,放在關鍵字引數後

# 並且符號為**開頭

def love (a,b,c,*args,name,age,**kwargs):

print(a,b,c)

print(age)

print(name)

print(args) # 普通收集引數,會把多餘的引數收集為 元組

print(kwargs) # 關鍵字引數收集,會把多餘的關鍵字引數收集為 字典

# love(1,2,3,112,123,name='aaa',age='222',***='ccc',aa = 'aa', bb='bb')

# love(a=111,b=222,c=333,123,name='a',age='20',***=0) 錯誤

# 注意形式引數宣告的位置

# 普通引數,預設引數,收集引數,關鍵字引數,關鍵字收集引數

形式引數的宣告位置順序:

普通引數 => 預設引數 => 收集引數 => 命名關鍵字引數 => 關鍵字收集引數

def func (a,b,c=1,*args,d,**kwargs)

# a,b為普通引數,c為預設引數,*args是收集引數,d是命名引數,**kwargs是關鍵字收集引數

# 極少情況下會出現五種引數同時出現

# 一般情況下/多數情況下,普通引數,收集引數,關鍵字收集引數

def func (a,b=2,*,c,d,**kw)

# a為普通引數,b為預設引數,c,d是命名關鍵字引數,kw是關鍵字收集引數

所有引數的擺放問題

乙個函式除了可以完成一定功能之外,還可以按需要返回一些資料和內容

函式中使用 return 關鍵字來指定返回資料,可以返回任意型別的資料

函式的返回值會把資料返回到呼叫處,可以使用變數接收或其他處理

#  函式可以分為兩類

# 1.執行過程函式:函式體內完成一定的功能即可,沒有返回值

# 2.具有返回值的函式:函式體內完成一定的功能,並且返回乙個結果到函式呼叫處

return 返回值的特徵
# 假設有這樣乙個需求,定義乙個函式,完成兩個數的計算,並輸出

# def jia(n1,n2):

# res = n1+n2

# print(res)

# jia(2,5)

# 定義乙個函式,完成兩個數的計算,並把結果返回

def jia (n1,n2):

res = n1+n2

return res

r = jia(2,5)

print(r)

作用域就是當前起作用,可用的範圍區域

變數的有效範圍

全域性變數

在函式內外都可以使用的變數

在函式內部使用 global 直接定義的變數,就是全域性變數,函式內外都可以使用

在函式外定義的變數,在函式中使用 global() 關鍵字進行引用,宣告,也是全域性變數

區域性變數

在函式內部可以使用的變數

在函式外不能直接使用

在函式外定義的變數,函式內部可以獲取,訪問,但是不能更改

資料的變數型別分類

可變資料型別:在函式外定義的變數,在函式內部可以使用

​ 只有 dict 和 list 型別為可變資料型別,即定義後可更改

varlist= [1,2,3]

vardict=

def func():

print(vardict)

vardict['a'] = 'aa'

print(vardict)

#

不可變資料型別:在函式外定義的變數,在函式內部只能訪問,不能使用

globals() 函式和 locals() 函式以及 nonlocal() 函式

# 在函式外使用函式

# globals() 獲取全域性資料,包含變數和函式

# locals() 獲取當前作用域的資料

# print(globals())

# print(locals())

# 為什麼上面兩個函式,在函式外呼叫的結果一摸一樣?

# 因為當前屬於全域性位置

def outter():

# 外函式的區域性變數

num = 10

# 內函式,區域性函式,在函式內部定義的函式

def inner():

# nonlocal 關鍵字在區域性函式中使用

nonlocal num # 可以引用上一層函式中定義的區域性變數,但依然不能提公升為全域性變數

num += 1

print(num)

inner()

outter()

注意:不止變數有作用域,函式一樣也有相同的作用域 !

模組化程式設計

將乙個5元素陣列,右移n位,n從鍵盤輸入,首尾相接 例如 陣列中的元素為 那麼 n 3 的結果如下 資料是向右邊移三位,那麼,我轉化成先移一位的情況。因為當移一位的問題解決了,移動n位只需要將此過程迴圈n次即可 1.把a 1 放到臨時空間t t a 1 2.依次把前面元素的值放到後面的空間裡面.從後...

python的模組化

一 模組化 二 匯入語句 1 import語句 import functools 匯入頂級模組 import os.path 匯入非頂級模組 print dir print functools 匯入頂級模組,其名稱會加入到本地命名空間中,並繫結到其模組物件 匯入非頂級模組,將其頂級模組加入到本地命名...

Python之模組化程式設計的流程

設計api,進行功能描述。編碼實現api中描述的功能。在模組中編寫測試 並消除全域性 使用私有函式實現不被外部客戶端呼叫的模組函式。coding utf 8 設計定義薪水模組的api def yearsalary monthsalary 根據傳入的月薪的值,計算出年薪 mothsalary 12 r...