模組化程式設計指的是把程式進行封裝(函式封裝,物件導向,檔案封裝…)
# 在定義函式時,在小括號內可以定義形式引數
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...