Python之旅——函數初步

不管在什麼語言中,函數都是極其重要的一個部分

什麼是函數,我覺得之前在C++函數講解中已經盡我所能地說明了

我們的第一個問題無非是:

怎麼創建一個 ( 無參數 ) 函數?

Python中我們使用def定義一個函數
(盲猜def是define的縮寫啦)

def printHello():
	print("Hello world!")
	print("Welcome to Python!")
	print("This is your first time to create a function.")

	
>>> printHello()
Hello world!
Welcome to Python!
This is your first time to create a function.

注意

  • 在函數定義的時候,函數標籤的後邊不要忘記添加冒號
  • 函數定義時後面的參數列表括號不能省略
  • 函數調用時,同樣需要寫上括號
  • 函數調用的時候同樣遵循向上查找的原則

函數的實質,是對一系列操作進行封裝實現一個小功能,進而能夠對此功能進行靈活的調用
而函數相比較於其他的結構,最大的優勢就是ta可以傳遞參數,從而大大提高了ta的靈活性和適用範圍

參數可以說是函數的靈魂,那麼,

怎麼創建一個 ( 有參數 ) 函數?

簡直不要太簡單:

def printWelcome(name):
	print('Welcome,'+name+'!')
	
>>> printWelcome('Coco_T')
Welcome,Coco_T!

def addThem(a,b):
	print(a+b)
	
>>> addThem(1,2)
3
>>> addThem('love','you')
loveyou
>>> addThem(2.414,3.141)
5.555

我的天,Py簡直不要太強!
如果函數合理定義的話,直接就是一個函數模板!

在這裏友情提示一下
一般的,定義函數時參數儘量不要太多,三到四個就可以了
同時要養成給函數和參數寫好詳細註釋的習慣
一方面方便自己日後的調試,另一方面也爲進入公司參加多人項目打好基礎(誤)

那我們繼續往下走:

怎麼創建一個 ( 有返回值 ) 函數?

依賴return我們就可以編寫出有返回值的函數,而調用方式也和C++/C大同小異

def addThem(a,b):
	return a+b
	
>>> print(addThem('Hello','World'))
HelloWorld
>>> print( addThem( 'I ' , addThem('love ','you.') ) )
I love you.

有關參數的真理討論

緊接着我們上一部分的話題,我們深入探討一下函數的靈魂:參數
細緻的來分,函數分爲形式參數(parameter)(parameter)和實際參數(argument)(argument)

形參是函數創建和定義過程中小括號裏的參數
實參是函數在調用過程中傳遞進去的參數

插播一條廣告:

函數文檔

什麼是函數文檔?
函數文檔就是在函數內書寫的一串字符串,在執行函數的時候不會被打印出來,肉眼觀測時作用就相當於註釋,可以用來解釋函數的作用和參數的意義

def test():
	'測試函數文檔的作用:此函數可以打印程序員的白月光'
	print('Hello world!')
	
>>> test()
Hello world!

既生註釋何生函數文檔?因爲存在即合理!
給函數編寫文檔,就像是直接把這個條註釋寫進了函數的戶口本里
我們在外部無法觀測函數實現代碼的時候,可以通過調用默認屬性在函數外部獲取這條“註釋”

>>> test.__doc__
'測試函數文檔的作用:此函數可以打印程序員的白月光'
>>> help(test)
Help on function test in module __main__:

test()
    測試函數文檔的作用:此函數可以打印程序員的白月光

關鍵字參數

在C++中,對於傳參順序我們都是心照不宣:一定要按照順序對接實參和形參
而Py作爲後起之秀,掙脫了這個討厭的束縛
關鍵字參數就是在傳遞的參數前增加其對應的形參名稱,這樣就可以避免因爲參數過多導致在參數傳遞時出現對接失敗的問題啦

def saySomething(name,word):
	print(name+':'+word)

>>> saySomething('C_T','How do u do?')
C_T:How do u do?
>>> saySomething('How do u do?','C_T')
How do u do?:C_T
>>> saySomething(word = 'How do u do?',name = 'C_T')
C_T:How do u do?

默認參數

在C++函數教程中我們介紹了默認參數的定義
簡單來說,就是在函數標籤中,爲形參提前定義一個初始值:

void doit(int x=0,int y=0,int z=0) {...}

Py中的默認參數也是如此
(好吧,小心思暴露無遺。。。)

def saySomething(name = 'C_T',word = 'How do u do?'):
	print(name+':'+word)

>>> saySomething()
C_T:How do u do?
>>> saySomething(word = 'Like Mr.C/shy')
C_T:Like Mr.C/shy
>>> saySomething(name = 'Mr.C',word = 'Pardon?')
Mr.C:Pardon?

收集參數

發明這個東西的初衷,大概是因爲有些前輩在寫函數的時候,自己也搞不清楚到底需要多少個參數(宛如zz)

看一下這個栗子會好解釋很多:

def test(*params):
	print('The length of params is ',len(params))
	print('params[1] = ',params[1])

>>> test(1,'Coco_T',3.14,"I'm all right.",4,5,6)
The length of params is  7
params[1] =  Coco_T

我們在定義形參的時候,在形參前面增加了一個星號
這樣我們就可以一次性傳入多個數據,計算機會幫我們把這些數據打包成一個元組
在接下來的操作中按照元組的規則盤ta就可以啦

如果我們在收集參數的同時,定義一個普通參數,這要怎麼辦呢?

def test(*params,temp):
	print('The length of params is ',len(params))
	print('temp = ',temp)
	print('params[1] = ',params[1])

>>> test(1,'Coco_T',3.14,"I'm all right",5,6,7,8,9)
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    test(1,'Coco_T',3.14,"I'm all right",5,6,7,8,9)
TypeError: test() missing 1 required keyword-only argument: 'temp'

我們會發現,在調用函數的時候,我們需要採用關鍵字參數的方法才能成功

>>> test(1,'Coco_T',3.14,"I'm all right",5,6,7,8,temp = 9)
The length of params is  8
temp = 9
params[1] =  Coco_T

所以,一般這種情況下
我們會給這個普通參數一個默認初始值(默認參數)
這樣就可以有效的避免錯誤
(突然有一種融會貫通的感jio~)

def test(*params,temp = 9):
	print('The length of params is ',len(params))
	print('params[1] = ',params[1])

>>> test(1,'Coco_T',3.14,"I'm all right",5,6,7,8)
The length of params is 8
temp = 9
params[1] =  Coco_T

啾啾啾!函數初步入門就到這裏啦~
接下來還有更富有挑戰性的內容等着大家呢!Fight!

發佈了956 篇原創文章 · 獲贊 211 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章