現在,我們已經把函式返回值相關的事情研究清楚了,我們自己已經完成了乙個可以返回字串長度的函式。但是現在這個函式還是不完美,之前我們使用len函式的時候得是length = len(「hello world」),這樣我可以想計算誰就計算誰的長度。但是現在我們寫的這個函式,只能計算乙個「hello world」的長度,換乙個字串好像就是不行了。這可怎麼辦?
#函式定義
def mylen(s1):
"""計算s1的長度"""
length = 0
for i in s1:
length = length+1
return length
#函式呼叫
str_len = mylen("hello world")
print('str_len : %s'%str_len)
我們告訴mylen函式要計算的字串是誰,這個過程就叫做 傳遞引數,簡稱傳參,我們呼叫函式時傳遞的這個「hello world」和定義函式時的s1就是引數。
實參與形參
引數還有分別:
我們呼叫函式時傳遞的這個「hello world」被稱為實際引數,因為這個是實際的要交給函式的內容,簡稱實參。
定義函式時的s1,只是乙個變數的名字,被稱為形式引數,因為在定義函式的時候它只是乙個形式,表示這裡有乙個引數,簡稱形參。
傳遞多個引數
引數可以傳遞多個,多個引數之間用逗號分割。
def mymax(x,y):
the_max = x if x > y else y
return the_max
ma = mymax(10,20)
print(ma)
也正是因為需要傳遞多個引數、可以傳遞多個引數,才會有了後面這一系列引數相關的故事。。。
位置引數
站在實參角度
1.按照位置傳值
def mymax(x,y):
#此時x=10,y=20
the_max = x if x > y else y
return the_max
ma = mymax(10,20)
print(ma)
2.按照關鍵字傳值
def mymax(x,y):
#此時x = 20,y = 10
print(x,y)
the_max = x if x > y else y
return the_max
ma = mymax(y = 10,x = 20)
print(ma)
3.位置、關鍵字形式混著用
def mymax(x,y):
#此時x = 10,y = 20
print(x,y)
the_max = x if x > y else y
return the_max
ma = mymax(10,y = 20)
print(ma)
正確用法
問題一:位置引數必須在關鍵字引數的前面
問題二:對於乙個形參只能賦值一次
站在形參角度
位置引數必須傳值
def mymax(x,y):
#此時x = 10,y = 20
print(x,y)
the_max = x if x > y else y
return the_max
#呼叫mymax不傳遞引數
ma = mymax()
print(ma)
#結果typeerror: mymax() missing 2 required positional arguments: 'x' and 'y'
預設引數
1.正常使用
使用方法
為什麼要有預設引數:將變化比較小的值設定成預設引數
2.預設引數的定義
def stu_info(name,*** = "male"):
"""列印學生資訊函式,由於班中大部分學生都是男生,
所以設定預設引數***的預設值為'male'
"""print(name,***)
stu_info('alex')
stu_info('eva','female')
3.引數陷阱:預設引數是乙個可變資料型別
def defult_param(a,l = ):
print(l)
defult_param('alex')
defult_param('egon')
動態引數
按位置傳值多餘的引數都由args統一接收,儲存成乙個元組的形式
*args求和函式應用
def defult_param(a,l = ):
print(l)
defult_param('alex')
defult_param('egon')
**kwargs應用
def stu_info(**kwargs):
print(kwargs)
print(kwargs['name'],kwargs['***'])
stu_info(name = 'alex',*** = 'male')
實際開發中:
未來還會用到的場景。。。
問題:位置引數、預設引數、動態引數定義的順序以及接收的結果?
函式的引數
參考 先說一下預設引數 當我們呼叫乙個函式的時候,忘記傳入相應的引數了,那麼函式肯定呼叫失敗。為了讓函式可以在 失誤 的情況下也可以呼叫出來,那麼預設引數就可以派上用場了。例如,計算x2 可以完全把第二個引數值設為預設引數。def power x,n 2 s 1 while n 0 n n 1 s ...
函式的引數
沒有引數 定義函式和呼叫函式時括號裡都不寫內容 2.有乙個引數 傳什麼就是什麼 3.有多個引數 站在實參的角度上 按位置傳參 按關鍵字傳參 混著用可以 但是必須先按照位置傳參,再按照關鍵字傳參。不能給同乙個變數傳多個值。站在形參的角度上 位置引數 必須傳,且有幾個引數就傳幾個值 預設引數 可以不傳,...
函式的引數
函式的引數有實參和形參 形參可以當作區域性變數 本質上是將實參賦值給形參 傳遞物件時,相當於obj person,引用型別賦值的是位址,儲存在堆記憶體中,指向同乙個物件,person對多乙個name var person function setperson obj setperson person...