1. 程式人生 > >Python 3.7.1 官方文件 總結

Python 3.7.1 官方文件 總結

Python 3.7.1


目的: 針對有些python基礎,但是又沒看過(或者不想看)官方文件的同學。我把其中比較重要和有用的部分摘出來,你可以瀏覽一遍

1.一些概念

  1. 計算機不能直接理解任何除機器語言以外的語言,所以必須要把程式設計師所寫的程式語言翻譯成機器語言,計算機才能執行程式。將其他語言翻譯成機器語言的工具,被稱為編譯器。編譯器翻譯的方式有兩種:一個是編譯,一個是解釋。
  2. python 是非常高階語言,Python 是一門解釋性的語言,Python是可擴充套件的
  3. Python原始檔預設以UTF-8編碼。

2.小用法

  1. 可以在 #!行之後再增加一個特殊註釋行來定義檔案的編碼
    例如: # -*- coding: utf-8 -*-(必須在第一行指定,除非第一行使用了#!/usr/bin/env python3
  2. 要做 floor 除法 並且得到一個整數結果(返回商的整數部分) 可以使用 // 運算子;要計算餘數可以使用 %:同時獲取兩者可以使用divmod(x,y)
    x = 17
    y = 3
    print(x//y) #結果是5
    print(x%3) #結果是2
    print(divmod(x,y)) #結果是(5, 2)
  1. 通過Python,可以使用**做n次方運算:
    >>>5 ** 2 # 結果是25
  2. 同時混合的數型的運算將使結果由整數轉換為浮點數︰
    >>>7.0 / 2 # 結果是3.5
  3. 在互動模式下,最後輸出的表示式會被賦值給變數_
>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06
  1. 當遍歷一個序列時,使用enumerate()函式可以同時得到位置索引和對應的值。
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe
  1. 同時遍歷兩個或更多的序列,使用zip()函式可以成對讀取元素。
>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

2.1 迭代器:

(1)迭代器的用法在 Python 中普遍而且統一。在後臺,for語句呼叫容器物件的iter()方法。該函式返回一個定義了__next__()方法的迭代器物件,它一次訪問容器中的一個元素。沒有後續的元素時,__next__()會引發StopIteration 異常,告訴 for迴圈停止迭代。你可以使用內建的 next() 來呼叫__next__(),例子如下:

>>> s = 'abc'
>>> it = iter(s)
>>> it
<iterator object at 0x00A1DB50>
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
    next(it)
StopIteration

(2)看過迭代器協議背後的機制後,將很容易將迭代器的行為新增到你的類中。定義一個__iter__()方法,它返回一個帶有__next__()的物件。如果類已經定義__next__(),那麼__iter__()可以直接返回self:

def fun20_iter():

    class Reverse:
        """Iterator for looping over a sequence backwards."""

        def __init__(self, data):
            self.data = data
            self.index = len(data)

        def __iter__(self):
            return self

        def __next__(self):
            if self.index == 0:
                raise StopIteration
            self.index = self.index - 1
            return self.data[self.index]

    rev = Reverse('spam')
    for c in rev:
        print(c,end='')
if __name__ == "__main__":
    fun20_iter()
# 輸出結果
maps

2.2 生成器

生成器是一種可以簡單有效的建立迭代器的工具。它們像常規函式一樣撰寫,但是在需要返回資料時使用yield語句。每當對它呼叫next(),生成器從它上次停止的地方重新開始(它會記住所有的資料值和上次執行的語句)。以下示例演示了生成器可以非常簡單地創建出來:

def fun21_yeild():
    def reverse(data):
        for index in range(len(data) - 1, -1, -1):
            yield data[index]

    for c in reverse('sabcdefg'):
        print(c,end='')

if __name__ == "__main__":
    fun21_yeild()
# 輸出結果
gfedcbas

3.資料結構

3.1 字串

(1)如果你不想讓 \ 被解釋為特殊字元開頭的字元,您可以通過新增 r 使用 原始字串

>>> print('C:\some\name')  # here \n means newline!
C:\some
ame
>>> print(r'C:\some\name')  # note the r before the quote
C:\some\name

(2)字串可以用+操作符連線,也可以用*操作符重複多次:

# 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'

(3)相鄰的兩個或多個字串字面量(用引號引起來的)會自動連線。
這個功能在你想切分很長的字串的時候特別有用:

>>> text = ('Put several strings within parentheses '
...         'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'

(4)除了索引,還支援切片。索引用於獲得單個字元,切片讓你獲得子字串(顧左不顧右):

>>> word[0:2]  # characters from position 0 (included) to 2 (excluded)
'Py'
>>> word[2:5]  # characters from position 2 (included) to 5 (excluded)
'tho'

(5)切片索引具有非常有用的預設值;省略的第一個索引預設為零,省略第二個索引預設為切片字串的長度。
在這裡插入圖片描述
(6)Python 字串不能更改。因此,賦值給字串索引的位置會導致錯誤:

3.2 列表

Python 有幾個 複合資料型別,用來組合其他的值。其中之一是列表
1.各種切片操作會返回一個包含所請求元素的新列表。這意味著下面這個切片操作將會返回一個此列表的()拷貝:

>>> squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2.與字串的不可變特性不同,列表是可變的型別

3.2.1 列表方法

引用自:列表操作

list.append(x)

新增一個元素到列表的末尾。相當於 a[len(a):] = [x].

list.extend(L)

將給定列表L中的所有元素附加到原列表a的末尾。相當於 a[len(a):] = L.

list.insert(i, x)

在給定位置插入一個元素。第一個引數為被插入元素的位置索引,因此 a.insert(0, x) 在列表頭插入值, a.insert(len(a), x)相當於 a.append(x).

list.remove(x)

刪除列表中第一個值為 x 的元素。如果沒有這樣的專案則會有一個錯誤。

list.pop([i])

刪除列表中給定位置的元素並返回它。如果沒有給定位置,a.pop()將會刪除並返回列表中的最後一個元素。(i 兩邊的方括號表示這個引數是可選的,而不是要你輸入方括號。你會在 Python 參考庫中經常看到這種表示法)。

list.clear()

刪除列表中所有的元素。相當於 del a[:].

list.index(x)

返回列表中第一個值為 x 的元素的索引。如果沒有這樣的元素將會報錯。

list.count(x)

返回列表中 x 出現的次數。

list.sort(key=None, reverse=False)

排序列表中的項 (引數可被自定義, 參看 sorted() ).

list.reverse()

列表中的元素按位置反轉。

list.copy()

返回列表的一個淺拷貝。相當於 a[:].

3.2.2 用途

3.2.2.1 棧

列表方法使得將列表用作堆疊非常容易,使用 append()新增項到棧頂。使用無參的 pop() 從棧頂檢出項。

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]

3.2.2.2 佇列

列表也有可能被用來作佇列,效率很低。若要實現一個佇列, collections.deque 被設計用於快速地從兩端操作。例如:

def fun15_queue():
    from collections import deque
    q = deque(['1',2,3,4,5,6])
    q.popleft()
    print(q)

if __name__ == "__main__":
    fun15_queue()
# 輸出結果
'deque([2, 3, 4, 5, 6])'

3.2.2.3 推導式

3.2.2.3.1 普通推導式

列表推導式提供一個生成列表的簡潔方法。
例如:squares = [x**2 for x in range(10)]
上面的例子用於生成一個具有10個元素的列表,元素的值分別是是0,1,…9的平方。
列表推導式由一對方括號組成,方括號包含一個表示式,其後跟隨一個for子句,然後是零個或多個for或if子句。結果將是一個新的列表,其值來自將表示式在其後的for和if子句的上下文中求值得到的結果。例如,下面的 listcomp 組合兩個列表中不相等的元素:

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

如果表示式是一個元組(例如,前面示例中的(x, y)),它必須位於圓括號中,否則會報錯,如下所示:

>>> # the tuple must be parenthesized, otherwise an error is raised
>>> [x, x**2 for x in range(6)]
  File "<stdin>", line 1, in ?
    [x, x**2 for x in range(6)]
               ^
SyntaxError: invalid syntax
3.2.2.3.2 巢狀推導式

列表推導式的第一個表示式可以是任何表示式,包括另外一個列表推導式。
考慮下面由三個長度為 4 的列表組成的 3x4 矩陣:

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

下面的列表推導式將轉置行和列:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

正如在前一節中我們所見,巢狀的列表推導式在它後面的for上下文中求值,所以這個例子等效於:

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

在實際中,與複雜的控制流比起來,你應該更喜歡內建的函式。zip()函式對這個使用場景做得非常好:

>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

3.3 元組

有兩種序列資料型別,因為 Python 是一個正在不斷進化的語言,其他的序列型別也可能被新增進來。還有另一種標準序列資料型別:元組(不可改變)。
元組由一組用逗號分隔的值組成,例如:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

一個特殊的問題是構造包含0個或1個元素的元組:為了實現這種情況,語法上有一些奇怪。空的元組通過一對空的圓括號構造;只有一個元素的元組通過一個元素跟隨一個逗號構造(僅用圓括號把一個值括起來是不夠的)。醜陋,但是有效。例如:
在這裡插入圖片描述
語句t = 12345, 54321, 'hello!'是元組封裝的一個例子:值12345、54321和’hello!'被一起分封裝在一個元組中。其逆操作也是可以的:

def fun17():
    t = 12345, 54321, 'hello!'
    print(type(t))
    x,y,z = t
    print(x,y,z)

if __name__ == "__main__":
    fun17()
# 輸出結果
'''
<class 'tuple'>
12345 54321 hello!
'''

這被稱為序列分拆再恰當不過了,且可以用於右邊的任何序列。序列分拆要求在等號的左側有與序列中的元素一樣多的變數。注意多重賦值只是同時進行元組封裝和序列分拆。

3.4 集合

集合中的元素不會重複且沒有順序。集合的基本用途包括成員測試和消除重複條目。集合物件也支援數學運算,如並,交,差和對稱差。
類似於列表推導式,集合也支援推導式:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

3.5 字典

與由數字索引的序列不同,字典是依據鍵索引的,鍵可以是任意不可變的型別;字串和數字始終能作為鍵。元組可以用作鍵,如果它們只包含字串、 數字或元組;如果一個元組直接或間接地包含任何可變物件,它不能用作鍵。不能使用列表作為鍵。

3.6 總結

序列物件可以與具有相同序列型別的其他物件相比較。比較按照 字典序 進行: 首先比較兩個序列的首元素,如果不同,就決定了比較的結果;如果相同,就比較後面兩個元素,依此類推,直到其中一個序列窮舉完。如果要比較的兩個元素本身就是同一型別的序列,就按字典序遞迴比較。如果兩個序列的所有元素都相等,就認為序列相等。如果一個序列是另一個序列的初始子序列,較短的序列就小於另一個。字串的詞典序使用Unicode碼點數字來排序單個字元。下面是同類型序列之間比較的一些例子:

(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4)           < (1, 2, 4)
(1, 2)                 < (1, 2, -1)
(1, 2, 3)             == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)

