python筆記 函式部分02

2021-10-08 03:15:07 字數 2652 閱讀 9225

python筆記 函式02

好記性不如爛筆頭,學習從摘抄開始!

特點:

1.可以訪問外部函式的變數

2.可以訪問和修改外部函式的可變型別的變數(listl,dict,set)

3.可以訪問外部函式的不可變(int str float,tuple)變數,但是不能修改;

4.修改全域性的不可變變數時,需要在內部函式宣告:global 變數名

5.修改外部函式的不可變的變數時,需要在內部函式中宣告:nonlocal 變數名

作用:簡化函式的定義,適用於簡單的函式

格式:lambda 引數1,引數2,…引數n:返回值

例子:

fun =

lambda a,b:a+b # fun被賦值為函式名

ans = fun(

'abc'

,'def'

)print

(ans)

結果:

abcdef
注意:

1.函式直接或者間接呼叫自身就是遞迴

2.遞迴函式中必須有兩個條件:基線條件,用來讓遞迴函式停止;遞迴條件,後面接遞迴的內容。

3.python有遞迴次數限制,預設最大次數為1000,解決方法歸次數限制如下:

import sys

sys.setrecursionlimit(

2000

)

例子:

def

sum1

(n):

if n ==1:

return n

else

:return n + sum1(n -1)

ans = sum1(

100)

print

('ans='

,ans)

結果:

ans=

5050

條件:

1.外部函式中定義內部函式,具有內部函式的全部特點

2.外部函式是的返回的值是:內部函式名

3.內部函式引用了外部函式的變數

格式:

def 外部函式名():

...def 內部函式名():

...return 內部函式名

例子:

def

fun():

b =200# 宣告內部函式

definner_f()

: c =

300print

('a+b+c='

, a + b + c)

return inner_f #返回內部函式名

a =100

x = fun(

)#x接收返回的函式名,即x()相當於inner_f()

x()

結果:

a+b+c=

600

總結

1.作用域沒有那麼直觀

2.閉包優化了變數,原來需要類物件完成的工作,閉包也可以完成

3.由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消耗記憶體

4.閉包是理解裝飾器的基礎

補充:

1.閉包可以實現類似c語言中類似的靜態變數的功能

2.可以做裝飾器修飾函式

例子:實現類似c語言中類似的靜態變數的功能

def

fun(m)

:#定義的普通函式

sum0 =

0 sum0 = sum0 + m

print

('sum0='

, sum0)

deffun1()

:#定義的內部函式,閉包,實現累加

sum1 =

0#類似c語言中靜態變數的宣告

definner_f

(m):

#內部函式使用外部函式定義的變數,

#變數具有類似c語言靜態變數的功能

nonlocal sum1

sum1 = sum1 + m

print

('sum1='

, sum1)

return inner_f

#普通函式

fun(10)

fun(20)

fun(30)

#閉包 ,變數sum1不會被釋放

f1= fun1(

)f1(10)

f1(20

)f1(

30)

結果:

sum0=

10sum0=

20sum0=

30sum1=

10sum1=

30sum1=

60

Python學習筆記02 匿名函式

用lambda關鍵字能建立小型匿名函式,其預設了用def宣告函式的標準步驟。如 func lambda x,y x y func 1,2 31.讓資料按指定順序排序 例 stu 如何讓資料按age或name排序?stu stu.sort key lambda x x age 按age排序 stu s...

Python 函式部分

1 區域性變數 區域性變數名只存在於函式這一區域性,這被稱之為變數的作用域 scope 所有變數的作用域是它們被定義的塊,從定義它們的名字的定義點開始。2 全域性變數 可以使用定義於函式之外的變數的值 假設函式中沒有具有相同名字的變數 如果之外有變數,則更改後覆蓋原值。3 預設引數值 使一些引數可選...

python 部分函式

abs number 返回數字的絕對值 cmath.sqrt number 返回平方根,也可以應用於負數 float object 把字串和數字轉換為浮點數 help 提供互動式幫助 input prompt 獲取使用者輸入 int object 把字串和數字轉換為整數 math.ceil numb...