昨今兩天把python高階程式設計過了遍,程式語言通用的部分都比較熟悉了,就跳過了。總結下:
1、列表推導
def _treatment(pos,element):
return '%d, %s' %(pos,element)
#列表推導
print([i for i in range(0,10,1) if i%2==0])
seq = ["one","two","three"]
print([_treatment(pos,element) for pos,element in enumerate(seq)])
2、生成器
def fibonacci():
a,b=0,1
while true:
yield b
a,b = b,a+b
#生成器
#當需要乙個將返回乙個序列或者在迴圈中執行的函式時,就應該考慮生成器,
#當這些元素將被傳遞到另乙個函式中以進行後續處理時,一次返回乙個元素以提高整體效能
fib = fibonacci()
print([fib.__next__() for i in range(10)])
3、生成器表示式
#生成器表示式
print("generator expression")
iter = (x**2 for x in range(10) if x%2==0)
for el in iter:
print(el)
4、迭代器
class myiterator(object):
def __init__(self,step):
self.step = step
def __next__(self):
if self.step==0:
raise stopiteration
self.step = self.step-1
return self.step
def __iter__(self):
return self
for el in myiterator(10):
print(el)
5、裝飾器
#簡單裝飾器
def use_logging(func):
logging.warning("%s is running" %func.__name__)
return func(*args)
@use_logging
def foo():
print("i am foo")
@use_logging
def bar():
print("i am bar")
#帶引數的裝飾器
def use_logging(level):
def decorator(func):
if level=="warning":
logging.warning("%s is running" %func.__name__)
return func(*args)
return decorator
@use_logging("warning")
def foo_with_parameters(name='foo'):
print('i am %s' %name)
class foo(object):
def __init__(self,func):
self.func = func
def __call__(self, *args, **kwargs):
print("class decorator running")
self.func()
print("class decorator ending")
#類裝飾器
@foo
def bar_class():
print("bar")
def main():
bar()
foo_with_parameters()
bar_class()
6、itertools
這個帖子是基於python2講解的,3的話把izip,imap等都省略了
7、協程
def client_handler(sock):
with closing(sock):
while(true):
data = (yield multitask.recv(sock,1024))
if not data:
break
print(data)
yield multitask.send(sock,data)
def echo_server(hostname,port):
addrinfo = socket.getaddrinfo(hostname,port,socket.af_unspec,socket.sock_stream)
(family,socktype,proto,canonname,sockaddr) = addrinfo[0]
with closing(socket.socket(family,socktype,proto)) as sock:
sock.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)
sock.bind(sockaddr)
sock.listen(5)
while true:
multitask.add(client_handler((yield multitask.accept(sock))[0]))
def coroutine_1():
for i in range(3):
print('c1')
yield i
def coroutine_2():
for i in range(3):
print('c2')
yield i
def main():
# multitask.add(coroutine_1())
# multitask.add(coroutine_2())
## multitask.run()
import sys
hostname=none
port = 1111
if len(sys.argv)>1:
hostname = sys.argv[1]
if len(sys.argv)>2:
port = sys.argv[2]
multitask.add(echo_server(hostname,port))
try:
multitask.run()
except keyboardinterrupt:
pass
return
8、最佳實踐
1)應該避免多重繼承
2)super的使用必須一致
3)不要混用老式和新式的類
4)呼叫父類必須檢查類層次,呼叫_mro_檢視當前類的結構層次
5)私有變數和函式都在前面加_
python高階程式設計技巧
個人部落格點這裡 方法1 通過迭代來進行判斷篩選 解決方案 函式式程式設計 解決方案 使用collections.counter物件 將序列傳入counter的構造器,得到counter物件是元素頻度的字典 counter.most common n 方法得到頻度最高的n個元素的列表 解決方案 使用...
Python的幾個高階程式設計技巧
python有一些技巧對你來說是新知識,但是還有一些技巧會讓你的 效率大幅提公升。a 1,2,3 x x for x in a if x 1 4,9 a 1,2,3 s stype s seta 1,2,3 list range 10 0,1,2,3,4,5,6,7,8,9 list range 3...
Python高階特性
l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...