Python高階程式設計特性和技巧

2021-08-27 16:11:14 字數 3661 閱讀 1931

昨今兩天把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...