幾個小技巧讓你的Python程式碼更Pythonic
Python是一門非常靈活的語言,很多語法是其他語言不具備的,特別是對於從C、Java等語言轉向Python的人來說,很容易按照C、Java等語言的寫法來寫Python,對於初學者來說,如果對Python語言的理解不夠透徹,就會寫出很冗餘的程式碼來。
這篇文章,主要介紹幾個簡單技巧,讓你在寫Python程式碼,更Pythonic。
變數交換
Pythonic寫法
a, b = b, a
普通寫法
tmp = a; a = b; b = tmp;
迴圈遍歷區間元素
# 生成器與列表更加節省記憶體 # range(start, end, step) # [start, end) 包含開頭不包含結尾 for i in range(1, 1000, 2) # python3 for i in range(6) # python3 for i in xrange(6) #python2
在Python2中,有range和xrange2種寫法,xrange是生成器寫法,更節省記憶體。Python3中的range等價於Python2中的xrange。
生成器,只有在使用時才會動態生成,而且只能使用1次,比如range(1000000),Python2中會在記憶體中生成1百萬個元素的列表,而在Python3不會生成列表,而是生成器,佔用很小的記憶體。
如何你還在使用Python2,建議用xrange代替range
Java的寫法
for(int i = start; i < end; i += step) { // .... }
生成器擴充套件
# 定義一個生成器 odd = (num for num in range(10) if num % 2 == 1) for num in odd: print(num)
# 定義一個生成器 def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 >>> type(fib(3)) <generator object fib at 0x10e610728> >>> for num in fib(3): ... print(num) ... 1 1 2
def odd(): print('step 1') yield 1 print('step 2') yield 3 print('step 3') yield 5 gen = odd() print(next(gen)) print(next(gen)) print(next(gen))
索引
Pythonic寫法
num_list = [1, 4, 9] for i, val in enumerate(num_list): print(i, '-->', val)
普通寫法
num_list = [1, 4, 9] for i in range(len(num_list)) print(i, '-->', num_list[i])
顯然,Pythonic寫法更加直觀,優雅。
字串拼接
Pythonic寫法
names = ['Tom', 'Jack', 'Sam'] ','.join(names)
普通寫法
names = 'Tom' + 'Jack' + 'Sam'
每次+操作都會產生新字串,造成記憶體浪費,而join,整個過程中只會產生一個字串物件
檔案開啟與關閉
Pythonic寫法
# 寫法二 with open('a.txt') as f: data = f.read()
普通寫法
f = open('a.txt') try: data = f.read() finally: f.close()
使用with,Python將自動管理檔案流的開啟與關閉,無需手動操作。
列表操作
Pythonic寫法
from collections import deque names = deque(['c', 'd', 'e']) names.popleft() names.appendleft('b') names.append('f') # names => deque(['b', 'd', 'e', 'f'])
普通寫法
names = list['c', 'd', 'e'] names.pop(0) names.insert(0, 'b') names.append('f')
list也可以用pop(0)來刪除第一個元素,但是list在記憶體中是順序儲存的,刪除第一個元素,會導致之後的所有元素都會前移,效率很低,插入類似。
開頭如果有大量的刪除和插入操作,避免使用list。
解構賦值
Pythonic寫法
student = ['Tom', 18, 'male'] name, age, gender = student print(name, age, gender) # Tom 18 male num_list = [100, 19, 20, 98] first, *left_num_list, last = num_list print(first, left_num_list, last) # 100 [19, 20] 98
student = [['Tom', (98, 96, 100)], ['Jack', (98, 96, 100)]] for name, (first, second, third) in student: print(name, first, second, third)
student = { 'name': 'Tom', 'age': 18 } # python3 for k, v in student.items(): print('k', '-->', v) # python2 for k, v in student.iteritems(): print('k', '-->', v)
字典也類似,在Python2中,字典的items方法將返回列表,當字典比較大時,這樣會很耗記憶體。而iteritems方法返回的是生成器。
Python3中,沒有iteritems,items等價於Python2的iteritems。
如果在使用Python2,請用iteritems代替items
推導式
Pythonic寫法
# 生成1-100的奇數 odd = [i for i in range(1, 100) if i % 2 == 1] # 集合a,b分別去一個數,找出和大於100的所有組合 result = [(x, y) for x in a_set for y in b_set if x + y > 100]
普通寫法
# 生成1-100的奇數 result = [] for i in range(100): if i % 2 == 1: result.append(i) # 集合a,b分別去一個數,找出和大於100的所有組合 result = [] for x in a_set: for y in b_set: if x + y > 100: result.append((x, y))
相關文章
- 替代 for 迴圈,讓 Python 程式碼更 pythonic !Python
- 如何讓你的Python程式碼更加pythonic ?Python
- 讓Vue專案更絲滑的幾個小技巧Vue
- 幾個簡單的技巧讓你寫出的vue.js程式碼更優雅Vue.js
- 11個Python Pandas小技巧讓你的工作更高效(附程式碼例項)Python
- [翻譯] 讓你的程式碼更簡短,更整潔,更易讀的ES6小技巧
- 提高程式碼顏值的幾個小技巧
- 一些技巧讓你的 Laravel 程式碼更優雅Laravel
- ES6+好用的小技巧,讓你的程式碼更乾淨,短巧,易讀
- 十幾行程式碼就可以讓你的微信小程式掛掉行程微信小程式
- 9個JavaScript小技巧:寫出更簡潔,高效程式碼JavaScript
- 幾個步驟,讓你的 iOS 程式碼容易閱讀iOS
- Python中使用字典的幾個小技巧Python
- [譯] 不用祖傳祕方 - 寫好程式碼的幾個小技巧
- 讓你變成優秀程式設計師的幾個小習慣程式設計師
- 讓你的Python程式碼更乾淨只需簡單一步Python
- 讓 Python 程式碼執行更快的技巧Python
- 帶引數的 Python 裝飾器讓你的程式碼更優雅Python
- 幾個小技巧,幫你快速提高遊戲的打擊感遊戲
- Swift開發的幾個小技巧Swift
- 【JS】裝飾器讓你的程式碼更簡潔JS
- 【譯】五個ES6功能,讓你編寫程式碼更容易
- 一款小而美的小程式腳手架,讓你更流暢的開發小程式
- 分享幾個Python小技巧函式裡的4個小花招Python函式
- 幾個SQL查詢小技巧SQL
- 構建Docker幾個小技巧Docker
- 使用Async,讓你的Node.js程式碼更優雅Node.js
- Java11正式釋出了,讓你的程式碼更完美?Java
- C#6新特性,讓你的程式碼更乾淨C#
- Python魔法:20個讓你程式設計事半功倍的奇淫技巧(建議收藏)Python程式設計
- 深入 TypeScript – 2( 幾個常用的小技巧)TypeScript
- js前端除錯的幾個小技巧JS前端除錯
- 帶你認識,19個學習Python的小技巧!Python
- 五個小技巧讓你寫出更好的 JavaScript 條件語句JavaScript
- Git hub載入慢?下載慢?瀏覽慢?幾個小技巧讓你一鍵起飛!Git
- 學會Lambda,讓程式Pythonic一點Python
- 7個讓你驚歎的HTML技巧HTML
- 讓你的 Python 程式碼優雅又地道Python