Python cheatsheet 速查表

来源:https://www.cnblogs.com/zhaoqingqing/p/18403146
-Advertisement-
Play Games

Python 速查表中文版 本手冊是 Python cheat sheet 的中文翻譯版。原作者:Arianne Colton and Sean Chen([email protected]) 編譯:ucasFL 目錄 常規 數值類類型 數據結構 函數 控制流 面向對象編程 ...


Python 速查表中文版

目錄

常規

  • Python 對大小寫敏感
  • Python 的索引從 0 開始
  • Python 使用空白符(製表符或空格)來縮進代碼,而不是使用花括弧

獲取幫助

  • 獲取主頁幫助:help()
  • 獲取函數幫助:help(str.replace)
  • 獲取模塊幫助:help(re)

模塊(庫)

Python的模塊只是一個簡單地以 .py 為尾碼的文件。

  • 列出模塊內容:dir(module1)
  • 導入模塊:import module
  • 調用模塊中的函數:module1.func1()

import語句會創建一個新的命名空間(namespace),並且在該命名空間內執行.py文件中的所有語句。如果你想把模塊內容導入到當前命名空間,請使用from module1 import *語句。

數值類類型

查看變數的數據類型:type(variable)

六種經常使用的數據類型

  1. int/long:過大的 int 類型會被自動轉化為 long 類型

  2. float:64 位,Python 中沒有 double 類型

  3. bool:真或假

  4. str:在 Python 2 中預設以 ASCII 編碼,而在 Python 3 中預設以 Unicode 編碼

    • 字元串可置於單/雙/三引號中

    • 字元串是字元的序列,因此可以像處理其他序列一樣處理字元串

    • 特殊字元可通過 \ 或者首碼 r 實現:

      str1 = r'this\f?ff'
      
    • 字元串可通過多種方式格式化:

      template = '%.2f %s haha $%d';
      str1 = template % (4.88, 'hola', 2)
      
  5. NoneType(None):Python “null”值(None對象存在一個實例)

    • None不是一個保留關鍵字,而是NoneType的一個唯一實例

    • None通常是可選函數參數的預設值:

      def func1(a, b, c=None)
      
    • None的常見用法:

      if variable is None :
      
  6. datetime:Python內置的datetime模塊提供了datetimedata以及time類型。

    • datetime組合了存儲於datetime中的信息
    # 從字元串中創建 datetime
    dt1 = datetime.strptime('20091031', '%Y%m%d')
    # 獲取 date 對象
    dt1.date()
    # 獲取 time 對象
    dt1.time()
    # 將 datetime 格式化為字元串
    dt1.strftime('%m/%d/%Y%H:%M')
    # 更改欄位值
    dt2 = dt1.replace(minute=0, second=30)
    # 做差, diff 是一個 datetime.timedelta 對象
    diff = dt1 - dt2
    

  • strboolintfloat同時也是顯式類型轉換函數。
  • 除字元串和元組外,Python 中的絕大多數對象都是可變的。

數據結構

:所有的“非只讀(non-Get)”函數調用,比如下麵例子中的list1.sort(),除非特別聲明,都是原地操作(不會創建新的對象)。

元組

元組是 Python 中任何類型的對象的一個一維、固定長度、不可變的序列。

# 創建元組
tup1 = 4, 5, 6
tup1 = (6, 7, 8)
# 創建嵌套元組
tup1 = (4, 5, 6), (7, 8)
# 將序列或迭代器轉化為元組
tuple([1, 0, 2])
# 連接元組
tup1 + tup2
# 解包元組
a, b, c = tup1

元組應用

# 交換兩個變數的值
a, b = b, a

列表

列表是 Python 中任何類型的對象的一個一維、非固定長度、可變(比如內容可以被修改)的序列。

# 創建列表
list1 = [1, 'a', 3]
list1 = list(tup1)
# 連接列表
list1 + list2
list1.extend(list2)
# 追加到列表的末尾
list1.append('b')
# 插入指定位置
list1.insert(PosIndex, 'a')
# 反向插入,即彈出給定位置的值/刪除
ValueAtIdx = list1.pop(PosIndex)
# 移除列表中的第一個值, a 必須是列表中第一個值
list1.remove('a')
# 檢查成員
3 in list1 => True or False
# 對列表進行排序
list1.sort()
# 按特定方式排序
list1.sort(key=len) # 按長度排序
  • 使用 + 連接列表會有比較大的開支,因為這個過程中會創建一個新的列表,然後複製對象。因此,使用extend()是更明智的選擇。
  • insertappend相比會有更大的開支(時間/空間)。
  • 在列表中檢查是否包含一個值會比在字典和集合中慢很多,因為前者需要進行線性掃描,而後者是基於哈希表的,所以只需要花費常數時間。