4.控制流程

1.我們可以寫一個生成斐波那契 初始子序列的程式,如下所示

>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while b < 10:
...     print(b)
...     a, b = b, a+b
...
# 輸出結果
1 1 2 3 5 8

2.關鍵字引數 end 可以避免在輸出後面的空行,或者可以指定輸出後面帶有一個不同的字串:

>>> a, b = 0, 1
>>> while b < 1000:
...     print(b, end=',')
...     a, b = b, a+b
...
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

3.for 語句是種 迭代器。list() 函式是另一個;它從可迭代量建立列表︰
4.迴圈語句可以有一個 else 子句;當(for)迴圈迭代完整個列表或(while)迴圈條件變為假,而非由break語句終止時,就會執行這個else語句。下面迴圈搜尋質數的程式碼例示了這一點:

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x
            
           

相關推薦

Python 3.7.1 官方 總結

Python 3.7.1 1.一些概念 2.小用法 2.1 迭代器: 2.2 生成器 3.資料結構 3.1 字串 3.2 列表 3.2.1 列表方法 list

CentOS7.3利用kubeadm安裝kubernetes1.7.3完整版(官方填坑篇)

安裝前記: 近來容器對企業來說已經不是什麼陌生的概念,Kubernetes作為Google開源的容器執行平臺,受到了大家的熱捧。搭建一套完整的kubernetes平臺,也成為試用這套平臺必須邁過的坎兒。kubernetes1.5版本以及之前,安裝還是相對比較方便的,官方

