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