日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python伪代码书写规范_代码这样写更优雅(Python 版)(转载)

發布時間:2025/3/11 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python伪代码书写规范_代码这样写更优雅(Python 版)(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 這門語言最大的優點之一就是語法簡潔,好的代碼就像偽代碼一樣,干凈、整潔、一目了然。但有時候我們寫代碼,特別是 Python 初學者,往往還是按照其它語言的思維習慣來寫,那樣的寫法不僅運行速度慢,代碼讀起來也費盡,給人一種拖泥帶水

的感覺,過段時間連自己也讀不懂。

《計算機程序的構造和解釋》的作者哈爾·阿伯爾森曾這樣說:“Programs must be written for people to read, and only incidentally for machines to execute.”

要寫出 Pythonic(優雅的、地道的、整潔的)代碼,還要平時多觀察那些大牛代碼,Github 上有很多非常優秀的源代碼值得閱讀,比如:requests、flask、tornado,筆者列舉一些常見的 Pythonic 寫法,希望能給你帶來一點啟迪。

1、變量交換

大部分編程語言中交換兩個變量的值時,不得不引入一個臨時變量:

>>>?a=?1

>>>?b=?2

>>>?tmp=?a

>>>?a=?b

>>>?b=?tmp

pythonic

>>> a, b = b, a

2、循環遍歷區間元素

foriin[0,1,2,3,4,5]:

(printi)

# 或者

foriinrange(6):

(printi)

pythonic

foriinxrange(6):

(printi)

xrange 返回的是生成器對象,生成器比列表更加節省內存,不過需要注意的是 xrange 是 python2 中的寫法,python3 只有 range 方法,特點和 xrange 是一樣的。

3、帶有索引位置的集合遍歷

遍歷集合時如果需要使用到集合的索引位置時,直接對集合迭代是沒有索引信息的,普通的方式使用:

colors=?['red','green','blue','yellow']

foriinrange(len(colors)):

print(i,'--->',colors[i])

pythonic

fori,color?inenumerate(colors):

print(i,'--->',color)

4、字符串連接

字符串連接時,普通的方式可以用 + 操作

names=?['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

s=?names[0]

forname?innames[1:]:

s+=?', '+?name

print(s)

pythonic

print (', '.join(names))

join 是一種更加高效的字符串連接方式,使用 + 操作時,每執行一次+操作就會導致在內存中生成一個新的字符串對象,遍歷8次有8個字符串生成,造成無謂的內存浪費。而用 join 方法整個過程只會產生一個字符串對象。

5、打開/關閉文件

執行文件操作時,最后一定不能忘記的操作是關閉文件,即使報錯了也要 close。普通的方式是在 finnally 塊中顯示的調用 close 方法。

f=?open('data.txt')

try:

data=?f.read()

finally:

f.close()

pythonic

withopen('data.txt')asf:

data=?f.read()

使用 with 語句,系統會在執行完文件操作后自動關閉文件對象。

6、列表推導式

能夠用一行代碼簡明扼要地解決問題時,絕不要用兩行,比如

result=?[]

foriinrange(10):

s=?i*2

result.append(s)

pythonic

[i*2 for i in xrange(10)]

與之類似的還有生成器表達式、字典推導式,都是很 pythonic 的寫法。

7、善用裝飾器

裝飾器可以把與業務邏輯無關的代碼抽離出來,讓代碼保持干凈清爽,而且裝飾器還能被多個地方重復利用。比如一個爬蟲網頁的函數,如果該 URL 曾經被爬過就直接從緩存中獲取,否則爬下來之后加入到緩存,防止后續重復爬取。

defweb_lookup(url,saved={}):

ifurl?insaved:

returnsaved[url]

page=?urllib.urlopen(url).read()

saved[url]=?page

returnpage

pythonic

importurllib#py2

#import urllib.request as urllib # py3

defcache(func):

saved=?{}

defwrapper(url):

ifurl?insaved:

returnsaved[url]

else:

page=?func(url)

saved[url]=?page

returnpage

returnwrapper

defweb_lookup(url):

returnurllib.urlopen(url).read()

用裝飾器寫代碼表面上感覺代碼量更多,但是它把緩存相關的邏輯抽離出來了,可以給更多的函數調用,這樣總的代碼量就會少很多,而且業務方法看起來簡潔了。

8、合理使用列表

列表對象(list)是一個查詢效率高于更新操作的數據結構,比如刪除一個元素和插入一個元素時執行效率就非常低,因為還要對剩下的元素進行移動

names=?['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

names.pop(0)

names.insert(0,'mark')

pythonic

fromcollectionsimportdeque

names=?deque(['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie'])

names.popleft()

names.appendleft('mark')

deque 是一個雙向隊列的數據結構,刪除元素和插入元素會很快

9、序列解包

p=?'vttalk','female',30,'python@qq.com'

name=?p[0]

gender=?p[1]

age=?p[2]

email=?p[3]

pythonic

name, gender, age, email = p

10、遍歷字典的 key 和 value

方法一速度沒那么快,因為每次迭代的時候還要重新進行hash查找 key 對應的 value。

方法二遇到字典非常大的時候,會導致內存的消耗增加一倍以上

# 方法一

forkind:

print(k,'--->',d[k])

# 方法二

fork,vind.items():

print(k,'--->',v)

pythonic

fork,vind.iteritems():

print(k,'--->',v)

iteritems 返回迭代器對象,可節省更多的內存,不過在 python3 中沒有該方法了,只有 items 方法,等值于 iteritems。

當然還有很多 pythonic 寫法,在此不再一一列舉,說不定有第二期,歡迎留言。覺得不錯就zan一個吧 (^o^)/

總結

以上是生活随笔為你收集整理的python伪代码书写规范_代码这样写更优雅(Python 版)(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。