最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

《Python之禪》中對于Python編程過程中的一些建議

 更新時(shí)間:2015年04月03日 11:01:59   作者:Satyajit Ranjeev  
這篇文章主要介紹了《Python之禪》中對于Python編程過程中的一些建議,需要的朋友可以參考下

圍繞一門語言,學(xué)習(xí)它的文化精髓,能讓你成為一名更優(yōu)秀的程序員。如果你還沒讀過Python之禪(Zen of Python) ,那么打開Python的命令提示符輸入import this,列表中的每一項(xiàng)你都可以在這里找到相對應(yīng)的例子。
吸引我注意力的一條是:

優(yōu)雅勝于丑陋 (Beautiful is better than ugly)

看下面例子:

一個帶有數(shù)字參數(shù)的list函數(shù)其功能是返回參數(shù)中的奇數(shù)可以分開寫:
 

#-----------------------------------------------------------------------
 halve_evens_only = lambda nums: map(lambda i: i/2,\
 filter(lambda i: not i%2, nums))
 #-----------------------------------------------------------------------
def halve_evens_only(nums):
   return [i/2 for i in nums if not i % 2]

記住Python中那些非常簡單的事

兩個變量的交換:
 

a, b = b, a

參數(shù)在切片操作中的步驟,如:
 

a = [1,2,3,4,5]
>>> a[::2] # 以步長為2的增量迭代整個list對象
[1,3,5]

 一個特殊的例子 `x[::-1]`用來反轉(zhuǎn)x的實(shí)用語法。
 

>>> a[::-1]
 [5,4,3,2,1]

不要用可變對象作為默認(rèn)參數(shù)值(Don't use mutable as defaults)
 

def function(x, l=[]):     # 不要這么干
def function(x, l=None):    # 更好的一種方式
  if l is None:
    l = []

使用iteritems而不是items

iteriterms 使用的是 generators,所以當(dāng)?shù)艽蟮男蛄惺谴朔椒ǜ?br />  

d = {1: "1", 2: "2", 3: "3"}
 
for key, val in d.items()    # 調(diào)用items()后會構(gòu)建一個完整的list對象
 
for key, val in d.iteritems()  # 只有在迭代時(shí)每請求一次才生成一個值

此情景和range與xrange的關(guān)系相似。

使用isinstance 而不是type

不要這樣做:
 

if type(s) == type(""): ...
if type(seq) == list or \
  type(seq) == tuple: ...

應(yīng)該是這樣:
 

if isinstance(s, basestring): ...
if isinstance(seq, (list, tuple)): ...

至于為什么這樣做,看這里:http://stackoverflow.com/a/1549854/504262

需要注意的是這里使用basestring而不是str是因?yàn)槟憧赡軙靡粋€unicode對象去檢查是否為string,例如:
 

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False

因?yàn)樵赑ython中3.0以下的版本存在兩種字符串類型str和unicode

201543105902114.jpg (319×212)

學(xué)習(xí)各種集合(learn the various collections)

python有各種各樣的容器數(shù)據(jù)類型,在特定情況下選擇python內(nèi)建的容器如:list和dict。通常更多像如下方式使用:

freqs = {}
for c in "abracadabra":
  try:
    freqs[c] += 1
  except:
    freqs[c] = 1

一種更好的方案如下:
 

freqs = {}
  for c in "abracadabra":
    freqs[c] = freqs.get(c, 0) + 1

一種更好的選擇 collection類型defautdict:
 

from collections import defaultdict
freqs = defaultdict(int)
  for c in "abracadabra":
    freqs[c] += 1

其它集合
 

namedtuple()    # 用指定的域創(chuàng)建元組子類的工廠函數(shù)
deque      # 類似list的容器,快速追加以及刪除在序列的兩端
Counter     # 統(tǒng)計(jì)哈希表的dict子類
OrderedDict      # 記錄實(shí)體添加順序的dict子類
defaultdict      # 調(diào)用工廠方法為key提供缺省值的dict子類

當(dāng)創(chuàng)建類時(shí)Python的魔術(shù)方法:

__eq__(self, other)   # 定義相等操作的行為, ==.
__ne__(self, other)   # 定義不相等操作的行為, !=.
__lt__(self, other)   #定義小于操作的行為, <.
__gt__(self, other)   #定義不大于操作的行為, >.
__le__(self, other)   #定義小于等于操作的行為, <=.
__ge__(self, other)   #定義大于等于操作的行為, >=.

條件賦值
 

x = 3 if (y == 1) else 2

表達(dá)式請起來恰恰像:如果y等于1就把3賦值給x,否則把2賦值給x,當(dāng)然同樣可以使用鏈?zhǔn)綏l件賦值如果你還有更復(fù)雜的條件的話。
 

x = 3 if (y == 1) else 2 if (y == -1) else 1

然而到了某個特定的點(diǎn),它就有點(diǎn)兒過分了。