Hadoop(2.7.3)叢集配置-官方

目標 本文描述瞭如何安裝、配置和管理有實際意義的Hadoop叢集,其規模可從幾個節點的小叢集到幾千個節點的超大叢集。如果你希望在單機上安裝Hadoop玩玩,從這裡(Single Node Setup)能找到相關細節。 這份文件不包含更先進話題,比如安

[Python 3系列]讀寫

file文件路徑文件有兩個關鍵屬性:“文件名”和“路徑”。路徑指明了文件在計算機上的位置。在windows上,路徑書寫使用倒斜杠作為文件夾之間的分隔符。但在OS X和Linux上,使用正斜杠作為它們的路徑分隔符。如果想要程序運行在所有操作系統上,在編寫python腳本時,必須處理這兩種情況。如果將單個文件和路

Python 3.7.1 基礎 資料型別 列表 元組 字串

序列型別 1.前言 2.序列的通用操作 3. 序列型別 3.1 可變序列型別 3.1.1 列表 List 3.1.1.1 class list([iterable]) 3.1.1.2 s

Python 3.7.1 模組 正則表示式 re

正則表示式操作 1. 正則表示式語法 1.1 特殊字元 . ^ $ * + ? *?,+?,?? {m} {m,n} {m,n}

Python 3.7.1 模組 string