內置的bisect模塊

  • 對一個排序好的列表進行二分查找或插入

  • bisect.bisect找到元素在列表中的位置,bisect.insort將元素插入到相應位置。

  • 用法:

    import bisect
    list1 = list(range(10))
    #找到 5 在 list1 中的位置,從 1 開始,因此 position = index + 1
    bisect.bisect(list1, 5)
    #將 3.5 插入 list1 中合適位置
    bisect.insort(list1, 3.5)
    

bisect 模塊中的函數並不會去檢查列表是否排序好,因為這會花費很多時間。所以,對未排序好的列表使用這些函數也不會報錯,但可能會返回不正確的結果。

針對序列類型的切片

序列類型包括strarraytuplelist等。

用法:

list1[start:stop]
# 如果使用 step
list1[start:stop:step]

  • 切片結果包含 start 索引,但不包含 stop 索引
  • start/stop 索引可以省略,如果省略,則預設為序列從開始到結束,如 list1 == list1[:]

step 的應用:

# 取出奇數位置的元素
list1[::2]
# 反轉字元串
str1[::-1]

字典(哈希表)

# 創建字典
dict1 = {'key1': 'value1', 2: [3, 2]}
# 從序列創建字典
dict(zip(KeyList, ValueList))
# 獲取/設置/插入元素
dict1['key1']
dict1['key1'] = 'NewValue'
# get 提供預設值
dict1.get('key1', DefaultValue)
# 檢查鍵是否存在
'key1' in dict1
# 獲取鍵列表
dict1.keys()
# 獲取值列表
dict1.values()
# 更新值
dict1.update(dict2)  # dict1 的值被 dict2 替換
  • 如果鍵不存在,則會出現 KeyError Exception
  • 當鍵不存在時,如果 get()不提供預設值則會返回 None
  • 以相同的順序返回鍵列表和值列表,但順序不是特定的,也就是說極大可能非排序。

有效字典鍵類型

  • 鍵必須是不可變的,比如標量類型(intfloatstring)或者元組(元組中的所有對象也必須是不可變的)。
  • 這兒涉及的技術術語是“可哈希(hashability)”。可以用函數hash()來檢查一個對象是否是可哈希的,比如 hash('This is a string')會返回一個哈希值,而hash([1,2])則會報錯(不可哈希)。

集合

  • 一個集合是一些無序且唯一的元素的聚集;

  • 你可以把它看成只有鍵的字典;

    # 創建集合
    set([3, 6, 3])
    {3, 6, 3}
    # 子集測試
    set1.issubset(set2)
    # 超集測試
    set1.issuperset(set2)
    # 測試兩個集合中的元素是否完全相同
    set1 == set2
    
  • 集合操作

    • 並(或):set1 | set2
    • 交(與):set1 & set2
    • 差:set1 - set2
    • 對稱差(異或):set1 ^ set2

函數

Python 的函數參數傳遞是通過引用傳遞

  • 基本形式

    def func1(posArg1, keywordArg1=1, ..)
    

    • 關鍵字參數必須跟在位置參數的後面;
    • 預設情況下,Python 不會“延遲求值”,表達式的值會立刻求出來。
  • 函數調用機制

    1. 所有函數均位於模塊內部作用域。見“模塊”部分。
    2. 在調用函數時,參數被打包成一個元組和一個字典,函數接收一個元組args和一個字典kwargs,然後在函數內部解包。
  • “函數是對象”的常見用法:

    def func1(ops = [str.strip, user_define_func, ..], ..):
        for function in ops:
            value = function(value)
    

返回值

  • 如果函數直到結束都沒有return語句,則返回None

  • 如果有多個返回值則通過一個元組來實現。

    return (value1, value2)
    value1, value2 = func1(..)
    

匿名函數(又稱 LAMBDA 函數)

  • 什麼是匿名函數?

    匿名函數是一個只包含一條語句的簡單函數。

    lambda x : x * 2
    # def func1(x) : return x * 2
    
  • 匿名函數的應用:“柯里化(curring)”,即利用已存在函數的部分參數來派生新的函數。

    ma60 = lambda x : pd.rolling_mean(x, 60)
    

