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

歡迎訪問 生活随笔!

生活随笔

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

python

python代码技巧_几个小技巧让你的Python代码更Pythonic

發(fā)布時間:2025/3/17 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python代码技巧_几个小技巧让你的Python代码更Pythonic 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python是一門非常靈活的語言,很多語法是其他語言不具備的,特別是對于從C、Java等語言轉向Python的人來說,很容易按照C、Java等語言的寫法來寫Python,對于初學者來說,如果對Python語言的理解不夠透徹,就會寫出很冗余的代碼來。

這篇文章,主要介紹幾個簡單技巧,讓你在寫Python代碼,更Pythonic。

變量交換

Pythonic寫法

a, b = b, a

普通寫法

tmp = a;

a = b;

b = tmp;

循環(huán)遍歷區(qū)間元素

# 生成器與列表更加節(jié)省內(nèi)存

# 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是生成器寫法,更節(jié)省內(nèi)存。Python3中的range等價于Python2中的xrange。

生成器,只有在使用時才會動態(tài)生成,而且只能使用1次,比如range(1000000),Python2中會在內(nèi)存中生成1百萬個元素的列表,而在Python3不會生成列表,而是生成器,占用很小的內(nèi)存。

如何你還在使用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))

>>> 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寫法更加直觀,優(yōu)雅。

字符串拼接

Pythonic寫法

names = ['Tom', 'Jack', 'Sam']

','.join(names)

普通寫法

names = 'Tom' + 'Jack' + 'Sam'

每次+操作都會產(chǎn)生新字符串,造成內(nèi)存浪費,而join,整個過程中只會產(chǎn)生一個字符串對象

文件打開與關閉

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在內(nèi)存中是順序存儲的,刪除第一個元素,會導致之后的所有元素都會前移,效率很低,插入類似。

開頭如果有大量的刪除和插入操作,避免使用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方法將返回列表,當字典比較大時,這樣會很耗內(nèi)存。而iteritems方法返回的是生成器。

Python3中,沒有iteritems,items等價于Python2的iteritems。

如果在使用Python2,請用iteritems代替items

推導式

Pythonic寫法

# 生成1-100的奇數(shù)

odd = [i for i in range(1, 100) if i % 2 == 1]

# 集合a,b分別去一個數(shù),找出和大于100的所有組合

result = [(x, y) for x in a_set for y in b_set if x + y > 100]

普通寫法

# 生成1-100的奇數(shù)

result = []

for i in range(100):

if i % 2 == 1:

result.append(i)

# 集合a,b分別去一個數(shù),找出和大于100的所有組合

result = []

for x in a_set:

for y in b_set:

if x + y > 100:

result.append((x, y))

via:http://imtuzi.com/post/python3-pythonic-tips.html

總結

以上是生活随笔為你收集整理的python代码技巧_几个小技巧让你的Python代码更Pythonic的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。