標籤:python 基礎 lte test 遞迴 通過 數學模型 全域變數 物件導向 擴充
前言:
編程的三種方式
- 物件導向:類 (class)
- 物件導向 : 過程 (def)
- 函數式編程: 函數 (def)
定義:函數 vs. 過程
在python中,函數是對程式邏輯進行結構化或過程化的一種編程方法。 函數式編程就是:先定義一個數學函數, 然後按照這個數學模型用程式設計語言來實現。
過程式的編程就是沒有傳回值的函數式編程。 見下列
def func1(): ‘the function discption - define a function‘ #文檔介紹,強烈推薦解釋function的邏輯 print(‘in the func1‘) return 0x=func1()print(‘from func1 return is %s‘ %x)
in the func1
from func1 return is 0
面向過程:定義一個過程,過程就是沒有傳回值的函數
def func2(): ‘define a process‘ print(‘in the func2‘) #定義一個過程,過程就是沒有傳回值的函數y=func2()print(‘from func2 return is %s‘ %y)
in the func2
from func2 return is None
函數的傳回值
| 返回的對象的數目 |
python實際返回的對象 |
| 0 |
None |
| 1 |
object (包括一個list,或者另外一個function) |
| >1 |
tuple |
- 設定傳回值的原因: 需要函數整個執行的結果,後面的程式需要根據這個執行結果來操作。
函數的作用:
1、可重複利用 2、使代碼保持一致 3、可擴充性
調用函數 - 參數
1. 關鍵字調用(與形參順序無關)及 標準位置調用 (與形參一一對應):關鍵參數不能寫在位置參數前面,混合使用時以位置調用為主
def test(x,y): # 形式參數,是虛擬變數。 print(x) print(y)test(1,2) # 標準位置調用方法test(y=3,x=2) # 關鍵字調用
2. 預設參數: 調用函數市,預設函數可有可無,非必傳。 用途主要在於預設安裝值,聯絡資料庫的連接埠號碼。
3. 參數組:通過一個元組*(非關鍵字參數)或字典**(關鍵字參數)作為參數組傳遞給函數。參數組一定要放最後。
def func(*args): print(args)func(1,3,4,3,67)func(*[1,3,4,3,67])
(1, 3, 4, 3, 67)
(1, 3, 4, 3, 67)
def func1(**kwargs): print(kwargs)func1(name=‘alex‘,age=‘8‘,sex=‘F‘) #必須以關鍵字參數的方式
{‘name‘: ‘alex‘, ‘age‘: ‘8‘, ‘sex‘: ‘F‘}
變數的範圍在子程式中定義的變數稱為
局部變數,在程式的一開始定義的變數稱為
全域變數。全域變數範圍是整個程式,局部變數範圍是定義該變數的子程式。當全域變數與局部變數同名時:在定義局部變數的子程式內,局部變數起作用;在其它地方全域變數起作用。 遞迴在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞迴函式。遞迴的特性1. 必須有一個明確的結束條件2. 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少3. 遞迴效率不高,遞迴層次過多會導致棧溢出(在電腦中,函數調用是通過棧(stack)這種資料結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴調用的次數過多,會導致棧溢出)
* 堆棧掃盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html
def calc(n): print(n) if int(n/2) >0: return calc(int(n/2)) print("->",n)calc(10) # 遞迴的次數最高為999次
函數式編程
函數是Python內建支援的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函數就是面向過程的程式設計的基本單元。
函數式編程中的函數這個術語不是指電腦中的函數(實際上是Subroutine),而是指數學中的函數,即自變數的映射。也就是說一個函數的值僅決定於函數參數的值,不依賴其他狀態。比如sqrt(x)Function Computex的平方根,只要x不變,不論什麼時候調用,調用幾次,值都是不變的。
Python對函數式編程提供部分支援。由於Python允許使用變數,因此,Python不是純函數式程式設計語言。函數式程式設計語言有erlang,hashhell等。lambda運算式和其他四種內建函數。 (待補充)
- 匿名函數與lambda
- 內建函數 - apply()
- 內建函數 - filter()
- 內建函數 - map()
- 內建函數 - reduce()
高階函數
Python 基礎 - Day 2 Learning Note - Function 函數