記住,你可以在任何表達(dá)式中使用if-else例如:
 

(func1 if y == 1 else func2)(arg1, arg2)

func1將被調(diào)用如果y等于1的話,反之func2被調(diào)用。兩種情況下,arg1和arg2兩個參數(shù)都將附帶在相應(yīng)的函數(shù)中。

類似地,下面這個表達(dá)式同樣是正確的
 

x = (class1 if y == 1 else class2)(arg1, arg2)

class1和class2是兩個類

在有必要的時(shí)侯使用Ellipsis

創(chuàng)建類時(shí),你可以使用__getitem__,讓你的類像字典一個工作,拿下面這個類舉例來說:
 

class MyClass(object):
  def __init__(self, a, b, c, d):
    self.a, self.b, self.c, self.d = a, b, c, d
 
  def __getitem__(self, item):
    return getattr(self, item)
 
x = MyClass(10, 12, 22, 14)

因?yàn)橛辛薩_getitem__,你就能夠通過對象x的x[‘a(chǎn)']獲取a的值,這應(yīng)該是公認(rèn)的事實(shí)。

這個對象通常用于繼承Python的切片(slicing) (http://docs.python.org/library/stdtypes.html#bltin-ellipsis-object),如果添加如下語句:
 

def __getitem__(self, item):
   if item is Ellipsis:
     return [self.a, self.b, self.c, self.d]
   else:
     return getattr(self, item)

我們就可以使用x[…]獲取的包含所有項(xiàng)的序列
 

>>> x = MyClass(11, 34, 23, 12)
>>> x[...]
[11, 34, 23, 12]

相關(guān)文章

  • python繪制分組條形圖的示例代碼

    python繪制分組條形圖的示例代碼

    本文主要介紹了如何使用python繪制分組條形圖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python中的嵌套循環(huán)詳情

    Python中的嵌套循環(huán)詳情

    這篇文章主要介紹了Python中的嵌套循環(huán)詳情,嵌套循環(huán)就是一個外循環(huán)的主體部分是一個內(nèi)循環(huán)。內(nèi)循環(huán)或外循環(huán)可以是任何類型,下列詳情介紹內(nèi)容,需要的朋友可以參考一下
    2022-03-03
  • python四則運(yùn)算表達(dá)式求值示例詳解

    python四則運(yùn)算表達(dá)式求值示例詳解

    這篇文章主要為大家介紹了python四則運(yùn)算表達(dá)式求值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • pandas學(xué)習(xí)之df.fillna的具體使用

    pandas學(xué)習(xí)之df.fillna的具體使用

    本文主要介紹了pandas學(xué)習(xí)之df.fillna的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 你需要學(xué)會的8個Python列表技巧

    你需要學(xué)會的8個Python列表技巧

    這篇文章主要介紹了8個常用的Python列表技巧,文中講解非常詳細(xì),幫助大家更好的學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-06-06
  • Pycharm創(chuàng)建文件時(shí)自動生成文件頭注釋(自定義設(shè)置作者日期)

    Pycharm創(chuàng)建文件時(shí)自動生成文件頭注釋(自定義設(shè)置作者日期)

    這篇文章主要介紹了Pycharm創(chuàng)建文件時(shí)自動生成文件頭注釋(自定義設(shè)置作者日期),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python字符串格式化方式

    Python字符串格式化方式

    這篇文章主要介紹了Python字符串格式化方式,字符串格式化在我們的開發(fā)過程中被廣泛的應(yīng)用,因此也是我們要重點(diǎn)掌握的內(nèi)容之一,下文相關(guān)介紹,需要的朋友可以參考一下
    2022-04-04
  • 九個Python列表生成式高頻面試題匯總

    九個Python列表生成式高頻面試題匯總

    本文為大家整理了九個Python列表生成式的面試題(從簡單到困難排序),可以幫助大家提高列表生成式的理解水平,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-05-05
  • python2.7無法使用pip的解決方法(安裝easy_install)

    python2.7無法使用pip的解決方法(安裝easy_install)

    下面小編就為大家分享一篇python2.7無法使用pip的解決方法(安裝easy_install),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 詳解python運(yùn)行三種方式

    詳解python運(yùn)行三種方式

    這篇文章主要介紹了python運(yùn)行三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論

商水县| 龙川县| 龙口市| 临潭县| 从化市| 玉山县| 丁青县| 大同市| 弋阳县| 郎溪县| 福安市| 临猗县| 清河县| 搜索| 安福县| 嫩江县| 南陵县| 平阳县| 介休市| 昭平县| 庆云县| 肃宁县| 田东县| 巴林右旗| 神木县| 凤阳县| 十堰市| 贡山| 清镇市| 芜湖市| 余庆县| 瓦房店市| 烟台市| 明水县| 抚州市| 娄底市| 平乐县| 永兴县| 剑河县| 玉屏| 裕民县|