python函式作用域 迭代器與生成器知識點整理

2021-08-14 02:14:49 字數 3096 閱讀 3696

變數作用域:

全域性變數與區域性變數的作用域不同

生命週期不同

全域性變數

g_a=10

deftest1():

globalg_a   告訴程式這裡是全域性變數

g_a=20

print(g_a)

deftest2():

print(g_a)

test1()

當全域性變數和區域性變數同名時,區域性變數優先

區域性變數

deftest1():

g_a=20

print(g_a)

test1()

匿名函式:

python使用

lambda

來建立匿名函式

語法:lambda[arg1[arg2.......argn]]:expression

可寫函式說明

sum=lambda arg1,arg2:arg1+arg2;

呼叫sum函式

print」相加後的值為:」,sum(10,20)

sum=lambdaarg1,arg2:arg1+arg2;

print(sum(10,20))

也可以傳乙個引數

defadd(a,b,fun):

print(fun(a,b))

add(22,22,lambdaarg1,arg2:arg1+arg2 )

三個重要的大資料用到的函式:

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]

>>> printfilter(lambda x: x % 3 == 0, foo)

[18, 9, 24, 12, 27]

>>> printmap(lambda x: x * 2 + 10, foo)

[14, 46, 28, 54, 44, 58, 26, 34, 64]

>>> printreduce(lambda x, y: x + y, foo)

139

filter():對於列表中的元素進行篩選,最終獲取符合條件的序列

python內建了求和函式

sum(),

但沒有求積德函式,請利用

reduce()

來求積

fromfunctoolsimportreduce  匯入reduce()函式

排序:sorted

內建的sorted()函式可對

list

進行排序

sorelist=[12,85,47,2,63,77]

print(sorted(sorelist))   從小到大正序

print(sorted(sorelist,reverse=true))從大到小倒序

對字串排序時,有時候忽略大小排序更符合習慣。請利用sorted()高階函式,實現忽略大小寫排序的演算法

a=['as','sa','ssd','zlo']

print(sorted(a,key=str.lower))

sorted()也是乙個高階函式,它可以接收乙個比較函式來實現自定義排序,

產生隨機數的方法:

迭代器協議

迭代器是訪問集合內元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素都被訪問一遍後結束。

迭代器協議:物件需要提供next()方法,它要麼返回下乙個物件,要麼引起乙個

stoplteration異常

可迭代物件:實現了迭代器協議的物件

for,max,min,sum,等使用迭代器協議訪問物件

構建迭代器的時候,以一種延遲計算(lazyevaluation)方式返回元素,這正是它的優點。比如列表中含有一千萬個整數,需要佔超過

400m

的記憶體但迭代器之需要幾十個位元組的空間。因為它並沒有把所有元素裝載到記憶體中,而是等到呼叫

next

方法時才返回該元素

(按需呼叫

call by need

的方式,本質上

for迴圈就是不斷呼叫迭代器的

next方法)

生成器python使用生成器對延遲操作提供了支援

所謂延遲操作,是指在需要的時候才產生結果,而不是立即產生結果。這也是生成器的主要好處。

python有兩種不同的方式提供生成器

1.生成器函式:常規函式定義

,但是,使用

yield

語句而不是

return

語句返回結返回乙個結果,在每個結果中間,掛起函式的狀態,以便下次重它離開的地方繼續執行果。

yield

語句一次

2.生成器表示式:類似於列表推導,但是,生成器返回按需產生結果的乙個物件,而不是一次構建乙個結果列表

用生成器返回自然數平方

defpf(n):

foriinrange(n):

yieldi**2

forjinpf(5):

print(j,end=" ")

生成器的好處是延遲計算,一次返回乙個結果。也就是說,它不會一次生成所有的結果,這對於大資料量處理,將會非常有用

sum([i for i in xrange(10000000000)])

sum(i for i in xrange(10000000000))

對於前乙個表示式還沒有看到最終結果電腦就已經卡死,對於後乙個表示式,幾乎沒有什麼記憶體占用。

生成器只能遍歷一次

Python 函式作用域

python中變數作用域分4種情況 x max 1,6 max為系統變數,它的作用域為python的所有模組 y 1 y為全域性變數,它的作用域為當前模組 defouter i 3 i的作用域為當前函式,包括巢狀函式 definner count 2 count為區域性變數,作用域只在當前函式有效函...

函式與作用域

函式宣告 function add a,b return a b 函式表示式 function variable 函式變數 varadd function a,b ief immediately excuted function 立即執行函式 function first class functio...

塊級作用域與函式作用域

函式作用域 變數在定義的環境中以及巢狀的子函式中處處可見 塊級作用域 變數在離開定義的塊級 後立即被 在es6之前,js的作用域只有兩種 函式作用域和全域性作用域。使用var宣告的變數,都存在變數提公升的過程。console.log a undefined console.log c undefin...