1.函數 1.1 認識函數 定義一個事情或者是功能,等到需要的時候直接去用就好了.那麼這裡定義東西就是一個函數 函數:對代碼塊和功能的封裝和定義 函數的好處: 1. 減少代碼的重覆性 2. 代碼可讀性高 3. 將功能進行封裝(造工具) 1.2 定義函數 結構: def 關鍵字 fun ...
1.函數
1.1 認識函數
定義一個事情或者是功能,等到需要的時候直接去用就好了.那麼這裡定義東西就是一個函數
函數:對代碼塊和功能的封裝和定義
函數的好處:
減少代碼的重覆性
代碼可讀性高
將功能進行封裝(造工具)
1.2 定義函數
結構:
def 函數名():
函數體
def 關鍵字
func 函數名
() 傳遞參數
: 語句結束
函數體:就是函數被執行之後要執行的代碼
1.3 調用函數
使用函數名加小括弧就可以調用了 寫法:函數名() 這個時候函數的函數體會被執行
def walk():
print("出宿舍門")
print("下樓梯")
print("出大樓門")
print("右轉直行200米")
print("再右轉直行100米")
walk() # 這是walk函數的調用
結果:
出宿舍門
下樓梯
出大樓門
右轉直行200米
再右轉直行100米
1.4 函數的執行流程
1.5 函數的返回值
執行完函數之後,我們可以使用return來返回結果
函數中遇到return,此函數就立馬結束了.不在繼續執行
當函數的返回值是多個的時候,返回的就是一個元組
總結一下:
1.return 返回值
2.遇到return,此函數結束,函數後面的東西將不會在執行
3.return的內容返回給函數的調用
4.return 返回多個內容的時候還是元組
關於返回值:
如果return什麼都不寫或者乾脆就沒寫,return返回的結果就是None
如果return後面寫了一個值,可以返回任意類型,則調用者可以接受一個結果
如果return後面寫了多個結果,則調用者可以接受一個tuple,調用者可以直接使用解構獲取多個變數
lst = [1,2,3,4,5]
def func():
for i in lst:
print(i)
lst.append(input(">>>"))
return lst
print(func())
1.6 函數的參數
參數,也就是函數括弧里的內容 函數在調用的時候指定一個具體的變數的值 就是參數.寫法如下:
def 函數名(參數):
函數體
如果我們再定函數的時候寫了形參,在調用函數的時候沒有傳遞值,調用的時候右邊括弧會發黃,所以我們必須要傳遞參數,參數要一一對應,不能多不能少.
1.6.1參數
1.形參(形式上的參數)(行數的定義中括弧里的是形參)
寫在函數聲明的位置的變數叫形參,形式上的一個完整.表示這個函數需要xxx
2.實參(實際存在的參數)(行數的調用括弧里的是實參)
在函數調用的時候給函數傳遞的值加實參,實際執行的時候給函數傳遞的信息.表示給函數xxx
3.傳參(將實參傳遞給形參的過程叫做傳參)
從調用函數的時候將值傳遞到定義函數的過程叫做傳參
#函數定義
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)
帶參數的函數
參數可以傳遞多個,多個參數之間用逗號分割。
def mymax(x,y):
the_max = x if x > y else y
return the_max
ma = mymax(10,20)
print(ma)
傳遞多個參數
4.位置參數(必須一一對應)
站在實參角度
4.1 按照位置傳參
按照位置傳參
def mymax(x,y):
#此時x=10,y=20
the_max = x if x > y else y
return the_max
mx = mymax(10,20)
print(mx)
4.2 按照關鍵字傳參
按照關鍵字傳參
def mymax(x,y):
#此時x = 20,y = 10
print(x,y)
the_max = x if x > y else y
return the_max
mx = mymax(y = 10,x = 20)
print(mx)
4.3 位置,關鍵字形式混合用
混合傳參
def mymax(x,y):
#此時x = 10,y = 20
print(x,y)
the_max = x if x > y else y
return the_max
mx = mymax(10,y = 20)
print(mx)
正確用法
問題一:位置參數必須在關鍵字參數的前面
問題二:對於一個形參只能賦值一次
綜上: 在實參的角度來看. 分為三種:
1. 位置參數
2. 關鍵字參數
3. 混合參數, 位置參數必須在關鍵字參數前面
位置參數:
位置參數,按照位置來賦值,到目前為止,我們編寫的函數都是這種
優先順序:位置 > 關鍵字
站在形參的角度
位置參數必須傳值
def mymax(x,y):
#此時x = 10,y = 20
print(x,y)
the_max = x if x > y else y
return the_max
#調用mymax不傳遞參數
mx = mymax()
print(mx)
#結果
TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'
預設參數
在函數聲明的時候, 就可以給出函數參數的預設值. 在調用的時候可以 給出具體的值, 也可以不給值, 使用預設值.
eg:一個班大部分學生都是男生. 這個時 候就可以給出⼀一個sex='男'的預設值.
def stu_info(name,sex = "male"):
"""列印學生信息函數,由於班中大部分學生都是男生,
所以設置預設參數sex的預設值為'male'
"""
print(name,sex)
stu_info('alex')
stu_info('Eva_J','female')
預設參數
註意:必須先聲明在位置參數,才能聲明關鍵字參數
參數陷阱:
def defult_param(a,l = []):
l.append(a)
print(l)
defult_param('alex')
defult_param('egon')
結果:
['alex']
['alex', 'egon']
綜上:在形參的角度來看
- 位置參數
- 預設值參數(大多數傳進來的參數都是一樣的, 一般用預設參數