一些有用的函數(針對數據結構)

  1. Enumerate 返回一個序列(i, value)元組,i 是當前 item 的索引。

    for i, value in enumerate(collection):
    
    • 應用:創建一個序列中值與其在序列中的位置的字典映射(假設每一個值都是唯一的)。
  2. Sorted 可以從任意序列中返回一個排序好的序列。

    sorted([2, 1, 3]) => [1, 2, 3]
    
    • 應用:

      sorted(set('abc bcd')) => [' ', 'a', 'b', 'c', 'd']
      # 返回一個字元串排序後無重覆的字母序列
      
  3. Zip 函數可以把許多列表、元組或其他序列的元素配對起來創建一系列的元組。

    zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..]
    
    • zip()可以接收任意數量的序列作為參數,但是產生的元素的數目取決於最短的序列。

    • 應用:多個序列同時迭代:

      for i, (a, b) in enumerate(zip(seq1, seq2)):
      
    • unzip:另一種思考方式是把一些行轉化為一些列:

      seq1, seq2 = unzip(zipOutput)
      
  4. Reversed 將一個序列的元素以逆序迭代。

    list(reversed(range(10)))
    

    reversed() 會返回一個迭代器,list() 使之成為一個列表。

控制流

  1. 用於 if-else 條件中的操作符:

    var1 is var2  # 檢查兩個變數是否是相同的對象
    
    var1 is not var2  # 檢查兩個變數是否是不同的對象
    
    var1 == var2  # 檢查兩個變數的值是否相等
    

    :Python 中使用 andornot 來組合條件,而不是使用 &&||!

  2. for迴圈的常見用法:

    for element in iterator:  # 可迭代對象(list、tuple)或迭代器
        pass
    
    for a, b, c in iterator:  # 如果元素是可以解包的序列
        pass
    
  3. pass:無操作語句,在不需要進行任何操作的塊中使用。

  4. 三元表達式,又稱簡潔的 if-else,基本形式:

    value = true-expr if condition else false-expr
    
  5. Python 中沒有 switch/case 語句,請使用 if/elif

面向對象編程

  1. 對象是 Python 中所有類型的根。

  2. 萬物(數字、字元串、函數、類、模塊等)皆為對象,每個對象均有一個“類型(type)”。對象變數是一個指向變數在記憶體中位置的指針。

  3. 所有對象均會被引用計數

    sys.getrefcount(5) => x
    a = 5, b = a
    # 上式會在等號的右邊創建一個對象的引用,因此 a 和 b 均指向 5
    sys.getrefcount(5)
    => x + 2
    del(a); sys.getrefcount(5) => x + 1
    
  4. 類的基本形式:

    class MyObject(object):
        # 'self' 等價於 Java/C++ 中的 'this'
        def __init__(self, name):
            self.name = name
        def memberFunc1(self, arg1):
            pass
        @staticmethod
        def classFunc2(arg1):
            pass
    obj1 = MyObject('name1')
    obj1.memberFunc1('a')
    MyObject.classFunc2('b')
    
  5. 有用的互動式工具:

    dir(variable1)  # 列出對象的所有可用方法
    

常見字元串操作

# 通過分隔符連接列表/元組
', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'

# 格式化字元串
string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')

# 分裂字元串
sep = '-';
stringList1 = string1.split(sep)

# 獲取子串
start = 1;
string1[start:8]

# 補 '0' 向右對齊字元串
month = '5';
month.zfill(2) => '05'
month = '12';
month.zfill(2) => '12'
month.zfill(3) => '012'

異常處理

  1. 基本形式:

    try:
        pass
    except ValueError as e:
        print e
    except (TypeError, AnotherError):
        pass
    except:
        pass
    finally:
        pass  # 清理,比如 close db;
    
  2. 手動引發異常:

    raise AssertionError  # 斷言失敗
    raise SystemExit
    # 請求程式退出
    raise RuntimeError('錯誤信息 :..')
    

列表、字典以及元組的推導表達式

