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

歡迎訪問 生活随笔!

生活随笔

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

python

python最佳实践指南试题_Python最佳实践指南 阅读笔记

發(fā)布時間:2025/4/16 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python最佳实践指南试题_Python最佳实践指南 阅读笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

創(chuàng)建將0到19連接起來的字符串1

2

3

4

5

6

7

8nums = []

for n in range(20):

nums.append(str(n))

print "".join(nums)

# 更好的寫法

nums = [str(n) for n in range(20)]

print "".join(nums)

拼接多個已有的字符串1

2

3

4

5

6

7foo = 'foo'

bar = 'bar'

foobar = foo + bar # 好的做法

foo += 'ooo' # 不好的做法, 應(yīng)該這么做:

foo = ''.join([foo, 'ooo'])

也可以使用 % 格式運算符來連接確定數(shù)量的字符串,但 PEP 3101 建議使用 str.format() 替代 % 操作符。1

2

3

4

5

6foo = 'foo'

bar = 'bar'

foobar = '%s%s' % (foo, bar) # 可行

foobar = '{0}{1}'.format(foo, bar) # 更好

foobar = '{foo}{bar}'.format(foo=foo, bar=bar) # 最好

不要重復(fù)使用命名1

2

3items = 'a b c d' # 首先指向字符串...

items = items.split(' ') # ...變?yōu)榱斜?/p>

items = set(items) # ...再變?yōu)榧?/p>

重復(fù)使用命名對效率并沒有提升:賦值時無論如何都要創(chuàng)建新的對象。然而隨著復(fù)雜度的 提升,賦值語句被其他代碼包括 ‘if’ 分支和循環(huán)分開,使得更難查明指定變量的類型。 在某些代碼的做法中,例如函數(shù)編程,推薦的是從不重復(fù)對同一個變量命名賦值。Java 內(nèi)的實現(xiàn)方式是使用 ‘final’ 關(guān)鍵字。Python并沒有 ‘final’ 關(guān)鍵字而且這與它的哲學(xué) 相悖。盡管如此,避免給同一個變量命名重復(fù)賦值仍是是個好的做法,并且有助于掌握 可變與不可變類型的概念。

考慮該不該用任意參數(shù)列表(*args)如果一個函數(shù)接受的參數(shù)列表具有 相同的性質(zhì),通常把它定義成一個參數(shù),這個參數(shù)是一個列表或者其他任何序列會更清晰。

函數(shù)單個出口可能更好當一個函數(shù)在其正常過程中有多個主要出口點時,它會變得難以調(diào)試和返回其 結(jié)果,所以保持單個出口點可能會更好。這也將有助于提取某些代碼路徑,而且多個出口點 很有可能意味著這里需要重構(gòu)。

1

2

3

4

5

6

7

8

9

10

11def complex_function(a, b, c):

if not a:

return None # 拋出一個異??赡軙?/p>

if not b:

return None # 拋出一個異??赡軙?/p>

# 一些復(fù)雜的代碼試著用a,b,c來計算x

# 如果成功了,抵制住返回x的誘惑

if not x:

# 一些關(guān)于x的計算的Plan-B

return x

常見Python習(xí)語解包

1

2

3

4

5

6for index, item in enumerate(some_list):

# 使用index和item做一些工作

a, b = b, a

a, (b, c) = 1, (2, 3)

創(chuàng)建一個被忽略的變量

1

2filename = 'foobar.txt'

basename, __, ext = filename.rpartition('.')

創(chuàng)建一個含N個對象的列表

1four_nones = [None] * 4

創(chuàng)建一個含N個列表的列表

1four_lists = [[] for __ in xrange(4)]

根據(jù)列表來創(chuàng)建字符串

1

2letters = ['s', 'p', 'a', 'm']

word = ''.join(letters)

在集合體(collection)中查找一個項

1

2

3

4

5

6

7

8s = set(['s', 'p', 'a', 'm'])

l = ['s', 'p', 'a', 'm']

