python學習筆記(五)函式
1.函式是什麼?
定義:函式是指一組語句的集合通過乙個名字(函式名)封裝起來,只需呼叫函式名即可。
2.函式的好處:
簡化**
提高**的復用性
**可擴充套件
3.python中函式的定義:
定義函式使用def關鍵字,後面是函式名,函式名不能重複
1 def fun():#定義乙個函式,後面是函式名
2 print("hello world")#函式體
4.函式的引數
函式在呼叫的時候,可以傳入引數,有形參和實參
形參:形參變數只有在被呼叫時才被分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。
實參:實參可以是常量,變數,表示式,函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。形參是函式接收的引數,而實參就是你實際傳入的引數。
1 del calc(x,y)#定義乙個函式,引數有下x和y,x和y就是形參
2 print(x*y)#輸出x乘以y的值
3 calc(5,2)#呼叫上面定義的函式,5和2就是實參
函式的四種形參型別:
位置引數:
位置引數,字面意思也就是按照引數的位置來進行傳參,比如說上面的calc函式,x和y就是位置引數,位置引數是必傳的,有幾個位置引數在呼叫的時候就要傳幾個,否則就會報錯了,那如果有多個位置引數的話,記不住哪個位置傳哪個了,可以使用位置引數的名字來指定呼叫
比如說上面的calc函式也可以使用calc(y=1,x=2)這樣來呼叫,這種呼叫方式叫做關鍵字傳參
預設引數:
預設引數就是在定義形參的時候,給函式預設賦乙個值,比如說資料庫的埠這樣的,預設給它乙個值,這樣就算你在呼叫的時候沒傳入這個引數,它也是有值的;因此,預設引數不是必填的,如果給預設引數傳值的話,它就會使用傳入的值。如果使用預設引數的話,必須放在位置引數後面定義。
1 def conn_mysql(user,passwd,port=3306):#定義乙個連線mysql的方法,雖然這個方法並沒有連線mysql,我只是舉個預設值引數的例子,port就是乙個預設值引數
2 print(user,passwd,port)
3 coon_mysql('root','123456')#沒指定預設值
4 coon_mysql('root','123456',port=3307)#指定預設值引數的值
非固定引數:
上面的兩種位置引數和預設引數都是引數個數是固定的,如果說我乙個函式,引數不是固定的,我也不知道以後這個函式會擴充套件成啥樣,可能引數越來越多,這個時候如果再用固定的引數,那後面程式就不好擴充套件了,這個時候就可以用非固定引數了,非固定引數有兩種,一種是可變引數,一種是關鍵字引數。
可變引數:
可變引數用*來接收,後面想傳多少個引數就傳多少個,如果位置引數,預設值引數,可變引數一起使用的話,可變引數必須在位置引數和預設值引數後面,可變引數也是非必傳的。
1 def test (a,b=1,*args):
2 print('a',a)
3 print('b',b)
4 print('args',args)
5 print(args[0])
6 7 test('hahaha')#a hahahha b 1 args ()
8 test('hahahha',2,'123','456','789')#a hahahha b 2 args ('123', '456', '789') 位置呼叫
9 10 test(b=5,a=10)#關鍵字呼叫 a 10 b 5 args ()
關鍵字引數:
關鍵字引數使用**來接收,後面的引數也是不固定的,想寫多少個寫多少個,當然也可以和上面的幾種一起來使用,如果要一起使用的話,關鍵字引數必須在最後面。
使用關鍵字引數的話,呼叫的時候必須使用關鍵字傳參。關鍵字引數也是非必傳的。
1 def test2(a,**kwargs):
2 print(kwargs)#字典型別
3 print(a,kwargs)
4 test2(a=1,name='hhhh',***='nv')#
5 #1
5.函式的返回值
每個函式都有返回值,如果沒有在函式裡面指定返回值的話,在python裡面函式執行完之後,缺省會返回乙個none,函式也可以有多個返回值,如果有多個返回值的話,會把返回值都放到乙個元組中,返回的是乙個元組。為什麼要有返回值呢,是因為在這個函式操作完之後,它的結果在後面的程式裡面需要用到。函式中的返回值使用return,函式在遇到return就立即結束。
1 def calc(x,y):#這個就是定義了乙個有返回值的函式
2 c = x*y
3 return c,x,y
4 res = calc(5,6)#把函式的返回結果賦值給res
5 print(res)
6.區域性變數和全域性變數
區域性變數意思就是在區域性生效的,出了這個變數的作用域,這個變數就失效了,比如上面的c就是乙個區域性變數,出了這個函式之後,就沒有c這個值了
全域性變數就是在整個程式裡面都生效的,在程式最前面定義的都是全域性變數,全域性變數如果要在函式中修改的話,需要加global關鍵字宣告,如果是list,字典和集合的話,則不需要加global關鍵字,直接就可以修改。
1 name='marry'#字串全域性變數
2 names=#list全域性變數
3 print(name)
4 print(names)
5 def test():
6 global name #修改name的值就需要用global關鍵字
7 name='sriba'
9 return names
10 test()#呼叫函式
11 print('修改後',name)
12 print('修改後names',names)
1 a=100#全域性變數
2 def test():
3 a=5
4 print('裡面的',a)
5 def test2():
6 b=1
7 print(a)
8 test()
9 test2()
10 print('外面的',a)
11 #列印結果:
12 #裡面的 5
13 #100
14 #外面的 100
1 a=100#全域性變數
2 def test():
3 global a #宣告全域性變數
4 a=5#修改全域性變數
5 print('裡面的',a)
6 def test2():
7 b=1
8 print(a)
9 test()
10 test2()
11 print('外面的',a)
12 #列印結果:裡面的 5
13 # 5
14 # 外面的 5
1 def test():
2 global a
3 a=5
4 def test1():
5 c=a+5
6 return c
7 test()
8 res=test1()
9 print(res)#列印結果:10
7.遞迴呼叫
在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。遞迴呼叫的意思就是,在這個函式內部自己呼叫自己,就有點迴圈的意思。
1 def test1():
2 num = int(input('please enter a number:'))
3 if num%2==0:#判斷輸入的數字是不是偶數
4 return true #如果是偶數的話,程式就退出了,返回true
5 print('不是偶數請重新輸入!')
6 return test1()#如果不是偶數的話繼續呼叫自己,輸入值
7 print(test1())#呼叫test
遞迴呼叫的特性:
1.必須有乙個明確的結束條件
2.每次進入更深一層遞迴,問題規模相比上次遞迴都應有所減少
3.遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀,由於棧的大小不是無限的,所有,遞迴呼叫的次數過多,會導致棧溢位)
8.高階函式:乙個函式的引數是乙個函式,那麼這個函式就是乙個高階函式。
1 def s_int(n):
2 #這個函式的作用是把傳入的引數型別轉換成int型別
3 return int(n)
4 def add(x,y,z):
5 #這個函式的意思,接收3個引數,x,y,z,z是乙個函式
6 print(z(x)+z(y))#這個執行過程是這樣的,z是乙個函式,把x和y的值傳給z,然後用z函式的返回值把兩個值相加
7 add('8','9',s_int)#呼叫,傳入x和y的值,再把上面的那個定義好的函式傳進去
python學習筆記五(函式)
實現某個功能的 整合乙個隨時可呼叫的函式,即完成某項工作的 塊 def fuctioname parameterlist fuctioname 函式名稱 parameterlist 可選引數,形參 comments 可選引數,注釋,表明函式的功能 functionbody 函式需要執行的功能 例 s...
python 學習筆記(五)函式 定義函式
針對第七章最後的課後習題,稍作備註。pop方法彈出的是列表末尾的元素,sandwich orders 三明治1 三明治2 三明治3 finished sandwichs while sandwich orders sandwich order sandwich orders.pop print i ...
Python 學習筆記(五)常用函式
python內建函式 四捨五入 round 絕對值 abs 1 round 1.543,2 保留兩位小數,四捨五入為1.54 2 1.54 3 round 1.546,2 保留兩位小數,四捨五入為1.55 4 1.55 5 round 1.536,2 6 1.54 7 abs 5 8 59 abs ...