Python 迭代和函式

2021-09-26 23:47:15 字數 4658 閱讀 5823

問題:python中那些物件可以遍歷迴圈?

支援迭代協議的物件可以遍歷迴圈,這種物件的特點是內建了__next__方法,該方法可移動指標到下乙個關聯物件。

判斷是否內建next()方法,用iter()

// an highlighted block

list1=[1

,2,3

]list1==

iter

(list1)

false

str1=

'abc'

str1=

iter

(str1)

true

怎麼把列表變為迭代器

list1=iter(list1)

這樣後,list1就可以用next()方法了。

返回list或可迭代物件有什麼優劣勢

列表支援的操作型別比較多,相對比較靈活,但當資料量太大時,list儲存占用很大的記憶體,而迭代器占用記憶體較少,但很多方法不支援。

優點最大化**重用,最小化**冗餘,過程分解

變數作用域

built-in:python內建的變數

global:函式外層變數

local:函式體內層變數,若要引用外層的用global,當執行完函式時,記憶體釋放,所有的區域性變數要被刪除。

enclousure(封裝),函式巢狀裡的外層函式變數,若內層巢狀變數想用外層的,要用nonlocal

閉包:在內嵌函式中,內部作用域對外部作用域的變數(封裝)進行引用,那麼內部的內層函式稱閉包

內嵌函式:

def func()

: x=

100 def auc()

: x=

99print

(x)auc()

print

(x)99

100#外層的x=

100稱為enclousure

(封裝)

#auc

()為閉包

關鍵字引數

普通引數叫位置引數,程式設計師為避免弄錯位置引數的位置,引入關鍵字引數

def eatsomething

(name,food)

:print

('{} eat {}'

.format

(name,food)

)eatsomething

(food=

,name=

'xiaoming'

)

預設引數

def eatsomething(name=『orange』,food=『rice』):

收集引數

不知道函式中到底有幾個引數,呼叫時,除了關鍵字引數,剩餘全部引數*parameter會被打包成元組。

def eatsomething

(*parameter,name,food)

:print

('{} eat {}'

.format

(name,food)

)print

('收集引數為'

,parameter)

eatsomething(1

,2,,food=

,name=

'xiaoming'

)>>>

收集引數為(1

,2,)

雙星是指打包為字典表

def employ_information

(**employ)

:print

(employ)

employ_information

(name=

'tom'

,age=

24,salary=

20000

)

解包

def eatsomething

(*parameter,name,food)

:print

('{} eat {}'

.format

(name,food)

)print

('收集引數為'

,parameter)

#解包a=(1

,2,)

eatsomething

(*a,food=

,name=

'xiaoming'

)>>>

收集引數為(1

,2,)

def employ_information

(**employ)

:print

(employ)

dict1=

dict

(name=

'tom'

,age=

24,salary=

20000

)employ_information

(**dict1)

引數傳遞

a.不可變型別,建立新的副本變數,傳遞副本給函式,不影響原始值

b.可變型別,傳遞位址引用,函式內操作可能會影響原始值

#不可變型別(整型,元組,字串等)

hehe=

6def f

(hehe)

: hehe =

2print

(hehe)

f(hehhe)

print

(hehe)

>>>

2>>>

6#可變型別

l1=[

]def f1

(l1)

: l1[0]

=['a']

print

(l1)

f1(l1)

print

(l1)

>>>[[

'a']

]>>>[[

'a']

]

形參實參

形參:函式定義和建立過程小括號裡的實數。

實參:函式呼叫過程中傳遞進來的引數。

兩個工具

1.filter(函式,可迭代資料)

保留關注資訊,刪掉不想要資訊

對可迭代資料的每個元素都作為函式的引數操作,把函式返回值為true的留下。

l=

list

(range(1

,21))

def f

(num)

:return num%2==

0result=

list

(filter

(f,l)

)print

(result)[2

,4,6

,8,10

,12,14

,16,18

,20]

2. map(函式,可迭代資料)函式:對映

對可迭代資料的每個元素都作為函式的引數操作,並寫入返回值。

def f

(num)

:return num+

5result=

list

(map

(f,l)

)print

(result)[6

,7,8

,9,10

,11,12

,13,14

,15,16

,17,18

,19,20

,21,22

,23,24

,25]

lambda表示式

建立匿名函式

格式:lambda 引數1…:函式

功能:**簡潔,不需考慮命名問題,簡化**可讀性。

// an highlighted block

f=lambda x:x+

5result=f(

10)print

(result)

15

委託(明天查閱資料再修改)

優勢,某些情況下簡略了修改**的工作量

def chinese

(name)

:print

('你的名字是:'

,name)

hello=chinese #把函式位址委託給hello

hello

('tom'

)def hello

(function

,name)

:function

(name)

hello

(chinese,

'tom'

)

用字典表代替if elif舉例

用字典表代替if elif

operation=

while true:

name=

input

('please input your name'

)if name ==

'stop'

:break

language =

input

('please choose\n e=>english\n c=>chinese\nj=>japanese'

) operation.

get(language)

(name)

Python迭代和函式

迭代意味著重複多次,就像迴圈那樣。在python中只有支援迭代協議的物件才可以進行遍歷和迴圈。迭代協議支援 next 方法,用於指標式的讀取可迭代物件所包含的資訊。常用的迭代工具有 for 推導 map。迭代又分為迭代器物件和可迭代物件。迭代器是已經實現 next 的物件 如檔案 而可迭代物件使用i...

python迭代 Python迭代和生成

簡介在python中存在一種名叫迭代器的容器物件。顧名思義,這種物件能夠產生迭代的數值,在許多場合中,比如在機器學習領域,要從乙個迭代器裡不斷地提取樣本資料進行訓練。而生成器也是一種迭代器,因此在本文中將詳細介紹迭代器的知識。迭代器定義 迭代器也稱為游標,形象地理解為程式執行到 就在該處做個標記,下...

可迭代物件和迭代器以及偏函式(python)

一 在python中的可迭代物件 str list set tuple dict generator。二 迭代器 能夠被next呼叫,並且返回下乙個值的叫做迭代器 注意 迭代器一定是可迭代物件,但可迭代物件不一定是迭代器!上圖就是乙個迭代器 三 迭代器用到的模組以及其方法 模組 collection...