問題: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...