string-常用string操作 1. 字串常量 string.ascii_letters string.ascii_lowercase string.ascii_uppercase string.digits stri

Python 3.7.1 基礎-資料型別-字串

字串 1.基本內容 1.1 概念 1.2 構造方法 1.3 組成 1.3.1 轉義 1.4 例子: 2.方法 2.1 大小寫 str.capitali

lodash官方總結

    lodash官方中文文件:https://www.css88.com/doc/lodash/ Array      _.chunk   (一個數組在內部分割出兩個陣列,可以指定第一個陣列的引數個數) _

Python 3.7.1 基礎-內建型別

內建型別 1.真值測試 2.布林運算 3.比較運算子 4.數值型別 4.1 操作運算子 4.2 整數的一些方法 int.bit_length() int.to_bytes(length, byteo

Python 3.7.1 基礎 資料型別 集合 set

集合 1. 構造 2. 方法 2.1 set 和 frozenset的公有操作: len(s) x in s x not in s isdisjoint(other) issubset(o

Python 3.7.1 模組 資料型別 淺和深拷貝操作 copy

目錄 1. 需求描述 2. 模組方法 copy.copy(x) copy.deepcopy(x[, memo]) exception copy.error 3. 區別 3.1 普通例項 3.2

Python 3.7.1 模組 資料型別 高效的數值陣列 array

結構 1. 明確陣列型別 2. 定義 class array.array(typecode[, initializer]) 3.方法和常量 3.1 常量 array.typecodes 常量

Python 3.7.1 模組 併發執行 底層執行緒API _thread

底層執行緒API 1._thread 函式 exception _thread.error _thread.LockType _thread.start_new_thread(function, args[, kwargs]) _

Django專案:堡壘機(Linux伺服器主機管理系統)--01--01堡壘機重寫DJANGO賬戶表 python相關軟體安裝流程圖解————————python安裝——————python-3.7.1-amd64 python相關軟體安裝流程圖解————————pycharm安裝——————pyc

  python相關軟體安裝流程圖解————————python安裝——————python-3.7.1-amd64  https://www.cnblogs.com/ujq3/p/10098166.html   python相關軟體安裝流程圖解————————pyc

django 2.1官方翻譯-模板(進行中)

django的官方文件在transifex上翻譯,本來想貢獻一下,結果發現那個介面實在是受不了。自己翻吧 模板 作為一個Web框架,Django需要一種動態生成HTML的便捷方式。最常見的方法是使用模板。模板包含HTML輸出的靜態部分以及能插入動態內容的一些特殊語法。有關使用模板建立HT

《Spark1.6.1官方》Spark1.6.1操作指南

原文連結   譯者:小村長 本專案是 Apache Spark1.6.1方文件的中文翻譯版,之前翻譯過spark1.5,由於網站有組織翻譯Spark1.6.1所以我又重新翻譯了一下,我翻譯的這一章和spark1.5一樣。本次翻譯主要針對對Spark感興趣和致力於從事大資料方法開發的人員提供有價

SpringBoot 2.1.1 官方閱讀筆記 part1

2.1.1版本要求: Java 8 至 Java 11 Spring 5.1.3 內建工具支援: Maven 3.3+ Gradle 4.4+ 內建 servlet 容器: Tomcat 9.0 要求 Servlet 4

01.centos 7 安裝 python 3.7.1

make download orm gdbm python2 usr b- ncurses 查看 centos 7 安裝 python 3.7.1 https://www.python.org/downloads/source/ 在官網上下載 Python-3.7.1.ta

Python官網中,Python 3.7.1 的windows版本的區別

python官網有幾個下載檔案,有什麼區別? 1、進入Python官網http://www.python.org,在“Downloads”下拉選單中選擇相應的作業系統,我們選擇windows。 Python 3.7.1 - 2018-10-20 Download