python學習筆記(二)
- 斐波納契數列:兩個元素的總和確定了下一個數
a,b = 0,1
while b<=100:
print(b,end=',')
a,b = b,a+b
- if語句
#Python中沒有switch – case語句
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
- 循壞語句
#else是判斷條件False時執行,可以沒有,break跳出循壞體,countine退出當前循環,進入下一次循環
#python沒有do...while循環
while 判斷條件:
語句
else:
語句
#如果while循環體中只有一條語句,可以簡寫
while(判斷條件):print("heihei")
##################
for <variable> in <sequence>:
<statements>
else:
<statements>
- range()
#生成數列
range(5) # 0,1,2,3,4
range(5,9) # 5,6,7,8
range(0,10,3) # 0,3,6,9 指定步長
range(-10, -100, -30) # -10,-40,-70
#結合range()和len()函數以遍歷一個序列的索引
for i in range(len(list))
#range()創建列表
list(range(5)) # [0,1,2,3,4]
-
pass語句
pass是空語句,是爲了保持程序結構的完整性。 -
迭代器
迭代器是一個可以記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next(),分別用於創建迭代器對象和訪問迭代器下一個元素。
字符串,列表或元組對象都可用於創建迭代器。
把一個類作爲一個迭代器使用需要在類中實現兩個方法__iter__() 與__next__()
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration #循環結束後,觸發 StopIteration 異常,結束迭代。
myclass = MyNumbers() #類的實例
myiter = iter(myclass) #類作爲迭代器
for x in myiter:
print(x)
-
構造方法__init__()
在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self, 且爲第一個參數,self 代表的是類的實例
__private_attrs:兩個下劃線開頭,聲明該屬性爲私有,不能在類的外部被使用或直接訪問。
__private_method:兩個下劃線開頭,聲明該方法爲私有方法,只能在類的內部調用 ,不能在類地外部調用。
總結:實例不能訪問私有屬性或方法! -
生成器
在 Python 中,使用了 yield 的函數被稱爲生成器(generator)。生成器是一個返回迭代器的函數,只能用於迭代操作。
import sys
def fibonacci(n): # 生成器函數 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ") #調用f的next()方法
except StopIteration:
sys.exit()
- 函數
函數參數傳遞可變/不可變對象的區別:
傳可變參數,相當於值傳遞,函數內部對參數重新賦值,不會影響參數本身。不可變參數,相當於引用傳遞,指向對象的指針沒有變,所以對參數重新賦值,外部使用這個參數對值也會變。
return [表達式] 語句用於退出函數,不帶表達式的return語句返回None。
#參數形式分爲:必需參數、關鍵字參數、默認參數、不定長參數
#必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。
printinfo( age=50, name="runoob" ) #關鍵字參數,和順序無關
def printinfo( name, age = 35 ): #定義函數時默認參數值
def printinfo( arg1, *vartuple ): # *表示多餘對參數以元組形式導入,**表示以字典形式導入
def f(a,b,*,c): #定義函數時,*單獨出現,表示後面對參數必須以關鍵字參數導入
- 匿名函數
#使用 lambda 來創建匿名函數,不能訪問自己參數列表之外或全局命名空間裏的參數。
sum = lambda arg1, arg2: arg1 + arg2
- 變量作用域
Python 中只有模塊(module),類(class)以及函數(def、lambda)纔會引入新的作用域,也就是說除了以上,在其他代碼塊定義的變量,外部也可以訪問。
L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全局作用域
B (Built-in) 內建作用域
查找順序: L –> E –> G –>B
想要修改外部變量,使用**global(修改全局變量) 和 nonlocal(修改閉包函數外的函數中的變量)**關鍵字