Python函數進階

來源:互聯網
上載者:User

標籤:ret   模組   開始   lambda   lex   oca   注意   glob   一段   

函數
定義:函數是將一組語句的集合通過一個名字(函數名)封裝起來,想要執行這個函數,只需要調用其函數名即可
特性:減少重複代碼;使程式變的可拓展;使程式變得易維護

函數參數
形式參數:只有在被調用時才分配記憶體單元,在調用結束時,即刻釋放所分配的記憶體單元;形參只在函數內部有效。函數調用結束返回主調用函數後不能在使用該變數

實參:可以是常量、變數、運算式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參,應預先賦值,輸入等方法使參數獲得確定值。

關鍵參數:指定了參數名的參數就叫關鍵參數(關鍵參數必須放在位置參數之後)

非固定關鍵字參數
def stu_register(name,age,*args): #*args會把多傳入的的參數變成一個元組形式,如果*args沒有傳值,會返回一個空元組
print(name,age,args)
stu_rigister("xfxing",22)

def stu_register(name,age,*args,*kwargs):#*kwargs會把多傳入的的參數變成一個字典(dict)形式,如果*kwargs沒有傳值,會返回一個空字典
print(name,age,args)
stu_rigister("xfxing",22)


函數傳回值
函數外部的代碼想要擷取函數的執行結果,就可以在函數裡用return語句把結果返回
注意:函數在執行過程中只要遇到return語句,就會停止執行並返回結果
如果未在函數中指定return,這個函數傳回值為None


局部變數 不用傳值到函數裡,也可以在函數裡調用外面的變數
1.在函數中定義的變數稱為局部變數,在程式的一開始定義的變數稱為全域變數
2.全域變數範圍是整個程式,局部變數範圍是定義該變數的函數
3.當全域變數與局部變數同名是,在定義局部變數的函數內,局部變數起作用,在其他地方全域變數起作用

在函數內修改全域變數,可先聲明要修改的全域變數 然後再去修改它(應從實際開發角度去考慮)
name="alex"
def change_name():
global name
name="xfxing"
print(name,id(name))

change_name()
print(name,id(name))


在函數裡修改列表資料
names=[‘Alex‘,‘Rain‘,‘Girl‘]
def change_name():
del names[2]
names[1]="黑姑娘"
print(names)

change_names()
print(names)

重新賦值不可以,修改列表裡的值可以,整體的記憶體位址不能改,裡面的某個元素可以修改

 

範圍(scope)
通常來說,一段程式碼中所用到的名字並不總是有效/可用的,而限定這個名字的可用性的代碼範圍就是這個名字的範圍。

在Python中函數就是一個範圍(JavaScript類似),局部變數放置在其範圍中
代碼定義完成後,範圍已經產生,範圍鏈向上尋找

範圍的尋找順序:LEGB(locals->enclosing function->globals->__builtins__)
locals是函數內的名字空間,包括局部變數和形參
enclosing外部嵌套的名字空間
globals全域變數,函數定義所在模組的名字空間
builtins內建模組的名字空間


嵌套函數(在函數中嵌套函數)
不能直接調用內層嵌套的函數

1.函數內部可以再次定義函數
2.執行需要被調用

 

 

匿名函數
就是不需要顯示的指定函數名
func=lambda x,y:x*y if x<y else x/y #申明一個匿名函數
print(func(8,16))

f=lambda x:x**x

 

高階函數
變數可以指向函數,函數的參數能接收變數,那麼一個函數就可以接收另一個函數作為參數,這種函數稱之為高階函數

只需滿足以下任意一個條件,即是高階函數
1.接受一個或多個函數作為輸入
2.return返回另外一個函數

遞迴
在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞迴函式

遞迴特性:
1.必須要有一個明確的結束條件
2.每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
3.遞迴效率不高,遞迴層次過多會導致棧溢出(在電腦中,函數調用是通過棧(stack)這種資料結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以遞迴調用的次數過多,會導致棧溢出)

Python函數進階

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.