最近重新看了網上的python教程,補充學習了一些之前用的較少的用法
字典
注意字典中 key 是亂序的,也就是說和插入 的順序是不一致的。如果想要使用順序一致的字典,請使用 collections 模組 中的 ordereddict 物件
迭代器
python 中的 for 句法實際上實現了設計模式中的迭代器模式 ,所以我們自己也可以按照迭代器的要求自己生成迭代器物件,以便在 for 語句中使用。 只要類中實現了 __iter__ 和 next 函式,那麼物件就可以在 for 語句中使用。 現在建立 fibonacci 迭代器物件
# define a fib class
class fib(object):
def __init__(self, max):
self.max = max
self.n, self.a, self.b = 0, 0, 1
def __iter__(self):
return self
def __next__(self):
if self.n < self.max:
r = self.b
self.a, self.b = self.b, self.a + self.b
self.n = self.n + 1
return r
raise stopiteration()
# using fib object
for i in fib(5):
print(i)
生成器
除了使用迭代器以外,python 使用 yield 關鍵字也能實現類似迭代的效果,yield 語句每次 執行時,立即返回結果給上層呼叫者,而當前的狀態仍然保留,以便迭代器下一次迴圈呼叫。這樣做的 好處是在於節約硬體資源,在需要的時候才會執行,並且每次只執行一次
def fib(max):
a, b = 0, 1
while max:
r = b
a, b = b, a+b
max -= 1
yield r
# using generator
for i in fib(5):
print(i)
對字串的判斷
str為字串
關於python的指標
python沒有指標,但它也可以傳引用
淺拷貝和深拷貝
淺拷貝時,python只是拷貝了最外圍的物件本身,內部的元素都只是拷貝了乙個引用而已
深拷貝時,deepcopy對外圍和內部元素都進行了拷貝物件本身,而不是物件的引用
import copy
a = [1,2,3]
print(id(a))
b = [1,2,3] # or b = a
print(id(b))
c = copy.copy(a)
print(id(c))
d = copy.deepcopy(a)
print(id(d))
其他**如下
#平方運算
a = 3**2
print(a)
#range的間隔跳躍以及不換行輸出(自定義結尾)
for i in range(0,10,2):
print(i,end=' ')
a = input("\ngive me an interger: ")
# 判斷輸入 通過elif來多重判斷
if (a.isdigit()):
a = int(a)
if (a > 0):
print(">0")
elif (a < 0):
print("<0")
else:
print("0")
else:
print("no number!")
# 在函式裡面使用全域性變數
a = 10
def change():
global a
a = a-1
change()
print(a)
# 讀寫檔案
my_file = open('my_file.txt','w') #預設使用相對路徑,w會覆蓋之前的所有資料
text = "i am here"
my_file.write(text)
my_file.close()
my_file.write("\nthis is my second line")
my_file.close()
my_file = open('my_file.txt','r') #r->read
content = my_file.read()
print(content)
# 逐行讀取
for line in my_file.readlines():
print(line,end='')
# tuple list 之間的轉換
alist = [1,2,3,4,99]
atuple = ()
atuple = tuple(alist)
print(atuple)
alist2 =
alist2 = list(atuple)
print(alist2)
# 以下的remove和pop是等價的
alist.remove(99)
# alist.pop(4)
print(alist)
alist.sort(reverse=true)
print(alist)
import time
print("time now is "+str(time.localtime().tm_hour)+":"+str(time.localtime().tm_min)) #這樣就可以print 當地時間了
try:
file=open('eeee.txt','r+')
except exception as e:
print(e)
response = input('do you want to create a new file:')
if response=='y':
file=open('eeee.txt','w')
else:
pass
else:
file.write('ssss')
file.close()
a=[1,2,3]
b=[4,5,6]
ab=zip(a,b)
print(list(ab)) #需要加list來視覺化這個功能
for i,j in zip(a,b):
print(i/2,j*2)
fun= lambda x,y:x+y
x=int(input('x=')) #這裡要定義int整數,否則會預設為字串
y=int(input('y='))
print(fun(x,y))
Python高階語法
函式式 程式設計概念 要了解什麼是函式式程式設計 什麼是函式 這兩者的區別 高階函式的特點 能接收函式作為引數 注意 map 是 python 內建的高階函式,它接收乙個函式 f和乙個list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。reduce 函式也...
Python高階語法 函式
所謂函式就是乙個 塊,函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。二.匿名函式 三.map函式 四.reduce函式 五.filter函式 六.sort函式 七.幾種函式的舉例 def 函式名 引數 函式體 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數 傳的...
python 高階語法和除錯
zip 把兩個可迭代的內容生成乙個可迭代的tuple元素型別組成的內容 l1 1,2,3,4,5 l2 11,22,33,44,55 z zip l1,l2 print type z print z for i in z print i l1 dd ff zz l2 12,13,14 z zip l...