• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Python編碼時應該注意的幾個情況

    來源:懂視網 責編:小采 時間:2020-11-27 14:39:04
    文檔

    Python編碼時應該注意的幾個情況

    Python編碼時應該注意的幾個情況:在編程過程中,多了解語言周邊的一些知識,以及一些技巧,可以讓你加速成為一個優秀的程序員。對于Python程序員,你需要注意一下本文所提到的這些事情。你也可以看看Zen of Python(Python之禪),這里面提到了一些注意事項,并配以示例,可以幫助你快速提高
    推薦度:
    導讀Python編碼時應該注意的幾個情況:在編程過程中,多了解語言周邊的一些知識,以及一些技巧,可以讓你加速成為一個優秀的程序員。對于Python程序員,你需要注意一下本文所提到的這些事情。你也可以看看Zen of Python(Python之禪),這里面提到了一些注意事項,并配以示例,可以幫助你快速提高

    在編程過程中,多了解語言周邊的一些知識,以及一些技巧,可以讓你加速成為一個優秀的程序員。
    對于Python程序員,你需要注意一下本文所提到的這些事情。你也可以看看Zen of Python(Python之禪),這里面提到了一些注意事項,并配以示例,可以幫助你快速提高。

    1. 漂亮勝于丑陋

    實現一個功能:讀取一列數據,只返回偶數并除以2。下面的代碼,哪個更好一些呢?

    代碼如下:


    #----------------------------------------
    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]

    2. 記住Python中非常簡單的事情

    代碼如下:


    # 交換兩個變量
    a, b = b, a
    # 切片(slice)操作符中的step參數。(切片操作符在python中的原型是[start:stop:step],即:[開始索引:結束索引:步長值])
    a = [1,2,3,4,5]
    >>> a[::2] # 遍歷列表中增量為2的數據
    [1,3,5]
    # 特殊情況下,`x[::-1]`是實現x逆序的實用的方式
    >>> a[::-1]
    [5,4,3,2,1]
    # 逆序并切片
    >>> x[::-1]
    [5, 4, 3, 2, 1]
    >>> x[::-2]
    [5, 3, 1]

    3. 不要使用可變對象作為默認值

    代碼如下:


    def function(x, l=[]): #不要這樣

    def function(x, l=None): # 好的方式
    if l is None:
    l = []

    這是因為當def聲明被執行時,默認參數總是被評估。

    4. 使用iteritems而不是items

    代碼如下:


    iteritems 使用generators ,因此當通過非常大的列表進行迭代時,iteritems 更好一些。
    d = {1: "1", 2: "2", 3: "3"}
    for key, val in d.items() # 當調用時構建完整的列表
    for key, val in d.iteritems() # 當請求時只調用值

    5. 使用isinstance ,而不是type

    代碼如下:


    # 不要這樣做
    if type(s) == type(""): ...
    if type(seq) == list or \
    type(seq) == tuple: ...

    # 應該這樣
    if isinstance(s, basestring): ...
    if isinstance(seq, (list, tuple)): ...

    原因可參閱:stackoverflow

    注意我使用的是basestring 而不是str,因為如果一個unicode對象是字符串的話,可能會試圖進行檢查。例如:

    代碼如下:


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

    這是因為在Python 3.0以下版本中,有兩個字符串類型str 和unicode。

    6. 了解各種容器

    Python有各種容器數據類型,在特定的情況下,相比內置容器(如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 類型defaultdict。

    代碼如下:

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

    其他容器:
    namedtuple() # 工廠函數,用于創建帶命名字段的元組子類
    deque # 類似列表的容器,允許任意端快速附加和取出
    Counter # dict子類,用于哈希對象計數
    OrderedDict # dict子類,用于存儲添加的命令記錄
    defaultdict # dict子類,用于調用工廠函數,以補充缺失的值

    7. Python中創建類的魔術方法(magic methods)

    __eq__(self, other) # 定義 == 運算符的行為
    __ne__(self, other) # 定義 != 運算符的行為
    __lt__(self, other) # 定義 < 運算符的行為
    __gt__(self, other) # 定義 > 運算符的行為
    __le__(self, other) # 定義 <= 運算符的行為
    __ge__(self, other) # 定義 >= 運算符的行為

    8. 必要時使用Ellipsis(省略號“...”)

    Ellipsis 是用來對高維數據結構進行切片的。作為切片(:)插入,來擴展多維切片到所有的維度。例如:

    代碼如下:


    >>> from numpy import arange
    >>> a = arange(16).reshape(2,2,2,2)

    # 現在,有了一個4維矩陣2x2x2x2,如果選擇4維矩陣中所有的首元素,你可以使用ellipsis符號。

    >>> a[..., 0].flatten()
    array([ 0, 2, 4, 6, 8, 10, 12, 14])

    # 這相當于
    >>> a[:,:,:,0].flatten()
    array([ 0, 2, 4, 6, 8, 10, 12, 14])

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Python編碼時應該注意的幾個情況

    Python編碼時應該注意的幾個情況:在編程過程中,多了解語言周邊的一些知識,以及一些技巧,可以讓你加速成為一個優秀的程序員。對于Python程序員,你需要注意一下本文所提到的這些事情。你也可以看看Zen of Python(Python之禪),這里面提到了一些注意事項,并配以示例,可以幫助你快速提高
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 欧美日韩精品在线观看| 日韩精品一区二区三区视频| 久久夜色撩人精品国产小说| 精品a在线观看| 久久99国产精品一区二区| 国产亚洲欧洲精品| 中文字幕成人精品久久不卡| 国产精品麻豆欧美日韩ww| 欧美在线精品一区二区三区 | 久久se精品一区二区影院 | 欧美成人精品欧美一级乱黄一区二区精品在线 | 亚洲级αV无码毛片久久精品| 亚洲国产另类久久久精品小说| 免费欧美精品a在线| 免费精品精品国产欧美在线欧美高清免费一级在线 | 亚洲精品高清在线| 高清免费久久午夜精品| 92精品国产自产在线观看| 亚洲欧美日韩国产精品影院 | 色久综合网精品一区二区| 87国产私拍福利精品视频| 最新精品露脸国产在线 | 久久激情亚洲精品无码?V| 乱色精品无码一区二区国产盗| 国产精品久久久久影视不卡| 国产精品自产拍在线18禁| 久久久久久九九99精品| 国产精品99精品视频网站| 国产精品无圣光一区二区| 久久亚洲精品无码播放| 久久久九九有精品国产| 精品国产一区二区三区色欲 | 国内精品国产成人国产三级| 精品欧洲AV无码一区二区男男 | 久久93精品国产91久久综合| 国产精品天天影视久久综合网 | 国产欧美在线观看精品一区二区| 久久婷婷国产综合精品| 久久精品成人一区二区三区| 国产精品一区二区不卡| 久久99精品久久久久子伦|