推薦一個網址:http://pythontutor.com/visualize.html#mode=edit
可以在線運行代碼,觀看執(zhí)行過程,很好用孝情。
沒有函數鱼蝉,出現(xiàn)的問題是什么?
1箫荡、同樣的代碼需要些多次魁亦。
2、一個功能的需求發(fā)生改變羔挡,需要修改多個地方洁奈。
- 定義:函數就是對實現(xiàn)某一特定功能的代碼段的封裝。
- 作用:提高代碼的復用度绞灼,讓代碼更簡潔利术。
一、函數分類
- 內置函數:系統(tǒng)寫好的低矮,可以直接使用的函數印叁。例如 print函數、input函數军掂、sum函數等轮蜕。
- 自定義函數:程序員自己創(chuàng)建的函數
二、函數的說明
1蝗锥、固定格式:
def 函數名(參數列表):
函數的說明文檔
函數體
說明文檔的格式:
def download(url):
"""
在這里寫說明文檔(函數功能描述)
:param url:下載數據的地址(對參數說明)
:return:None(返回值的說明)
"""
2跃洛、 函數組成說明:
- def:python中聲明函數的關鍵字。
- 函數名:標識符终议,不能是關鍵字汇竭。(規(guī)范:PEP8規(guī)則,見名知義)
- ():固定格式穴张,并且必須寫韩玩。
-
參數列表(行參):參數名1,參數名2陆馁,參數名3.....(參數可以有多個找颓,也可以不寫)。
參數是用來從函數的外面叮贩,向函數里面?zhèn)髦涤玫摹?/li> - 說明文檔:說明函數功能击狮。
-
函數體:實現(xiàn)函數功能的代碼段。
函數體中可能會包含return語句益老。
3彪蓬、初學者聲明函數的過程:
1、確定函數的功能 ===》2捺萌、根據功能確定函數的名字 ===》 3档冬、確定參數(確定函數需不需要從函數外面?zhèn)鬟f數據進來) ===》4、實現(xiàn)函數功能 ===》5、確定返回值
#寫一個函數酷誓,打印兩個數的和
def mysum(a,b):
return a + b
print(mysum(1,2))
3
4披坏、函數的調用
格式:函數名(實參列表)
函數體只有調用的時候才會執(zhí)行,并且只能先聲明才能調用
- 實參列表:就是給形參賦值的
5盐数、函數的調用過程(重要)
(1)棒拂、回到函數聲明的位置。
(2)玫氢、使用實參給形參賦值(傳參)帚屉。
(3)、執(zhí)行函數體漾峡。
(4)攻旦、將返回值返回給函數調用者。
(5)生逸、回到函數調用的地方牢屋,接著往后執(zhí)行。
練習:
#寫一個函數牺陶,打印一個整數的階乘
def jiecheng(n):
product = 1
for index in range(1,n+1):
product *= index
print(product)
jiecheng(5)
結果:
120
6、參數
實參:
(1)辣之、位置參數:實參的位置和形參一一對應掰伸。
(2)、關鍵字參數:通過 ‘ 形參名 = 實參 ’ 來傳參怀估。
func1(b='abc' , c=True , a=10)
(3)狮鸭、關鍵字參數和位置結合:
func1(10, b=2, c=4)
聲明函數時,參數賦予默認值:
- 在聲明函數的時候多搀,可以參數賦默認值的歧蕉。(可以參數賦默認值)
- 給部分參數賦默認值的時候,要求有默認值的參數必須放在參數列表的最后康铭。
- 沒有默認值的參數必須傳參惯退,有默認值的參數,可以傳可以不傳从藤。
def func(a, b='a', c=True):
print(a, b, c)
func(10)
結果:
10 a True
不定個數參數
格式:def 函數名(*形參)
- python中通過在形參名前面加 * 催跪,讓這個形參變成一個元組,來讓這個形參可以接受多個實參夷野。
def mysum(*nums):
print(nums, type(nums))
sum = 0
for item in nums:
sum += item
print(sum)
mysum(1,2,3,4,5)
結果:
(1, 2, 3, 4, 5) <class 'tuple'>
15
python不能直接約束一個變量的類型懊蒸。但是可以通過說明,來提示用戶調用參數的時候悯搔,參數的類型骑丸。
def func(name:str, age:int, study_id):
print(name)
其中str、int有提示作用
7、函數的返回值
- 返回值:函數的返回值就是return關鍵字后面表達式的結果通危。就是函數調用表達式的結果铸豁。
- python中所有的函數都有返回值,默認為None(沒有return)黄鳍。
def Pass():
pass
print(Pass())
結果:
None
- return 關鍵字
1推姻、確定返回值
2、結束函數(函數中只要遇到return框沟,函數就直接結束)
什么時候需要返回值藏古?
只要實現(xiàn)函數的功能會產生新的數據,就通過返回值將新的數據返回忍燥,并不是打印它拧晕。
練習:
#練習:1、寫一個函數梅垄,統(tǒng)計一個列表中整數的個數
def count1(list):
count = 0
for index in list:
if isinstance(index,int):
count += 1
return count
print(count1([1, 1.2, 3.4 ,34.5, 34, 34]))
# 2厂捞、將一個數字列表中所有的元素的值都變成原來的2倍
def list2(list_new):
n = 0
for item in list_new:
list_new[n] *= 2
n += 1
return list_new
print(list2([2,3,4,5,6]))
# 3、獲取指定元素對應的下標
def list_1(list:list, item):
index_list = []
for index in range(len(list)):
if list[index] == item:
index_list.append(index)
return index_list
print(list_1([1,3,2,2,3,3],3))
結果:
3
[4, 6, 8, 10, 12]
2