python學習筆記(五)函式

2021-09-24 01:40:02 字數 4881 閱讀 1886

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 ...