<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 的高階玩法

          共 3946字,需瀏覽 8分鐘

           ·

          2022-07-10 14:52

          ↑ 關(guān)注 + 星標(biāo) ,每天學(xué)Python新技能

          后臺回復(fù)【大禮包】送你Python自學(xué)大禮包

          來源:Python 編程時光


          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ù)的特性也可以擴展到命名參數(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]]









          1. 1885頁學(xué)習(xí)資料。一本在手,python不愁!

          2. 當(dāng)Pandas撞上了SQL,于是一個強大的pandasql庫產(chǎn)生了!

          3. 臥槽,這才是最強Python刷題網(wǎng)站!



          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  日韩 欧美 国产高清91 | 亚洲国产欧美手机在线 | 久久国产黄色视频 | 日本a在线免费观看 | 日本免费三级黄色电影网站 |