<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          讓你的Python代碼更加Pythonic

          共 3345字,需瀏覽 7分鐘

           ·

          2022-05-23 18:04

          剛開始學(xué)習(xí)Python的時(shí)候,我們就了解了python的編碼風(fēng)格要求,通過python終端方式輸入import this可以看到它的具體描述。

          這就是著名的“python之禪”,簡(jiǎn)言之,就是要寫符合pythonic的代碼,簡(jiǎn)潔、優(yōu)雅、可讀性強(qiáng)。

          下面選取了一些常見的Python規(guī)范和代碼風(fēng)格,大家可以進(jìn)行參考和學(xué)習(xí)。

          命名

          首先看一下變量的命名規(guī)范(pep8)規(guī)范:

          文件夾:包名,建議僅使用小寫字母命名,不建議使用下劃線。

          模塊: 小寫或者小寫加下劃線連接,比如 module.pydb_convert.py等。

          類: 駝峰式,首字母大寫,單詞直接連接。

          class?ThisIsAClass(object):
          ????pass

          函數(shù):小寫,用下劃線隔開

          def?this_is_a_func():
          ????pass

          變量: 小寫,用下劃線隔開

          this_is_a_variable?=?1

          **常量:**常量名所有字母大寫,由下劃線連接各個(gè)單詞,如THIS_IS_A_CONSTANT = 1

          語法風(fēng)格

          1.交換a 和 b的數(shù)值

          其他語言的方法:

          a?=?5
          b?=?6
          temp?=?a
          a?=?b
          b?=?temp

          python中,更加簡(jiǎn)潔的方法:

          a?=?5
          b?=?6
          a,?b?=?b,?a
          print(a,?b)
          輸出:6 5

          2.多個(gè)變量賦值

          python中可以一行代碼,同時(shí)給多個(gè)變量賦值

          a,b,c?=?2,5,12

          3.合并字符串

          傳統(tǒng)的字符串合并方法,由于字符串對(duì)象不可改變,每次修改會(huì)產(chǎn)生一個(gè)新的對(duì)象,這種方法會(huì)消耗很多內(nèi)存。

          list_str?=?["hello?",?"python",?"!"]
          result?=?""
          for?i?in?list_str:
          ????result+=i
          print(result)

          python中,使用join()方法更加高效,注意join()方法只適用于元素是字符串的列表、元組、集合等類型。

          list_str?=?["hello?",?"python",?"!"]
          result?=?"".join(list_str)
          print(result)

          輸出:hello python!

          4.列表去重

          使用集合的唯一性,對(duì)列表進(jìn)行去重

          a?=?[1,?2,?3,?1,?2,3?,?1,?3,?2,?4,?1,?3,?4,?5,?6,?5,?4,?4,?3,?6]
          lst?=?list(set(a))
          print(lst)
          輸出:

          5.if/else 三目運(yùn)算

          python支持的三目運(yùn)算格式:

          為真時(shí)的結(jié)果?if?判斷條件?else?為假時(shí)的結(jié)果(注意,沒有冒號(hào))
          a=4
          st?=?"a大于4"?if?a>4?else?"a小于等于4"
          print(st)
          輸出:a小于等于4

          6.enumerate

          enumerate()是 Python 的內(nèi)置函數(shù)。可以將一個(gè)可迭代的(Iterable)對(duì)象(列表、字符串等)組成一個(gè)索引序列,可以同時(shí)獲得索引和值。

          獲取列表元素及索引

          #?一般寫法
          names?=?['Bob',?'Alice',?'Guido']
          n?=?len(names)
          for?i?in?range(n):
          ????print(f'{i}?{names[i]}')

          #?使用enumerate()函數(shù)
          names?=?['Bob',?'Alice',?'Guido']
          for?index,?value?in?enumerate(names):
          ????print(f'{index}:?{value}')
          輸出:
          0:?Bob
          1:?Alice
          2:?Guido

          7.解包

          解包在英文里叫做 Unpacking,就是將容器里面的元素逐個(gè)取出來。

          解壓列表/元組的元素,賦值給不同的變量

          a,?b,?c?=?[1,2,3]
          print(a,?b,?c)
          輸出:1 2 3

          函數(shù)中的解包操作

          在函數(shù)調(diào)用中,* 能夠?qū)⒃M或列表解包成不同的參數(shù)。

          def?func(a,?b,?c,?d):
          ????print(a,?b,?c,?d)

          args?=?[1,?2,?3,?4]
          func(*args)
          輸出:1 2 3 4

          在函數(shù)調(diào)用中,** 會(huì)以鍵/值的形式解包一個(gè)字典,使其成為一個(gè)獨(dú)立的關(guān)鍵字參數(shù)。

          def?func(a,?b,?c,?d):
          ????print(a,?b,?c,?d)

          kwargs?=?{"a":?1,?"b":?2,?"c":?3,?"d":?4}
          func(**kwargs)
          輸出:1 2 3 4

          8.列表推導(dǎo)式

          列表推導(dǎo)式可以利用 range 區(qū)間、元組、列表、字典和集合等數(shù)據(jù)類型,快速生成一個(gè)滿足指定需求的列表。

          [表達(dá)式 for 迭代變量 in 可迭代對(duì)象 [if 條件表達(dá)式] ]

          [if 條件表達(dá)式] 可以省略。

          生成一個(gè)列表,列表元素分別為 [1x1,2x2,3x3……nxn],假設(shè)n = 10

          #?一般方法
          lst?=?[]
          for?i?in?range(1,?11):
          ????lst.append(i*i)
          print(lst)
          輸出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
          #?列表推導(dǎo)式
          lst?=?[i*i?for?i?in?range(1,11)]
          print(lst)
          輸出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

          要求返回的序列中不存在偶數(shù)項(xiàng)

          lst?=?[i*i?for?i?in?range(1,?11)?if?i?%?2?!=?0]
          print(lst)
          輸出:[1, 9, 25, 49, 81]

          9.使用關(guān)鍵字in

          • in:如果在指定的序列中找到值返回 True,否則返回 False。
          • not in:如果在指定的序列中沒有找到值返回 True,否則返回 False。

          判斷元素是否在列表中

          number=[1,2,3,4,5]
          if?1?in?number:
          ????print("1?in?number")
          if?0?not?in?number:
          ????print("0?not?in?number")

          在 for 循環(huán)中,獲取列表、元組、字典的每一項(xiàng):

          list?=?[2,?3,?4]
          for?num?in?list:
          ????print?(num)
          ????
          dic?=?{"name":?"xiaoming",?"age":?18}
          for?k,?v?in?dic.items():
          ????print(k,?v)

          10.使用zip同步處理多個(gè)列表

          zip() 函數(shù)是 Python 內(nèi)置函數(shù),它可以將多個(gè)序列(列表、元組、字典、集合、字符串等)中對(duì)應(yīng)位置的元素重新組合,生成一個(gè)個(gè)新的元組。

          z?=?zip([1,2,3],[3,4,5])
          print(list(z))
          輸出:[(1, 3), (2, 4), (3, 5)]

          11.真值判斷

          當(dāng)判斷一個(gè)變量是否為 True 的時(shí)候,Python 具有自身獨(dú)特的方式,不需要寫出判斷條件,只需要在 if 或 while 關(guān)鍵字后面直接寫上該對(duì)象即可。

          常見的真值為False的情況:

          • 常量:None and False.
          • 數(shù)值0值: 0, 0.0, 0j
          • 序列或者集合為空:'', (), [], {}, set(), range(0)
          #?對(duì)于布爾對(duì)象,建議這樣寫
          x?=?True
          if?x:
          ????pass
          #?不建議這樣寫
          if?x?==?True:
          ????pass

          lst?=?[]
          #?對(duì)于列表對(duì)象,建議這樣寫
          if?lst:
          ????pass
          #?不建議這樣寫
          if?len(lst)?!=?0:
          ????pass

          更多關(guān)于pythonic的寫法,可以參考《effctive python》這本書,還有Python官網(wǎng)的代碼規(guī)范要求 https://www.python.org/dev/peps/pep-0008/。

          END



          推薦閱讀


          牛逼!Python常用數(shù)據(jù)類型的基本操作(長(zhǎng)文系列第①篇)

          牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第②篇)

          牛逼!Python函數(shù)和文件操作(長(zhǎng)文系列第③篇)

          牛逼!Python錯(cuò)誤、異常和模塊(長(zhǎng)文系列第④篇)


          吳恩達(dá)deeplearining.ai的經(jīng)典總結(jié)資料


          Ps:從小程序直接獲取下載

          瀏覽 14
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99免费精品 | 亚洲自拍中文 | 一性一交一伦一色一区二免费看 | 国产天堂视频 | 盛世大厦和刚下班的银行打电话成人 |