標籤:www follow doc map highlight 理解 分配 try running
Day3 - Python基礎3 函數、遞迴、內建函數1. 函數基本文法及特性
定義:將一組語句的集合通過一個名字(函數名)封裝起來,當執行該函數時,只需調用該函數名即可
特性:
1.避免重複代碼
2.增強程式可擴充性
3.代碼容易維護
2. 參數與局部變數
形參變數只有被調用時才會分配記憶體單元,在調用結束後,記憶體單元即刻被釋放。因此,形參只在函數內部有效,當函數調用返回主調用函數時,形參的變數將不再可用
實參變數可以是常量、變數、運算式、函數等,無論實參是何種類型的量,當函數調用時,傳給形參時都必須是確定的值。因此應預先使用賦值、輸入等方法,使形參獲得確定值
局部變數:函數內定義的變數,只在函數運行時起作用,運行結束後自動釋放
預設參數:
def stuffs(name,age,country=‘CN‘): print("姓名:%s"%name) print("年齡:%d" % age) print("國家:%s" % country)stuffs(‘sam‘,18)
非固定參數:
#*args會把多傳的參數變成一個元組>>> def stuffs(name,age,*args):... print(name,age,args)...>>> stuffs(‘sam‘,18,‘football‘,‘Movie‘,‘Python‘)sam 18 (‘football‘, ‘Movie‘, ‘Python‘)>>>#**kwargs會把多傳的參數變成一個字典>>> def stuffs(name,age,*args,**kwargs):... print(name,age,args,kwargs)...>>> stuffs(‘sam‘,18,‘CN‘,‘python‘,sex=‘man‘,hobby=‘running‘)sam 18 (‘CN‘, ‘python‘) {‘hobby‘: ‘running‘, ‘sex‘: ‘man‘}>>>
關鍵參數:
關鍵參數必須在位置參數之後
>>> def stuffs(name,age,country=‘CN‘):... print("姓名:%s"%name)... print("年齡:%d" % age)... print("國家:%s" % country)...>>>>>> stuffs(country=‘USA‘,‘sam‘,18) #關鍵參數在位參前面,導致報錯 File "<stdin>", line 1SyntaxError: positional argument follows keyword argument>>> stuffs(‘sam‘,18,country=‘USA‘) #關鍵參數的位參之後正常姓名:sam年齡:18國家:USA>>>
全域和局部變數:
在子程式定義的變數叫局部變數,在程式一開始就定義的變數叫全域變數
局部變數範圍是定義該變數的子程式,全域變數範圍是整個程式
當二者同名時,在定義局部變數的子程式中局部變數起作用,其它地方全域變數起作用
3. 傳回值
要想擷取執行結果,就可以用return把結果返回
- 函數執行過程中,只要遇到return語句時就會停止執行並返回結果,可以理解為return就是函數的結束
- 函數如未設定return,則預設傳回值為None
嵌套函數
函數內再套用函數
name = ‘sam‘def change_name(): name = ‘sam2‘ def change_name2(): name = ‘sam3‘ print("第3層列印",name) change_name2() #調用內層函數 print(‘第2層列印‘,name)change_name()print(‘第1層列印‘,name)
4.遞迴
如果一個函數在內部調用自身本身,這就叫遞迴函式
特性:
1.要有明確的結束條件
2.每當進入深一層次的遞迴時,問題規模相對上次都要有所減少
3.遞迴效率不高,遞迴層次過多可能導致棧溢出
5.匿名函數
不需要顯示的指定函數 ,和其它函數搭配使用
>>> calc = lambda n:n**n
>>> print(calc(10))
10000000000
#和其它函數配合使用
>>> res = map(lambda n:n**3,[1,2,3,4])>>> res<map object at 0x0000000000DEDCF8>>>> for i in res:... print(i)...182764
6.函數式編程介紹
函數是Python內建支援的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函數就是面向過程的程式設計的基本單元。
函數式編程中的函數這個術語不是指電腦中的函數(實際上是Subroutine),而是指數學中的函數,即自變數的映射。也就是說一個函數的值僅決定於函數參數的值,不依賴其他狀態。比如sqrt(x)Function Computex的平方根,只要x不變,不論什麼時候調用,調用幾次,值都是不變的。
一、定義
簡單說,"函數式編程"是一種"編程範式"(programming paradigm),也就是如何編寫程式的方法論。主要思想是把運算過程盡量寫成一系列嵌套的函數調用。
7.高階函數
變數可以指向函數,函數的參數能接受變數,那麼一個函數就可以接受另一個函數作為參數,這種函數稱為高階函數
1 >>> def add(x,y,f):2 ... return f(x) + f(y)3 ...4 >>> res = add(3,-6,abs)5 >>> print(res)6 9
8.內建函數
內建參數詳解 https://docs.python.org/3/library/functions.html?highlight=built#ascii
Day3 - Python基礎3 函數、遞迴、內建函數