def lookup_set(s):

return 's' in s

def lookup_list(l):

return 's' in l

在下列場合在使用集合或者字典而不是列表,通常會是個好主意:

集合體中包含大量的項

你將在集合體中重復(fù)地查找項

你沒有重復(fù)的項

你不需要明確地比較一個值是True,或者None,或者0

糟糕1

2

3

4

5if attr == True:

print 'True!'

if attr == None:

print 'attr is None!'

優(yōu)雅1

2

3

4

5

6

7

8

9

10

11# 檢查值

if attr:

print 'attr is truthy!'

# 或者做相反的檢查

if not attr:

print 'attr is falsey!'

# or, since None is considered false, explicitly check for it

if attr is None:

print 'attr is None!'

訪問字典元素

糟糕1

2

3

4

5d = {'hello': 'world'}

if d.has_key('hello'):

print d['hello'] # 打印 'world'

else:

print 'default_value'

優(yōu)雅1

2

3

4

5

6

7

8d = {'hello': 'world'}

print d.get('hello', 'default_value') # 打印 'world'

print d.get('thingy', 'default_value') # 打印 'default_value'

# Or:

if 'hello' in d:

print d['hello']

在每次函數(shù)調(diào)用中,通過使用指示沒有提供參數(shù)的默認參數(shù) None 通常是 個好選擇),來創(chuàng)建一個新的對象。

舉例:1

2

3def append_to(element, to=[]):

to.append(element)

return to

你可能認為

1

2

3

4

5my_list = append_to(12)

print my_list # [12]

my_other_list = append_to(42)

print my_other_list # [42]

實際結(jié)果為

1

2

3# [12]

# [12, 42]

當函數(shù)被定義時,一個新的列表就被創(chuàng)建一次 ,而且同一個列表在每次成功的調(diào)用中都被使用。

當函數(shù)被定義時,Python的默認參數(shù)就被創(chuàng)建 一次,而不是每次調(diào)用函數(shù)的時候創(chuàng)建。 這意味著,如果你使用一個可變默認參數(shù)并改變了它,你 將會 在未來所有對此函數(shù)的 調(diào)用中改變這個對象。

遲綁定閉包

舉例1

2

3

4

5def create_multipliers():

return [lambda x : i * x for i in range(5)]

for multiplier in create_multipliers():

print multiplier(2)

你期望的結(jié)果

1

2

3

4

50

2

4

6

8

實際結(jié)果

1

2

3

4

58

8

8

8

8

五個函數(shù)被創(chuàng)建了,它們?nèi)加?乘以 x 。

Python的閉包是 遲綁定 。 這意味著閉包中用到的變量的值,是在內(nèi)部函數(shù)被調(diào)用時查詢得到的。

這里,不論 任何 返回的函數(shù)是如何被調(diào)用的, i 的值是調(diào)用時在周圍作用域中查詢到的。 接著,循環(huán)完成, i 的值最終變成了4。

這個陷阱并不和 lambda 有關(guān),不通定義也會這樣1

2

3

4

5

6

7

8

9def create_multipliers():

multipliers = []

for i in range(5):

def multiplier(x):

return i * x

multipliers.append(multiplier)

return multipliers

解決方案

最一般的解決方案可以說是有點取巧(hack)。由于 Python 擁有為函數(shù)默認參數(shù) 賦值的行為,你可以創(chuàng)建一個立即綁定參數(shù)的閉包,像下面這樣:

1

2def create_multipliers():

return [lambda x, i=i : i * x for i in range(5)]

或者,可以使用 function.partial 函數(shù)

1

2

3

4

5from functools import partial

from operator import mul

def create_multipliers():

return [partial(mul, i) for i in range(5)]

標簽:指南,None,return,attr,Python,筆記,print,bar,foo

來源: https://www.cnblogs.com/wangziqiang123/p/11618234.html

總結(jié)

以上是生活随笔為你收集整理的python最佳实践指南试题_Python最佳实践指南 阅读笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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