函數的作用:函數可以提高代碼的復用度,讓程序更簡潔
1.函數的概念
函數就是對實現某一特定功能的代碼的段的封裝
2.函數的分類:內置函數和自定義函數
內置函數:系統寫好的,可以直接使用的函數。例如:print(),len()
自定義的函數:程序員自己去創建的函數
3.函數的定義(聲明):
a.固定格式
def 函數名(參數列表):
函數體
b.說明:
def:python中聲明函數的關鍵字
函數名:標識符,不能是關鍵字;PEP8(所有字母小寫,多個單詞至今用下劃線隔開),見名知義
():固定格式,并且必須寫。
參數列表:參數名1,參數名2,參數名3...參數可以有多個,也可以沒有,這兒的參數也叫形式參數
參數是用來從函數的外面,向函數里面傳值用的(將數據從函數的外面傳遞到函數的里面)
函數體:就是實現函數功能的代碼段,函數體可能會包含return語句
注意:函數體只有在調用的時候才執行
4.函數的調用
a.固定格式;
函數名(實參列表)
b.說明:
函數名:你要調用哪個函數,就寫對應的函數名,函數只能先聲明才能使用
實參列表:就是用來給形參傳值的
#調用函數
my_sum(100,11)
#寫一個函數,打印兩個數的和
def my_sum(num1,num2):
return num1+num2
5.函數的調用過程(必須掌握)
a.回到函數聲明的位置
b.使用實參給形參賦值(傳參)--傳參的時候一定要保證每個形參都有值
c.執行函數體
d.將返回值返回給調用者
e.回到函數調用的地方,接著往后執行
練習:寫一個函數打印一個整數的階乘
def factorial(n):
s = 1
for i in range(1,n+1):
s *= i
print(s)
factorial(10)
6.函數的參數
聲明函數的時候參數列表的參數叫做形參,調用函數的時候參數列表中的參數叫做實參
傳參:傳參的過程就是使用實參給形參賦值的過程,一定要保證每個形參都要有值
a.實參
1).位置參數:實參和形參的位置一一對應,第一個實參傳給第一個形參,第二個形參傳給第二個形參
def fun1(a.b,c):
print(a,b,c)
fun1(10,'abc',True)
2).關鍵字參數:
函數名(形參名=實參,形參名=實參...)
fun1(b=10,a='abc',c=True)
3).關鍵字參數和位置參數是可以結合的:關鍵字對應的參數一定要放在后面
fun1(a=10,'hekko',c='20')
b.參數的默認值
在聲明函數的時候,可以參數賦默認值(可以給所有的參數賦默認值,也可以給部分參數賦默認值),給部分參數賦默認值的時候,要求有默認值的參數必須放到參數列表的最后,有默認值的參數可以在傳參的時候省略不寫
全部參數有默認值
def fun1(a='a',b='b',c='c'):
部分參數有默認值
def fun1(a,b,c='hello'):
print(a,b,c)
fun1("a",'b')
默認值可以確定傳入參數的類型:沒有默認值的參數必須傳參,有默認值的參數可以穿也可以不傳
7.不定個數的參數:在形式參數名前加一個*,這個形參就可以接受多個值,這個形參就是一個元組
這個實參可以是0個也可以是多個
#寫一個函數,計算多個數的和
def sumn(*num):
s = 0
for i in num:
s += i
print(s)
print(nums,type(nums)) #(10,1),<class 'tuple'>
sumn(10,1)
練習:寫一個函數,統計指定班級中所有學生的成績
def count_scores(class_name,*scores):
for score in scores:
print('score',end=' ')
print()
count_scores('python1806',0)
如果同時又多個參數,不定參數必須寫在形式參數的最后面
8.對參數的類型進行說明
python不能直接約束一個變量的類型。但是可以通過說明來提示用戶調用函數的時候參數的類型
形式參數:類型名(這種方式用來提示傳入參數類型),說明之后再函數類調用會有提示
def fun4(name:str,age:int,scores:list):
print(name,age)
fun4('abc',10,[10,20,30,40])
9.函數的返回值:函數的返回值就是return關鍵字后面的表達式的值。就是函數調用表達式的結果
注意:python中所有的函數值都有返回值,默認是None
說明:
a.如果函數體中沒有return,函數的返回值就是None
b.調用函數的語句就是函數表達式
函數調用過程:
a.先回到函數聲明的位置
b.用實參給形參賦值
c.執行函數體
d.將返回值返回給函數調用者
e.回到函數調用的位置(這個時候,函數調用表達式的值就是返回值)
練習:寫一個函數答應'hello'
def print_hello():
return "hello"
#聲明一個變量re,來保存函數調用后的結果
re = print_hello()
print(print_hello())
10.return關鍵字:只能寫在函數體中,單獨的一個return相當于return None
a.確定關鍵字
b.結束函數(函數中只要遇到return,函數就會直接結束)
注意:看一個函數的返回值是多少,不是單獨的看它有沒有return,而是看函數的額執行過程中遇沒遇到return
練習:寫一個函數判斷一個數是否是偶數,如果是返回True,否則返回False
def is_even_number(num):
return num%2==0
什么時候函數需要返回值?
只要實現函數的功能會產生新的數據,就通過返回值將新的數據返回,而不是打印它
1.練習:寫一個函數,統計一個列表中整數的個數
def count_int(lst:list):
count = 0
for item in lst:
if isinstance(item,float):
count += 1
return count
2.練習:將一個列表中所有的元素的值都變成原來的兩倍
def twice_lst(lst:list):
i = 0
length = len(lst)
while i<length:
lst[i] *= 2
i += 1
return lst
3.練習:寫一個函數獲取指定元素對應的下標
def get_indexs(lst:list,item):
i = 0
l = []
length = len(lst)
while i<length:
if lst[i] == item:
l.append(i)
i += 1
return l
#沒有找到返回None,其實寫不寫都可以
判斷一個值是否是指定的類型:
isinstance(值,類型)--->返回值是bool
isinstance(1,int)
注意:python中可以使用 數據1>=變量>=數據2