a, b = 0, 1
while b < 10:
print(b) #print(b,end=',')
a, b = b, a+b
相當於
n=b
m=a+b
a=n
b=m
輸出:
1
1
2
3
5
8
#輸出:
1,1,2,3,5,8
關鍵字end可以用於將結果輸出到同一行,或者在輸出的末尾添加不同的字符!
條件控制:
- 1、每個條件後面要使用冒號 :,表示接下來是滿足條件後要執行的語句塊。
- 2、使用縮進來劃分語句塊,相同縮進數的語句在一起組成一個語句塊。
- 3、在Python中沒有switch – case語句。
循環:
for 實例中使用了 break 語句,break 語句用於跳出當前循環體:
continue語句,跳出本次循環,進行下一次循環;
range(初始值,終點值(取不到),步長)
迭代器
迭代是Python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是一個可以記住遍歷的位置的對象。
迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
字符串,列表或元組對象都可用於創建迭代器:
#!/usr/bin/python3
list=[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/python3
class MyClass:
"""一個簡單的類實例"""
i = 12345
def 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/python3
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 輸出結果:3.0 -4.5
self代表類的實例,而非類
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 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 = n
self.age = a
self.__weight = w
def 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 = n
self.age = a
self.__weight = w
def 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/python3
class MyClass:
"""一個簡單的類實例"""
i = 12345
def 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/python3
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.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。
#!/usr/bin/python3
# 計算面積函數
def area(width, height):
return width * height
def print_welcome(name):
print("Welcome", name)
print_welcome("Runoob")
w = 4
h = 5
print("width =", w, " height =", h, " area =", area(w, h))
以上實例輸出結果:
Welcome Runoob
width = 4 height = 5 area = 20
匿名函數
python 使用 lambda 來創建匿名函數。
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。
- lambda 只是一個表達式,函數體比 def 簡單很多。
- lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
- lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間裏的參數。
- 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。
#!/usr/bin/python3
# 可寫函數說明
sum = lambda arg1, arg2: arg1 + arg2
# 調用sum函數
print ("相加後的值爲 : ", sum( 10, 20 ))
print ("相加後的值爲 : ", sum( 20, 20 ))
以上實例輸出結果:
相加後的值爲 : 30
相加後的值爲 : 40
return語句
return [表達式] 語句用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。之前的例子都沒有示範如何返回數值,以下實例演示了 return 語句的用法:
#!/usr/bin/python3
# 可寫函數說明
def sum( arg1, arg2 ):
# 返回2個參數的和."
total = arg1 + arg2
print ("函數內 : ", 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/python3
total = 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,是一種二維表。 |
可由列表,字典創建
|
pandas | series | Series 是個定長的字典序列。Series有兩個基本屬性:index 和 values。 |
|
numpy | ndarray | list 的元素在系統內存中是分散存儲的,而 NumPy 數組存儲在一個均勻連續的內存塊中,方便遍歷;此外,numpy矩陣運算採用多線程方式,可以提升計算效率。 |
|