<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的高級用法,讓代碼更可讀、運行更高效!

          共 4171字,需瀏覽 9分鐘

           ·

          2022-05-09 20:01

          ??點擊“博文視點Broadview”,獲取更多書訊

          Python是世界上最流行的編程語言(TIOBE Index for April 2022),它易于上手且多才多藝,除了用于神經(jīng)網(wǎng)絡(luò)的構(gòu)建外, 還能用來創(chuàng)建Web應(yīng)用、桌面應(yīng)用、游戲和運維腳本等多種多樣的程序。

          Python語言語法簡潔,易于上手, 但當(dāng)你深入研究時, 會發(fā)現(xiàn)Python有很多高級用法,這些高級用法可以大幅度提高代碼的可讀性和運行效率。

          此外, Python包含了海量的高質(zhì)量第三方庫, 許多重要的庫已經(jīng)成為Python開發(fā)不可或缺的內(nèi)容。

          《高階Python:代碼精進(jìn)之路》一書可以幫你掌握Python語言的高級特性,以及Python科學(xué)計算基石——numpy的使用方法(numpy的API設(shè)計非常優(yōu)秀,深度學(xué)習(xí)框架TensorFlow、PyTorch都使用了numpy相似的API,并且可以和numpy混用)。

          下面介紹幾個Python的高級用法。


          01

          索引和切片

          Python列表的索引和切片是非常強大的功能, 它們可以讓你在Python中獲取列表中的任意元素。除了支持常見的正索引外, Python還支持負(fù)索引和切片。

          正索引

             a_list = [100, 200, 300, 400, 500, 600]     print(a_list[0])      # 輸出 100.     print(a_list[1])      # 輸出 200.     print(a_list[2])      # 輸出 300.

          負(fù)索引

             a_list = [100, 200, 300, 400, 500, 600]     print(a_list[-1])     # 輸出 600.     print(a_list[-3])     # 輸出 400.

          切片

          以下是列表切片的一些示例:

             a_list = [1, 2, 5, 10, 20, 30] 
          b_list = a_list[1:3] # 生成 [2, 5] c_list = a_list[4:] # 生成 [20, 30] d_list = a_list[-4:-1] # 生成 [5, 10, 20] e_list = a_list[-1:] # 生成 [30]


          02

          字符串對齊

          字符串格式化在命令行工具開發(fā)中非常重要, str類包含基礎(chǔ)的,用于文本對齊的方法:左對齊,右對齊或居中對齊。

          str.ljust(width [, fillchar])    # 左對齊str.rjust(width [, fillchar])    # 右對齊 str.center(width [, fillchar])   # 中間對齊 digit_str.zfill(width)           # 用“0”填充

          下面是一些例子:

          new_str = 'Help!'.center(10, '#') print(new_str)

          該例的輸出為:

          ##Help!###


          new_str = '750'.rjust(6, '0') print(new_str)

          此例的輸出為:

          000750

          上例只是一個簡單的字符串格式化樣例,《高階Python:代碼精進(jìn)之路》一書中還介紹了許多更復(fù)雜的格式化方法。


          03

          列表推導(dǎo)式&字典推導(dǎo)式

          Python 2.0版本引入的最重要的功能之一就是列表推導(dǎo)式。它提供了一種從列表中生成一系列值的緊湊語法。它也可以應(yīng)用于字典,集合(set)和其他類型的集合。

          假設(shè)你要創(chuàng)建一個包含a_list中每個元素的平方的新列表,一種可能的實現(xiàn)方式如下:

             b_list = [ ]     for i in a_list:         b_list.append(i * i)

          如果a_list包含元素[1,2,3],則這些語句的結(jié)果是創(chuàng)建一個包含[1,4,9]的新列表,并將此列表分配給變量b_list。在這種情況下,相應(yīng)的列表推導(dǎo)式如下所示:

             b_list = [i * i   for i in a_list]

          假設(shè)想講一個元組列表轉(zhuǎn)換為字典,元組列表如下:

             vals_list = [ ('pi', 3.14), ('phi', 1.618) ]

          字典可以用下面的代碼生成:

             my_dict = { i[0]: i[1] for i in vals_list }

          注意在鍵值表達(dá)式(i[0]:i[1])中冒號(:)的使用。


          04

          可變長參數(shù)列表

          Python最通用的功能之一就是能夠訪問可變長度參數(shù)的列表。借助此功能,你的函數(shù)可以處理任意數(shù)量的參數(shù),就像內(nèi)置的print函數(shù)一樣。可變長參數(shù)的特性也可以擴(kuò)展到命名參數(shù)。

             def func_name([ordinary_args,] *args):         statements

          這里的中括號表示*args前面可以有任意數(shù)量的普通參數(shù),在此表示為ordinary_args。此類參數(shù)是可選的。下面是示例代碼:

             def my_var_func(*args):         print('The number of args is', len(args))         for item in args:             print(items)

          此函數(shù)my_var_func可接受任意長度的參數(shù)列表。

             >>> my_var_func(10, 20, 30, 40)     The number of args is 4     10     20     30     40

          可變長參數(shù)列表還支持關(guān)鍵字參數(shù),如下所示:

             def pr_named_vals(**kwargs):         for k in kwargs:             print(k, ':', kwargs[k])

          上面的函數(shù)遍歷了kwargs表示的字典參數(shù),打印出傳入?yún)?shù)的鍵(對應(yīng)于參數(shù)名稱)和對應(yīng)的值。

             For example:     >>> pr_named_vals(a=10, b=20, c=30)     a : 10     b : 20     c : 30

          args 和 kwargs可以組合使用,下面是一個例子。

             def pr_vals_2(*args, **kwargs):         for i in args:             print(i)         for k in kwargs:             print(k, ':', kwargs[k]) 
          pr_vals_2(1, 2, 3, -4, a=100, b=200)

          運行時,此程序?qū)⒋蛴∫韵聝?nèi)容:

             1    2    3    -4 ???a?:?100?   b : 200


          05

          使用numpy進(jìn)行線性代數(shù)運算

          線性代數(shù)運算在深度學(xué)習(xí)中非常重要,numpy庫為Python提供了高效的線性代數(shù)運算模塊。

          numpy的線性代數(shù)模塊非常完備,以計算點積為例進(jìn)行介紹。

          使用numpy時,可以使用點積函數(shù)dot計算點積。

          numpy.dot(A, B, out=None)

          A和B是要進(jìn)行點積運算的兩個數(shù)組;out參數(shù)(如果已指定)是用于存儲結(jié)果的正確形狀的數(shù)組,“正確形狀”取決于A和B的形狀。

          兩個一維數(shù)組的點積很簡單。數(shù)組的長度必須相同。點積計算是將A中的每個元素與其B中的對應(yīng)元素相乘,然后對這些乘積求和,得出一個標(biāo)量值。

          D. P. = A[0]*B[0] + A[1]*B[1] + ... + A[N-1] * B[N-1]


          例子:

          import numpy as np  A = np.ones(5)  B = np.arange(5)  print(A, B)  [1. 1. 1. 1. 1.] [0 1 2 3 4]  np.dot(A, A)  5.0  np.dot(A, B)  10.0  np.dot(B, B)  30

          二維矩陣之間的點積比較復(fù)雜。與數(shù)組之間的普通乘法一樣,兩個數(shù)組的形狀必須兼容,但這只需要在其中一個維度上相等即可。

          下面是描述點積應(yīng)用到二維數(shù)組通用模式:

          (A, B) * (B, C) => (A, C)

          思考下面的2×3數(shù)組,再結(jié)合一個3×2數(shù)組,其點積是2×2數(shù)組。

          A = np.arange(6).reshape(2,3)  B = np.arange(6).reshape(3,2)  C = np.dot(A, B)  print(A, B, sep='\n\n')  print('\nDot product:\n', C)[[0 1 2]  [3 4 5]]
          [[0 1] [2 3] [4 5]]
          Dot product: [[10 13] [28 40]]


          以上內(nèi)容節(jié)選《高階Python:代碼精進(jìn)之路》一書,歡迎閱讀本書學(xué)習(xí)更多Python的高級技巧。

          高階Python:代碼精進(jìn)之路》

          [美]?Brian,Overland(布賴恩?歐弗蘭),John,Bennett(約翰?班納特) 著

          李輝?譯


          • 本書開發(fā)了一個“RPN腳本解釋器”項目,該項目貫穿本書的各個章節(jié),通過對該項目的學(xué)習(xí),你也可以開發(fā)出自己的“語言”

          本書詳細(xì)地介紹了Python語言的一些高級功能以及常見數(shù)據(jù)類型的高級用法,非常適合有一定基礎(chǔ)的讀者深入學(xué)習(xí)Python編程。本書的主要內(nèi)容包括常見內(nèi)置類型(數(shù)值、字符串和集合等)的高級用法和潛在的陷阱,用于文本處理的格式化方法和正則表達(dá)式,用于數(shù)值計算和大規(guī)模數(shù)據(jù)處理的math包和numpy包等。此外,文件存儲、隨機數(shù)生成和圖表繪制也是本書的重要內(nèi)容。

          掃碼查看本書詳情


          ?

          如果喜歡本文
          歡迎?在看留言分享至朋友圈?三連

          ?熱文推薦??





          ▼點擊閱讀原文,了解本書詳情~

          瀏覽 16
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  18 网站在线 | 免费看的操逼视频 | 日本 Ⅴ一区二区三区色情 | 大香蕉伊人网在线 | 黄色黄色1级a片 |