函數
1.什么是函數:函數就是對現實某一特定功能的代碼段封裝
2。函數的分類:內置函數和自定義函數
內置函數:系統已經寫好的,可以直接使用的函數。例如:print函數,input函數,sum函數,len函數等等
自定義函數:程序員自己去創建的函數
3.函數的定義(聲明):
a.固定格式
def 函數名(參數列表):
函數體
b.說明:
def:python中聲明函數的關鍵字
函數名:標識符,不能是關鍵字:PEP8(所有字母小寫,多個單詞用下劃線隔開),見名知意(看到函數名要大概知道函數的功能)
():固定格式,必須寫
參數列表:參數1,參數2,參數3......參數可以有多個,也可以沒有。這兒的參數也叫形參,參數是用來從函數的外面,向函數里面傳值用的(將數據從函數的外面傳到函數的里面)
函數體:實現函數功能的代碼段。函數體中可能會包含return語句
4.初學者聲明函數的過程:
第一步:確定函數的功能
第二步:根據功能確定函數名
第三步:確定參數(確定有沒有,確定有幾個)看實現函數的功能,需不需要從函數的外面傳遞數據進來需要幾個就定義幾個參數
第四步:實現函數的功能
第五步:確定返回值
5.注意:(特別重要)
函數體只有在調用時候才會執行
6.函數調用
a.固定格式:
函數名(實參列表)
b.說明:
函數名:你要調用哪個函數,就寫對應的函數名。函數只能先聲明才能調用
實參列表:就是用來給形參賦值的
def sum2(num1,num2):
print('=========')
print(num1+num2)
print('~~~~~~~')
#調用函數sum2
sum2(100,11)
#一個函數可以調用多次
sum2(2,3)
輸出:
~~~~~~~
=========
111
=========
5
7.函數的調用過程(重點)
a.回到函數聲明的位置
b.使用實參給形參賦值(傳參)----傳參的時候一定要保證每個形參都有值
c.執行函數體
d.將返回值返回給函數調用者
e.回到函數調用的地方,接著往后執行
例如:寫一個函數,打印一個整數的階乘
def factorial(number):
count = 1
for x in range(1,number+1):
count *= x
print('%d的階乘為:%d' % (number,count))
number = int(input('輸入一個整數:'))
factorial(number)
輸出:
輸入一個整數:6
6的階乘為:720
函數的參數
參數:聲明函數的時候參數列表中的參數叫形參;調用函數的時候,參數列表中的參數叫實參
傳參:傳參的過程就是使用實參給形參賦值的過程,一定要保證每個形參都有值
實參
a.位置參數:傳參的時候實參和形參的位置一一對應(第一個實參傳給第一個形參,第二個實參傳給第二個形參...)
b.關鍵字參數:函數調用的時候通過‘形參名=實參’的形式來傳參
def func1(a,b,c):
print(a,b,c)
#位置參數
func1(10,'asd',True)
#關鍵字參數
func1(b='asd',c=True,a=10)
#也可以關鍵字參數和位置參數結合
輸出:
10 asd True
10 asd True
參數的默認值
a.在聲明函數的時候可以給參數賦默認值(可以給所有的參數賦默認值,也可以給部分參數賦默認值)
給部分參數賦默認值的時候,要求有默認值的參數必須放到參數列表的最后
b.調用參數有默認值的函數的時候,有默認值的參數可以傳參也可以不傳
#聲明函數的時候每個參數都有默認值
def func2(a=0,b=True,c='abc'):
print(a,b,c)
#所有的參數都不傳參,全部使用默認值
func2()
#給部分參數傳參
func2(10)
func2(b='asd')
輸出:
0 True abc
10 True abc
0 asd abc
部分函數有默認值,有默認值的必須放到最后
def func3(a,b,c=121):
print(a,b,c)
#沒有默認值的參數必須傳參,有默認值的參數可以傳也可以不傳
func3('xr','ka')
輸出:
xr ka 121
不定個數參數
python中通過在形參名前加*來讓這個形參變成一個元組,可以同時接受多個實參,也可以是0個
例如:寫一個函數,計算多個數的和
def sum3(*nums):
# print(nums,type(nums))
count = 0
for item in nums:
count += item
print(count)
sum3()
sum3(1)
sum3(100,121,234,90)
輸出:
0
1
545
寫一個函數,統計指定班級中所有學生的成績
def class_info(class_name,*score):
print(class_name,score)
class_info('python1806',90,89,92,91,100,98)
輸出:
python1806 (90, 89, 92, 91, 100, 98)
對參數的類型進行說明
python不能直接約束一個變量的類型,但是可以通過說明,來提示用戶調用函數的時候,參數的類型
def func4(name:str,age:int,study_id:str):
print(name,age)
func4('asd',10,[90,89,91])
輸出:
asd 10
函數的返回值
1.返回值:函數的返回值就是return關鍵字后面的表達式的值,就是函數調用表達式的結果
2.python中所有的函數都有返回值,默認是None(沒有return)
說明:
a.如果函數體中沒有return,函數的返回值就是None
b.調用函數的語句就是函數調用表達式
例如:寫一個函數,打印‘hello’
#1沒有return
def func1():
print('hello')
#聲明一個變量re來保存函數調用后的結果
re = func1()
print(re)
輸出:
hello
None
2.return關鍵字(return只能寫在函數體中)
a.確定返回值
b.結束函數(函數中只要遇到return,函數就直接結束)
c.單獨的return相當于return None
def func2(n):
print(n)
return 100
print('=====')
re = func2(10)
print(re)
輸出:
10
100
def func3():
if False:
return 20
print(func3())
輸出:
None
注意:看一個函數的返回值是多少,不是看函數中有沒有return,而是看函數的執行過程中有沒有遇到return
遇到了才是return后面的結果,否則就是None
練習:寫一個函數,判斷一個數是否是偶數,如果是返回True,否則返回False
def func4(x):
if x % 2 ==0:
return True
else:
return False
x = int(input('輸入一個整數:'))
print(func4(x))
輸出:
輸入一個整數:4
True
什么時候函數需要返回值:只要實現函數的功能會產生新的數據,就通過返回值將新的數據返回
而不是打印他
"""
練習:
- 寫一個函數,統計一個列表中浮點數的個數
def count_of_float(list1):
count = 0
for item in list1:
if isinstance(item,float):
count += 1
return count
result = count_of_float([3.14,True,4.0,90])
print(re)
輸出:
2
2.寫一個函數,將一個數字列表中所有的元素的值都變成原來的2倍
def double_list(list2):
for index in range(len(list2)):
list2[index] *= 2
return list2
# list2 = [1,2,34,56]
# double_list(list2)
# print(list2)
result = double_list([3,4,5,6])
print(result)
輸出:
[6, 8, 10, 12]
3.寫一個函數,獲取指定元素對應的下標
def indexs(list4:list,item):
index_list = []
for index in range(len(list4)):
if list4[index] == item:
index_list.append(index)
return index_list
all_index = indexs([10,'abc',89,40,10,56],10)
print(all_index)
#將第二個10換成121
list4 = [10,'abc',89,40,10,56]
all_index = indexs(list4,10)
list4[all_index[1]] = 121
print(list4)
輸出:
[0, 4]
[10, 'abc', 89, 40, 121, 56]