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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...