python编程-迭代器(类,方法,继承),函数,数据结构,
關(guān)鍵字end可以用于將結(jié)果輸出到同一行,或者在輸出的末尾添加不同的字符!
條件控制:
- 1、每個條件后面要使用冒號?:,表示接下來是滿足條件后要執(zhí)行的語句塊。
- 2、使用縮進來劃分語句塊,相同縮進數(shù)的語句在一起組成一個語句塊。
- 3、在Python中沒有switch – case語句。
循環(huán):
for 實例中使用了 break 語句,break 語句用于跳出當(dāng)前循環(huán)體:
continue語句,跳出本次循環(huán),進行下一次循環(huán);
range(初始值,終點值(取不到),步長)
?
迭代器
迭代是Python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是一個可以記住遍歷的位置的對象。
迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結(jié)束。迭代器只能往前不會后退。
迭代器有兩個基本的方法:iter()?和?next()。
字符串,列表或元組對象都可用于創(chuàng)建迭代器:
#!/usr/bin/python3list=[1,2,3,4] it = iter(list) # 創(chuàng)建迭代器對象 for x in it:print (x, end=" ")1 2 3 4創(chuàng)建一個迭代器
把一個類作為一個迭代器使用需要在類中實現(xiàn)兩個方法 __iter__() 與 __next__() 。
如果你已經(jīng)了解的面向?qū)ο缶幊?#xff0c;就知道類都有一個構(gòu)造函數(shù),Python 的構(gòu)造函數(shù)為 __init__(), 它會在對象初始化的時候執(zhí)行。
更多內(nèi)容查閱:Python3 面向?qū)ο?/p>
__iter__() 方法返回一個特殊的迭代器對象, 這個迭代器對象實現(xiàn)了 __next__() 方法并通過 StopIteration 異常標識迭代的完成。
__next__() 方法(Python 2 里是 next())會返回下一個迭代器對象。
創(chuàng)建一個返回數(shù)字的迭代器,初始值為 1,逐步遞增 1:
?
類實例化后,可以使用其屬性,實際上,創(chuàng)建一個類之后,可以通過類名訪問其屬性。
類對象支持兩種操作:屬性引用和實例化。
屬性引用使用和 Python 中所有的屬性引用一樣的標準語法:obj.name。
類對象創(chuàng)建后,類命名空間中所有的命名都是有效屬性名。所以如果類定義是這樣:
#!/usr/bin/python3class MyClass:"""一個簡單的類實例"""i = 12345def f(self):return 'hello world'# 實例化類 x = MyClass()# 訪問類的屬性和方法 print("MyClass 類的屬性 i 為:", x.i) print("MyClass 類的方法 f 輸出為:", x.f())MyClass 類的屬性 i 為: 12345 MyClass 類的方法 f 輸出為: hello world類有一個名為 __init__() 的特殊方法(構(gòu)造方法),該方法在類實例化時會自動調(diào)用,像下面這樣:
當(dāng)然, __init__() 方法可以有參數(shù),參數(shù)通過 __init__() 傳遞到類的實例化操作上。例如:
#!/usr/bin/python3class Complex:def __init__(self, realpart, imagpart):self.r = realpartself.i = imagpart x = Complex(3.0, -4.5) print(x.r, x.i) # 輸出結(jié)果:3.0 -4.5self代表類的實例,而非類
類的方法與普通的函數(shù)只有一個特別的區(qū)別——它們必須有一個額外的第一個參數(shù)名稱, 按照慣例它的名稱是 self。
class Test:def prt(self):print(self)print(self.__class__)t = Test() t.prt()#輸出 <__main__.Test object at 0x0000028E52F59B00> <class '__main__.Test'>類的方法
在類的內(nèi)部,使用?def?關(guān)鍵字來定義一個方法,與一般函數(shù)定義不同,類方法必須包含參數(shù) self, 且為第一個參數(shù),self 代表的是類的實例。后續(xù)再使用def關(guān)鍵字時,就可以使用_init_中的self,但你不可以在已經(jīng)定義的self外引用參數(shù)。更近一步,如果想要新加self參數(shù),可以用類的繼承!
實例(Python 3.0+) #!/usr/bin/python3#類定義 class people:#定義基本屬性name = ''age = 0#定義私有屬性,私有屬性在類外部無法直接進行訪問__weight = 0#定義構(gòu)造方法def __init__(self,n,a,w):self.name = nself.age = aself.__weight = wdef speak(self):print("%s 說: 我 %d 歲。" %(self.name,self.age))# 實例化類 p = people('runoob',10,30) p.speak()#輸出 runoob 說: 我 10 歲。繼承
繼承Python 同樣支持類的繼承,如果一種語言不支持繼承,類就沒有什么意義。
#!/usr/bin/python3#類定義 class people:#定義基本屬性name = ''age = 0#定義私有屬性,私有屬性在類外部無法直接進行訪問__weight = 0#定義構(gòu)造方法def __init__(self,n,a,w):self.name = nself.age = aself.__weight = wdef speak(self):print("%s 說: 我 %d 歲。" %(self.name,self.age))#單繼承示例 class student(people):grade = ''def __init__(self,n,a,w,g):#調(diào)用父類的構(gòu)函people.__init__(self,n,a,w)self.grade = g#覆寫父類的方法def speak(self):print("%s 說: 我 %d 歲了,我在讀 %d 年級"%(self.name,self.age,self.grade))s = student('ken',10,60,3) s.speak() 執(zhí)行以上程序輸出結(jié)果為:ken 說: 我 10 歲了,我在讀 3 年級更多關(guān)于類的說明,點擊直達
總結(jié):
#!/usr/bin/python3class MyClass:"""一個簡單的類實例"""i = 12345def f(self):return 'hello world'# 實例化類 x = MyClass()# 訪問類的屬性和方法 print("MyClass 類的屬性 i 為:", x.i) print("MyClass 類的方法 f 輸出為:", x.f())MyClass 類的屬性 i 為: 12345 MyClass 類的方法 f 輸出為: hello world------------------------------------------------------------------- 類有一個名為 __init__() 的特殊方法(構(gòu)造方法),該方法在類實例化時會自動調(diào)用, #!/usr/bin/python3class Complex:def __init__(self, realpart, imagpart):self.r = realpartself.i = imagpart x = Complex(3.0, -4.5) print(x.r, x.i) # 輸出結(jié)果:3.0 -4.5---------------------------------- #單繼承示例 class student(MyClass):grade = ''def __init__(self,n,a,w,g):#調(diào)用父類的構(gòu)函MyClass.__init__(self,n,a,w)self.grade = g#覆寫父類的方法def speak(self):print("%s 說: 我 %d 歲了,我在讀 %d 年級"%(self.name,self.age,self.grade))s = student('ken',10,60,3) s.speak() 執(zhí)行以上程序輸出結(jié)果為:ken 說: 我 10 歲了,我在讀 3 年級函數(shù)
定義一個函數(shù)
你可以定義一個由自己想要功能的函數(shù),以下是簡單的規(guī)則:
- 函數(shù)代碼塊以?def?關(guān)鍵詞開頭,后接函數(shù)標識符名稱和圓括號?()。
- 任何傳入?yún)?shù)和自變量必須放在圓括號中間,圓括號之間可以用于定義參數(shù)。
- 函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。
- 函數(shù)內(nèi)容以冒號起始,并且縮進。
- return [表達式]?結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達式的return相當(dāng)于返回 None。
匿名函數(shù)
python 使用 lambda 來創(chuàng)建匿名函數(shù)。
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數(shù)。
- lambda 只是一個表達式,函數(shù)體比 def 簡單很多。
- lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
- lambda 函數(shù)擁有自己的命名空間,且不能訪問自己參數(shù)列表之外或全局命名空間里的參數(shù)。
- 雖然lambda函數(shù)看起來只能寫一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時不占用棧內(nèi)存從而增加運行效率。
return語句
return [表達式]?語句用于退出函數(shù),選擇性地向調(diào)用方返回一個表達式。不帶參數(shù)值的return語句返回None。之前的例子都沒有示范如何返回數(shù)值,以下實例演示了 return 語句的用法:
#!/usr/bin/python3# 可寫函數(shù)說明 def sum( arg1, arg2 ):# 返回2個參數(shù)的和."total = arg1 + arg2print ("函數(shù)內(nèi) : ", total)return total# 調(diào)用sum函數(shù) total = sum( 10, 20 ) print ("函數(shù)外 : ", total) 以上實例輸出結(jié)果:函數(shù)內(nèi) : 30 函數(shù)外 : 30變量作用域
Python 中,程序的變量并不是在哪個位置都可以訪問的,訪問權(quán)限決定于這個變量是在哪里賦值的。
變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python的作用域一共有4種,分別是:
- L (Local) 局部作用域
- E (Enclosing) 閉包函數(shù)外的函數(shù)中
- G (Global) 全局作用域
- B (Built-in) 內(nèi)置作用域(內(nèi)置函數(shù)所在模塊的范圍)
以 L –> E –> G –>B 的規(guī)則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內(nèi)置中找。
g_count = 0 # 全局作用域 def outer():o_count = 1 # 閉包函數(shù)外的函數(shù)中def inner():i_count = 2 # 局部作用域調(diào)用函數(shù)使用的是函數(shù)內(nèi)部的局部變量,未調(diào)用函數(shù),使用的是全局變量!
?
#!/usr/bin/python3total = 0 # 這是一個全局變量 # 可寫函數(shù)說明 def sum( arg1, arg2 ):#返回2個參數(shù)的和."total = arg1 + arg2 # total在這里是局部變量.print ("函數(shù)內(nèi)是局部變量 : ", total)return total#調(diào)用sum函數(shù) print ("函數(shù)外是全局變量 : ", total) sum( 10, 20 )輸出 函數(shù)外是全局變量 : 0 函數(shù)內(nèi)是局部變量 : 30更多關(guān)于函數(shù)內(nèi)容,點擊
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)是編程的基礎(chǔ),必須熟練掌握!
| ? | ? | 特征 | 常見用法 |
| 不可變數(shù)據(jù) | 數(shù)字=123 | 用于計算,沒有索引;注意優(yōu)先級(**》*/》not》and》or) | >>> 17 % 3 # 取余? 2 |
| 字符串='' | Python 字符串不能被改變,可以添加索引 常用用法:+字符串,*2復(fù)制2遍 | a='string' a[0]='c' #非法 print(a[0]) #合法 print (a?* 2) ? ? ?# 輸出字符串兩次 | |
| 元組=() | 元組(tuple)與列表類似,不同之處在于元組的元素不能修改。 | tup1 = () ? ?# 空元組 tup2 = (20,) # 一個元素,需要在元素后添加逗號 | |
| 可變數(shù)據(jù) | 列表=[] | 可以被索引,可以更改(不同于字符串),列表中元素的類型可以不相同,+,*依舊有效; | >>>a = [1, 2, 3, 4, 5, 6] >>>del a[2] #刪除列表元素 |
| 字典={} | 字典是無序的對象集合,不能通過索引,但可以通過鍵找值(鍵唯一);構(gòu)造字典方法很多; | b={'adf':'www','eee':123} a={} #構(gòu)造空字典 | |
| 集合={} | 集合區(qū)分其它數(shù)據(jù)類型很大一個特點就是:集合可以進行交集,差集,補集的運算。創(chuàng)建一個空集合必須用?set()?而不是?{ },因為?{ }?是用來創(chuàng)建一個空字典。 | # set可以進行集合運算 {'b', 'a', 'c', 'r', 'd'}#用{}拆分后表示 | |
| 數(shù)據(jù)類型轉(zhuǎn)換 | list() | list() 方法用于將元組,字符串,字典,集合轉(zhuǎn)換為列表 其中,字符串轉(zhuǎn)換成列表,是將字符串中的每個字符轉(zhuǎn)換成列表的一個元素。 | aTuple = (123, 'Google') 列表元素 : ?[123, 'Google'] |
| tuple() | tuple()將列表,字符串,字典,集合轉(zhuǎn)換為元組;字符串都被單一拆分開來了; | list1= ['Google', 'Taobao'] ('Google', 'Taobao') | |
| pandas | DataFrame | DataFrame是Python中Pandas庫中的一種數(shù)據(jù)結(jié)構(gòu),它類似excel,是一種二維表。 | 可由列表,字典創(chuàng)建 import pandas as pd from pandas import Series, DataFrame data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]} df1= DataFrame(data) df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])? ? |
| pandas | series | Series 是個定長的字典序列。Series有兩個基本屬性:index 和 values。 | import pandas as pd from pandas import Series, DataFrame x1 = Series([1,2,3,4]) x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd']) |
| numpy | ndarray | list 的元素在系統(tǒng)內(nèi)存中是分散存儲的,而 NumPy 數(shù)組存儲在一個均勻連續(xù)的內(nèi)存塊中,方便遍歷;此外,numpy矩陣運算采用多線程方式,可以提升計算效率。 | import numpy as np a = np.array([1, 2, 3]) b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])a是一維數(shù)組,b是二維數(shù)組! |
總結(jié)
以上是生活随笔為你收集整理的python编程-迭代器(类,方法,继承),函数,数据结构,的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 朴素贝叶斯分类实战:对文档进行分类
- 下一篇: python数据结构练习