天天看點

【11】Python函數學習(上)

本文主要介紹python函數,也就是函數式程式設計的用法。

何為函數:

函數是組織好的,可重複使用的,用來實作單一,或相關功能的代碼段。

函數能提高應用的子產品性,和代碼的重複使用率。你已經知道python提供許多内建函數,比如print()。但你也可以自己建立函數,這被叫做使用者自定義函數。

規範:

面向對象  >>>>>> 類  >>>>>>class

面向過程  >>>>>> 過程 >>>>>def

函數式程式設計 >>>>> 函數 >>>>>def

定義一個函數:

你可以定義一個自己想要功能的函數,規則如下:

函數代碼塊以def關鍵詞開頭,後接函數辨別符名稱和圓括号。

任何傳入傳入參數和自變量必須放入圓括号中間,圓括号之間可以用于定義參數。

函數的第一行語句可以選擇性地使用文檔字元串,用于存放函數說明。

函數内容以冒号起始并且縮進。

return[表達式]結束函數,選擇性地傳回一個值給調用方。不帶表達式的return相當于傳回None。

函數文法:

def 辨別符1():

‘Hello world’ #添加介紹(可不加)

x +=1  #代碼塊

return x #定義傳回值

執行個體:

def hello():

    "hello world!"

    print('Hello world!')

hello() #調用函數

運作結果:

Hello world!

函數與過程:

#函數

def text1():

    print('in the text1')

    return 0 

#過程

def text2():

    print('in the text2')

x=text1()

y=text2()

print('from text1 return is  %s'%x)

print('from text2 retuin is  %s'%y)

in the text1

in the text2

from text1 return is  0

from text2 retuin is  None

注:函數與過程的差別(差別不大)

過程是沒有傳回值的函數,預設為None。

函數參數及調用

函數的傳回值:

def test1():

def test2():

    return 0   #先列印,在傳回return

def test3():

    print('in the text3')

    return 1,'hello',['a','b']

x=test1()

y=test2()

z=test3()

print(x)

print(y)

print(z)

in the text3

None  #沒有return預設傳回 None

0  #傳回return定義的值

(1, 'hello', ['a', 'b'])  #以一個元組傳回

注:

不寫return,預設傳回None

return=1 傳回object

return>1 傳回一個tuple元組

為什麼要有傳回值:需要整個函數的執行結果。

有參數的函數

def text1(x,y):  #有參數的函數

    print(x,y)

    return 0

text1()

這樣會報錯,沒有定義參數TypeError: text1() missing 2 required positional arguments: 'x' and 'y'

def text1(x,y): #行參 :根據實參變化而變化,沒有實際的參數。

text1(1,2) #實參 :實際參數

實參跟形參必須一一對應,個數不能超。

def text1(x,y): #行參 

text1(1,2) #這裡叫 位置調用

text1(x=3,y=4) #關鍵字調用

x=5

y=10

text1(x=x,y=y)  #這裡面的x=x,前後兩個x雖然長得一樣,但是意義不一樣。x=x,第一個x表示形參裡面的x,第二才是定義的x變量值

1 2

3 4

5 10

關鍵字調用與位置調用

def text2(x,y,z): #行參 

    print(x,y,z)

text2(1,2,3) #位置調用

text2(y=11,z=22,x=33) #關鍵字調用

text2(90,40,z=50) 

text2(x=10,20,30)  #運作報錯

text2(10,x=10,) #運作報錯

結論:

參數調用可以分為位置調用和關鍵字調用

位置調用,一一對應

關鍵字調用可以不按順序填寫

根據報錯得結論,必須位置參數放在關鍵字前面,程式才不會出錯。

函數的非固定參數

預設參數:

def test(x,y=2):  #這裡y設定預設參數

    print(x)

    print(y)

test(11,22)  #定義位置參數

11

22

test(11)  #定義位置參數

2

調用函數的時候,預設參數非必傳。

以上所講的參數調用都有一個共同點,那就是調用參數的個數,多了或者少了,都會報錯(某些情況下,少參數不會報錯,多了一定會報錯)。如果我有N個實參,你不肯能寫N個形參,針對實參不固定的情況下,有了參數組這個功能出現。具體看下面介紹

參數組:

def test1(*args):   以星開頭,定義變量名。這裡星的作用表示,接收N個實參。規範就是*args

    print(args)  以元組的形式列印出來

test1(1,2,3,4,5,6)

test1(*[1,2,3,4,5,6])  #args=tuple([1,2,3,4,5,6])

def test2(x,*args):

    print(x,args)

test2(10,1,2,3,4,4,5,6)

(1, 2, 3, 4, 5, 6)

10 (1, 2, 3, 4, 4, 5, 6)

應用:預留參數

參數組(建字典)

def text(**kwargs):   #把N個關鍵字參數轉換成字典的形式

    print(kwargs)

text(name='alex',age=18)

{'name': 'alex', 'age': 18}

    print(kwargs['name'])

    print(kwargs['age'])

text(**{'name':'alex','age':'18'})

alex

18

{'name': 'alex', 'age': '18'}

def text(name,age=18,*args,**kwargs):   #把N個關鍵字參數轉換成字典的形式

    print(name)

    print(age)

    print(args)

text('alex',names='alex',wante='30')

()

{'names': 'alex', 'wante': '30'}

總結:

*args屬于位置參數,接收将N個位置參數,轉換成元組

**kwargs屬于關鍵字參數,接收将N個關鍵字,轉換成字典

位置參數調用,隻能在關鍵字參數調用前面,否則會報錯。

<a href="http://down.51cto.com/data/2368748" target="_blank">附件:http://down.51cto.com/data/2368748</a>

本文轉自白羊IT51CTO部落格,原文連結:http://blog.51cto.com/000011211684/1982669,如需轉載請自行聯系原作者