使代碼更加易讀易寫的語法糖。

  1. 列表推導

    • 用一個簡練的表達式,通過篩選一個數據集並且轉換經過篩選的元素的方式來簡明地生成新列表。

    • 基本形式:

      [expr for val in collection if condition]
      

    等價於

    result = []
    for val in collection:
        if condition:
            result.append(expr)
    

    可以省略過濾條件,只留下表達式。

  2. 字典推導

    • 基本形式:

      {key-expr : value-expr for value in collection if condition}
      
  3. 集合推導

    • 基本形式:和列表推導一樣,不過是用 () 而不是 []
  4. 嵌套列表

    • 基本形式:

      [expr for val in collection for innerVal in val if condition]
      

單元測試

Python自帶unittest模塊,可供我們編寫單元測試。

import unittest

我們可以編寫繼承於unittest.TestCase測試類的子類,併在子類中編寫具體的測試函數。測試函數命必須以test_開頭,否則不會被識別為測試函數,進而不會在運行單元測試時被運行。

class TestSubclass(unittest.TestCase):

    def test_func(self):
        self.assertEqual(0, 0)
        # 可以通過msg關鍵字參數提供測試失敗時的提示消息
        self.assertEqual(0, 0, msg='modified message')
        self.assertGreater(1, 0)
        self.assertIn(0, [0])
        self.assertTrue(True)
        # 測試是否會拋出異常
        with self.assertRaises(KeyError):
            _ = dict()[1]

    # 被@unittest.skip裝飾器裝飾的測試類或測試函數會被跳過
    @unittest.skip(reason='just skip')
    def test_skip(self):
        raise Exception('I shall never be tested')

另外,unittest.TestCase中還有兩個特殊的成員函數,他們分別會在調用每一個測試函數的前後運行。在測試前連接資料庫併在測試完成後斷開連接是一種常見的使用場景。

def setUp(self):
    # To do: connect to the database
    pass

def tearDown(self):
    # To do: release the connection
    pass

def test_database(self):
    # To do: test the database
    pass

測試類編寫完畢後,可以通過添加以下代碼來將當前文件當成正常的Python腳本使用

if __name__ == '__main__':
  unittest.main()

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文介紹基於Python語言,針對一個文件夾下大量的Excel表格文件,對其中的每一個文件加以操作——將其中指定的若幹列的數據部分都向上移動一行,並將所有操作完畢的Excel表格文件中的數據加以合併,生成一個新的Excel文件的方法~ ...
  • Exercise 2.3 Implement a representation for rectangles in a plane. (Hint: You may want to make use of Exercise 2.2.) In terms of your constructors and ...
  • 預設配置,應用配置到可擴展配置 。 配置文件的體現方式是 XML 文件或者是 Properties 文 件 。現在 springboot 框架的配置框架數據參數的提現方式是 yml 文件和註解參數 。配置文 件是應用程式參數化解耦的一種方式。程式員項目組開發好應用程式的框架之後,遺留下來 的項目參數 ...
  • leetCode刷題筆記(9.2-9.9) 48.旋轉圖像(9.3) 1)圖像即二維數組,圖像的旋轉本質上是二維數組的旋轉變換 2)二維數組從外層來看,是若幹個子數組的集合,子數組內部維護各自的元素,即若幹個row里是row.length個column 3)由此可理解下麵幾個關於二維數組的函數: 創 ...
  • 跨平臺系列 cross-plateform 跨平臺應用程式-01-概覽 cross-plateform 跨平臺應用程式-02-有哪些主流技術棧? cross-plateform 跨平臺應用程式-03-如果只選擇一個框架,應該選擇哪一個? cross-plateform 跨平臺應用程式-04-Reac ...
  • 日常使用的移動手機或者是電腦等其它電子產品都是每天在產生不同的數據。數據安全性的 保證需要有很多的電腦程式設計的運行程式進行有效保證。電子產品是硬體設備,硬體設 備就像機器機械一樣是可以看得見摸得著的具體物件設施。物質和能量,源頭物料可以通過 不同的設計工廠設計師加工進行生產設計,開發形成不同的可 ...
  • Django 一、Django介紹 1.1 簡介 Django是python語言中的一個web框架,Python語言中主流的web框架有Django、Tornado、Flask 等多種。Django相較與其它WEB框架,其優勢為:大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Session ...
  • 數據傳輸的過程首先要建立網路連接 。數據傳輸單元為數據包 DATA PRAGRAM. 電腦數 據網路的互通互聯物理硬體和軟體程式的管理。區域網絡是美國國防部連接不同電腦器設 備的一種方式 。光纜傳輸數據的速度更慢 。海底光纖的架設, 2000 年左右使得全球互聯網 時代惠國惠民。電腦信息技術起 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...