函式的引數

2021-08-31 07:31:40 字數 2763 閱讀 7613

現在,我們已經把函式返回值相關的事情研究清楚了,我們自己已經完成了乙個可以返回字串長度的函式。但是現在這個函式還是不完美,之前我們使用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...