Python 常見用法(一)
-
一:列表推導(dǎo)
顧名思義就是通過一個列表推導(dǎo)出另外一個
#-*- coding:utf-8 -*-
import time
__author__ = 'Administrator'
#"常用列表賦值"
number = range(100000000)
evens = []
i = 0;
begin = time.time()
while i < len(number):
if i % 2 == 0:
evens.append(i)
i = i + 1;
end = time.time()
print("耗時為",end-begin)
#"推導(dǎo)公式賦值"
begin = time.time()
evens = [i for i in range(100000000) if i % 2 ==0]
end = time.time()
print("耗時為",end-begin)
#"結(jié)果分別為: 耗時為 35.95461106300354"
#" 耗時為 13.877903461456299"
#還有一種常見的情況 enumerate內(nèi)建函數(shù)函數(shù)
i = 0
seq = ["one","two","three","four"]
for element in seq:
seq[i] = '%d:%s' %(i,seq[i])
seq = ["one","two","three","four"]
for i,element in enumerate(seq):
seq[i] = '%d:%s' %(i,seq[i])
第一種在其他語言中使用這樣賦值會比較常見虑省,但是Python使用這種賦值語句執(zhí)行速度會比較慢,因為通過這種方式解釋程序必須通過一個計數(shù)器跟蹤列處理列表的修改,第二種效率更高同時更加簡練涉及到的變量更少,缺陷自然減少。
-
二: 迭代器
1 . 通過 iter() 內(nèi)建函數(shù)構(gòu)建
2 . __next__() 函數(shù)取值(python2 使用的是 next()函數(shù))
line = "helloworld"
itertable = iter(line)
num = 0;
while True:
try:
#num = num+1; 放這里num輸出 11
print(itertable.__next__())
num = num+1; #這里num輸出 10
except StopIteration:
break
print(num)
itertool 是一個用C語言寫的迭代器模塊避咆,據(jù)說是最高效的迭代器汪厨。
-
三: 生成器
1 . 基于 yield 返回的也是一個迭代器 (個人理解yield相當于一個列表緩沖區(qū)暫存數(shù)據(jù),處理完之后返回結(jié)果) 常用在 將返回一個序列作為循環(huán)時
def function():
a,b = 0,1
while b < 100:
yield b
a,b = b,a+b
fib = function()
while True:
try:
print(fib.__next__())
num = num+1;
except StopIteration:
break
[print(function.)]
print(num)
iter = (x**2 for x in range(10) if x % 2 ==0 )
# "這種方式生成的也是一個迭代器"
-
四:裝飾器
- 裝飾函數(shù)
裝飾器使得函數(shù)和方法的封裝(接收一個函數(shù)返回另一個功能強大的函數(shù))
def mydecorator(args): #裝飾器函數(shù)的參數(shù) 可以不要
def mydecorator(func): #裝飾器自身實現(xiàn) 必須要的
def _mydecorator(*arg,**kwargs): ##處理參數(shù)静秆,相當于再嵌套一層參數(shù)傳遞的函數(shù) 這是固定結(jié)構(gòu)
def wrapper(): #包裝器
## 在調(diào)用時實際數(shù)是做一些填充工作 常常用來檢測一個函數(shù)的執(zhí)行時間
print(func.__name__+" 函數(shù) begin 時間為:" + str(time.time())+"mydecorator 的參數(shù) " + args)
func(*arg,**kwargs)
print(func.__name__+" 函數(shù)end 時間為: " + str(time.time()) +"mydecorator 的參數(shù) " + args)
return func
wrapper()
return _mydecorator
return mydecorator
@mydecorator("mycanshu") ## 這是一種比較實用的方式不改變函數(shù)的內(nèi)在結(jié)構(gòu)把功能加上去 等價于 myfun = mydecorator(myfun) 其中 mycanshu 是裝飾器的參數(shù)
def myfunc(x,y):
time.sleep(3)
print(1+2+x+y)
myfunc(3,4)
輸出
# "myfunc 函數(shù) begin 時間為:1501228594.8052733mydecorator 的參數(shù) mycanshu"
# "10"
# "myfunc 函數(shù)end 時間為: 1501228597.8063107mydecorator 的參數(shù) mycanshu"
- 裝飾類
類裝飾和函數(shù)裝飾類似
class test_deco:
def __init__(self):
print("調(diào)用構(gòu)造函數(shù)")
@staticmethod ##靜態(tài)方法
def show_function():
print("這是靜態(tài)的請求方法")
@staticmethod
def out__function():
print("這是靜態(tài)的解鎖方法")
def mydecorator(cls,myfun_arg):
print(cls.__name__,myfun_arg) #這里輸出的是test_deco myfun_arg
def __mydecorator(func):
print(func.__name__) #這里輸出的是myfun
def __mydecorator(*arg,**kwargs):
print(arg) 這里輸出的時(1,2)
def wrapper():
print("這里")
print(func.__name__+" 函數(shù) begin 時間為:" + str(time.time())+" mydecorator 的參數(shù) " + myfun_arg )
cls.show_function()
func(*arg,**kwargs)
cls.show_function()
print(func.__name__+" 函數(shù)end 時間為: " + str(time.time()) +"mydecorator 的參數(shù) " + myfun_arg)
wrapper()
#分別輸出
'''
這里
myfun 函數(shù) begin 時間為:1501230826.2434075 mydecorator 的參數(shù) myfun_arg
這是靜態(tài)的請求方法
myfun() show 2
這是靜態(tài)的請求方法
myfun 函數(shù)end 時間為: 1501230829.2444615mydecorator 的參數(shù) myfun_arg
'''
return __mydecorator
return __mydecorator
@mydecorator(test_deco,"myfun_arg")
def myfun(x,y):
time.sleep(3)
print("myfun() show",x*y)
myfun(1,2)