匿名函式
lamda表示式:
def add(x,y):
return x+y
等價於f = lamda x,y:x+y
f(1,2)
三元表示式:
wefx = 1
y = 2
c = x if x
map對映關係:
def square(x):
return x*x
list_x = [1,3,10]
list_r = map(square,list_x)
list_x = [1,3,10]
list_r = map( lamda x:x*x,list_x)
for x in list_x:
square(x)
map語句很快(可能for 迴圈那裡不是用的解釋性的語言,把它一次性存起來 編好了),但是有個明顯的問題,map格式轉成list格式的時間非常慢。可能for迴圈處理函式需要50ms,但是map語句只需要0.05ms,但是可能map轉list格式需要很久大概(20ms)
map操作物件不能用下標描述,'map' object is not subscriptable
但是map操作物件可以用for 迴圈迭代找到數值
時間測試:(比較list for 迴圈,map操作,numpy操作,torch tensor 操作,torch tensor cuda 操作)
f = lambda x : x*x*x
list_r = [i for i in range(1000000)]
print("device_count",torch.cuda.device_count())
t0 = time.time()
numpy_r = numpy.array(list_r)
t1 = time.time()
device = torch.device('cuda:0')
torch_r = torch.tensor(list_r)
torch_r = torch_r.to(device)
t2 = time.time()
torch_r = torch_r * torch_r *torch_r
t3 = time.time()
numpy_r = numpy_r *numpy_r*numpy_r
t4 = time.time()
list_res = map(f,list_r)
t5 = time.time()
print("t0:",(t1-t0)*1000)
print("t1:",(t2-t1)*1000)
print("t2:",(t3-t2)*1000)
print("t3:",(t4-t3)*1000)
print("t4:",(t5-t4)*1000)
##### result 使用 cuda
t0: 50.150156021118164
t1: 2310.8725547790527
t2: 0.3681182861328125
t3: 5.092620849609375
t4: 0.004291534423828125
### result 不使用 cuda
t0: 51.50794982910156
t1: 21.13056182861328
t2: 4.422187805175781
t3: 5.149364471435547
t4: 0.004291534423828125
cuda提高速度
Python 的 with 語法糖
python 內建了 sqlite3 模組,可以方便地呼叫 sqlite 資料庫。import sqlite3 conn sqlite3.connect test.db cur conn.cursor cur.execute create table students id bigint prima...
Python語法糖介紹
作為一門優秀的指令碼語言,python在語法層面提供了很多好玩又實用的語法,俗稱語法糖,正確的使用這些技巧能讓 看起來更優雅,更pythonic,這裡列舉幾個。usr bin env python3 defmain animals cat dog bird pig if dog in animals...
Python中語法糖及帶參語法糖
在python中,符號常被稱作語法糖 裝飾器 在某函式定義時,用以包裝該函式,以達到擷取,控制該函式的目的。def d f print d.k f 此處保留了傳進來的原函式 f def f x return k x 2 return f 此處不能寫成f x f是函式控制代碼,如果帶 則呼叫,這裡只返...