Python基础概念_5_函数
函數
6 函數
6.1?簡介
函數是被定義的完成指定功能的可被反復使用的代碼段。比如我們想實現一個功能,想知道當前的時間,格式是:年-月-日 時:分:秒。我們就可以這么寫:
import time
def getCurrentTime():
??? return time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))
然后調用它
print("當前系統時間是:\t"+getCurrentTime())
結果是:
2017-03-08 22:40:20
6.2?函數的定義
通過以上例子我們不難發現,函數一般有以下特征:
a) 函數要先定義再使用
b) 函數可以被反復調用
c) 函數一般都帶有返回值,代表它完成的功能。返回的可以是個字符串、列表、字典當然也可是是空,也就是None。
函數定義時一般以def關鍵字開始,空格之后起個函數名字,然后緊跟個括號,括號里可以指定參數,然后是冒號,這個冒號后面的縮進行就是函數體(即函數真正的實現的功能)。函數一般是有返回值即要return的,如果不加則返回None。
6.3?函數的參數
關于函數的參數,一般我們按照形參和實參來區分。這里先定義一個取長方形面積的函數,然后我們再調用它,結合整個過程來說明下。
defgetRectangleArea(length,breadth):
??? return length*breadth
len = 6
width=4
print("當前長方形的面積是:\t"+str(getRectangleArea(len, width))+"平方米")
結果:
當前長方形的面積是: 24平方米
分析下代碼:這里len和width是在函數外定義的變量也就是實參,即函數getRectangleArea被調用時傳過來的值,而函數內部的length和breadth則是形參,當函數被調用時len和width分別將值拷貝給了length和breadth,這兩個形參參與函數體里的乘運算,將length*breadth返回。函數執行后形參length、breadth將不復存在。而實參len和width還是保留原來的值。
形參、實參可以通俗的這么理解:實參是調用時參數的實際值而形參則是一種抽象的參數。比如這里我們抽象出兩個參數長和寬,那么無論什么樣的長方形都可以套用長乘以寬這個公式計算面積。即實參是可變的,而形參是固定的抽象值。
按照函數的使用情況,一般將將函數的參數分為以下幾類:
?? 必須參數
?? 關鍵字參數
?? 默認參數
?? 不定長參數
6.3.1?必須參數
即參數必須得傳的,如上例,如果我們像下面這樣執行時會報缺少參數的錯誤。
print("當前長方形的面積是:\t"+str(getRectangleArea(len))+"平方米")
錯誤提示:
TypeError:getRectangleArea() missing 1 required positional argument: 'breadth'
原因很簡單,這里我們定義函數getRectangleArea時指明了需要2個參數,但是我們調用時只給了1個參數,所以報錯了。
6.3.2?關鍵字參數
關鍵字參數是函數調用時,在函數括號里對參數進行賦值時可以通過參數名自動匹配,而不需嚴格函數定義的參數順序。這里需要實參和形參的名字要嚴格一致。所以getRectangleArea我們還可以這么調用:
#為了更好的說明關鍵字參數,這里新增我們打印出形參的值的功能。
def getRectangleArea(length,breadth):
return "形參里的長度是:"+str(length)+"\t形參里的寬度是"+str(breadth)+"\n當前長方形的面積是:"+str(length*breadth)
#注意這里的參數傳遞并不是嚴格按照函數定義的length在前,breadth在后。Python會自動通過參數名匹配到函數里的形參。
print(getRectangleArea(breadth=4,length=6))
結果:
?
內部的長度是:6? 內部的長度是4
當前長方形的面積是:24
但是如果我們使用關鍵字函數時調用參數里的名字不跟形參一致則會不合法的關鍵字參數的報錯。比如調用時這么寫:
print(getRectangleArea(breadth1=4,length=6))
TypeError:getRectangleArea() got an unexpected keyword argument 'breadth1'
6.3.3?默認參數
函數被調用時,如果沒對參數指定可以使用函數定義里的默認值。
#這里給寬度定義個默認值是2
defgetRectangleArea(length,breadth=2):
return "形參里的長度是:"+str(length)+"\t形參里的寬度是"+str(breadth)+"\n當前長方形的面積是:"+str(length*breadth)
來看下我們之前的調用:
print(getRectangleArea(breadth=4,length=6))
?
結果:
內部的長度是:6? 內部的長度是4
當前長方形的面積是:24
再對比默認值的調用:
#這里沒傳寬度breadth,但會按照默認2參與面積的計算即5*2=10
print(getRectangleArea(length=5))
結果:
內部的長度是:5? 內部的長度是2
當前長方形的面積是10
注:函數默認值定義有一個注意的地方:
如果一個函數的參數列表里有一個參數指定了默認值,那么它后面的參數必須得指定默認值。
比如;我們指定了長度的默認值是4,但是沒有指定寬度的默認值。
defgetRectangleArea(length=4,breadth):
??? return "內部的長度是:"+str(length)+"\t內部的長度是"+str(breadth)+"\n當前長方形的面積是"+str(length*breadth)
?
那么我們調用時會報沒有指定默認值的錯,這是python的一個規定,大家要緊記。
print(getRectangleArea(length=5))
結果:
SyntaxError:non-default argument follows default argumentault argument
6.3.4?不定長參數
以上的函數參數都是我們在函數定義時指定好的,也就是說參數的多少是固定的。如果有一個需求:靈活的給函數傳遞參數,換句話說函數的參數不固定。怎么做到呢?我們可以通過在參數前加個*來代表參數是可變的。還是趕緊上代碼吧:
這里假設有個抽象的方法可以計算“多邊形面積”的公式即是不定的參數的乘積。類似數學里的階乘的概念。
?
defgetPolygonArea(area,*vars):
??? for var in vars:
??????? area*=var???
return "多邊形的面積/體積是:"+str(area);
?
那么我們用這個函數計算長方形的面積時可以這樣調用:
print(getPolygonArea(1,10,2))
結果:
多邊形的面積/體積是:20
?
計算長方體的體積時以這樣調用:
print(getPolygonArea(1,10,2,4))
結果:
多邊形的面積/體積是:80
6.4?變量的作用域
6.4.1?全局變量
在函數外定義的變量一般叫做全局變量,它不會隨函數的調用而改變。
6.4.2?局部變量
在函數內定義的變量一般叫做局部變量,它的生命周期僅限于函數內。
6.5?總結
本章我們學習了很多關于函數的基礎知識,這里有函數的定義、函數的參數聲明方式,變量的作用域等,當然一些函數的高級部分并沒有涉及,但這些足以滿足我們的基本使用。
總結
以上是生活随笔為你收集整理的Python基础概念_5_函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虽然美国印钞,但是中国无须印钞
- 下一篇: 鸿星尔克遭网友取关 每天流失上万粉丝