Python 3.7.1 學(xué)習(xí)

易混淆點總結(jié)

1. / 和//和%的區(qū)別

  • 除法(/)永遠返回一個浮點數(shù)
  • 取整除法(//)
  • 只要余數(shù)(%)
    舉例:
    圖片.png

2. 用python計算n ** b的值,如 5 ** 2 = 5 * 5 = 25

圖片.png

3. 對浮點數(shù)有完整的支持

在整數(shù)和浮點數(shù)的混合計算中,整數(shù)會被轉(zhuǎn)換為浮點數(shù)計算:


圖片.png

4. 分割字符串

字符串也可以被截?。z索)。類似于C,字符串的第一個字符索引為0.Python沒有單獨的字符類型;一個字符就是一個簡單的長度為1的字符串。
  舉例:

圖片.png

注意:
  * 字符串的索引也可以是負數(shù),若為負數(shù)則從右邊開始計算
  * -0實際上就是0,所以-0不會導(dǎo)致從右邊開始計算

5. 字符串取子串

索引用于獲得單個字符串,切片讓你獲得一個子字符串
  舉例:

圖片.png

注意:
   * 字符串切片包含起始的字符,不包含末尾的字符。這使得 s[:i] + s[i:]永遠等于s

6. 格式化字符串

1)Python-3.7.1相對于Python-3.6新增的 【Formatted string literals】

字符串文字 功能 描述
!s str() 在結(jié)果中調(diào)用str()函數(shù)
!r repr() 在結(jié)果中調(diào)用repr()函數(shù)
!a ascii() 在結(jié)果中調(diào)用ascii()函數(shù)
ord('\n') 獲取'\n'的ASCII值
  1. f格式化字符串示例,如圖【f格式化字符串示例】所示


    圖片.png
  1. 注意事項
  • 替換字段中的字符不得與外部格式化字符串文字中使用的引號沖突,如圖【替換字段中的符號】所示:


    圖片.png
  • f格式表達式中不允許出現(xiàn)反斜杠,否則會報錯,如圖【反斜杠報錯】所示:


    圖片.png
  • 通過創(chuàng)建臨時變量實現(xiàn)字符串中包含反斜杠,如圖【創(chuàng)建臨時變量包含反斜杠】所示:


    圖片.png

7. For語句

注意:
在迭代過程中修改迭代序列不安全,推薦的做法是為:
如果你想要修改你迭代的序列(例如,復(fù)制選擇項),你可以迭代它的復(fù)本。使用切割標識就可以很方便的做到這一點,如下代碼所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == "__main__":
    words = ["red", "yellow", "green", "black", "orange"]
    for elem in words[:]:  #循環(huán)遍歷整個列表的切片副本
        if len(elem) > 5:
            words.insert(0, elem)

    print(words)

結(jié)果:

圖片.png

8. 特殊語句------循環(huán)中的else子句

與循環(huán)一起使用時,else 子句與 try 語句的 else 子句比與 if 語句的具有更多的共同點:try 語句的 else 子句在未出現(xiàn)異常時運行,循環(huán)的 else 子句在未出現(xiàn) break 時運行

#!/usr/bin/env python
# -*- coding: utf-8 -*-
if __name__ == "__main__":
    for n in range(2, 10):
        for x in range(2, n):
            if n % x == 0:
                print(n, 'equals', x, '*', n//x)
                break
        else:  #注意:此else語句是屬于for循環(huán)之中,不是if語句的
            # 循環(huán)沒有找到一個因素,則當(dāng)前n為素數(shù)
            print(n, 'is a prime number')

結(jié)果:
  

圖片.png

9. 參數(shù)列表分拆

當(dāng)你要傳遞的參數(shù)已經(jīng)是一個列表,但要調(diào)用的函數(shù)卻接受分開一個個的參數(shù)值。這時候你要把已有的列表拆開來。例如內(nèi)建函數(shù) range() 需要要獨立的 start,stop 參數(shù)。你可以在調(diào)用函數(shù)時加一個 * 操作符來自動把參數(shù)列表拆開,如圖【用*分拆list】所示:

  
圖片.png

以同樣的方式,可以使用 ** 操作符分拆關(guān)鍵字參數(shù)為字典,如下代碼所示:

  #!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == "__main__":
    def parrot(voltage, state='a stiff', action='voom'):
        print("--This parrot wouldn't", action, end=' ')
        print("if you put", voltage, "volts through it.", end=' ')
        print("E's", state, "!")

    d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
    parrot(**d)

輸出結(jié)果,如圖【輸出結(jié)果】所示:

  
圖片.png

10. 關(guān)于列表的常見方法(未完全列出)

1) list.remove(x)
  刪除列表中值為 x 的第一個元素。如果沒有這樣的元素,就會返回一個錯誤
  2) list.pop([i])
  從列表的指定位置刪除元素,并將其返回。如果沒有指定索引,a.pop() 返回最后一個元素。元素隨即從列表中被刪除(方法中 i 兩邊的方括號表示這個參數(shù)是可選的,而不是要求你輸入一對方括號,你會經(jīng)常在Python 庫參考手冊中遇到這樣的標記)
  3) list.clear()
  從列表中刪除所有元素。相當(dāng)于 del a[:]
  4) list.index(x)
  返回列表中第一個值為 x 的元素的索引。如果沒有匹配的元素就會返回一個錯誤。
  5) list.count(x)
  返回 x 在列表中出現(xiàn)的次數(shù)
  6) list.copy()
  返回列表的一個淺拷貝。等同于 a[:]

11. 列表推導(dǎo)式

列表推導(dǎo)式由包含一個表達式的括號組成,表達式后面跟隨一個 for 子句,之后可以有零或多個 for 或 if 子句。結(jié)果是一個列表,由表達式依據(jù)其后面的 for 和 if 子句上下文計算而來的結(jié)果構(gòu)成
  例如,如下的列表推導(dǎo)式結(jié)合兩個列表的元素,如果元素之間不相等的話,就把倆元素按(a,b)的形式存入list中:

  
圖片.png

等同于:

  
圖片.png

12. zip()函數(shù)

zip() 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個個元組,然后返回由這些元組組成的列表。
如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓為列表。
  注:zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中為了減少內(nèi)存,zip() 返回的是一個對象。如需展示列表,需手動 list() 轉(zhuǎn)換。

  
圖片.png
圖片.png

13. 集合

集合是一個無序不重復(fù)元素的集?;竟δ馨P(guān)系測試和消除重復(fù)元素。集合對象還支持 union(聯(lián)合),intersection(交),difference(差)和 sysmmetric difference(對稱差集)等數(shù)學(xué)運算。
  創(chuàng)建集合:大括號或 set() 函數(shù)可以用來創(chuàng)建集合。
  注:想要創(chuàng)建空集合,必須使用set()而不是{}。后者用于創(chuàng)建空字典。
  示例:

  
圖片.png

集合的推導(dǎo)式語法:

  
圖片.png

14. 字典

python 3.7.1 和 python 3.6.3 之間的不同處
  需求: 返回一個字典中所有關(guān)鍵字組成的無序列表
  在python 3.6.3中采用的方法是:對一個字典執(zhí)行 list(d.keys()),如下截屏所示:
  

圖片.png

在python 3.7.1中采用的方法是: 對一個字典執(zhí)行 list(d)如下截屏所示:
  注:python 3.7.1 兼容python 3.6.3的方法(即用python 3.6.3的方法,在python 3.7.1中不會報錯)

  
圖片.png

需求: 返回一個字典中所有關(guān)鍵字組成的列表,并對此列表排序
  在python 3.6.3中采用的方法是:對一個字典執(zhí)行 sorted(d.keys()) ,如下截屏所示:
  

圖片.png

在python 3.7.1中采用的方法是: 對一個字典執(zhí)行 list(d)如下截屏所示:
  注:python 3.7.1 兼容python 3.6.3的方法(即用python 3.6.3的方法,在python 3.7.1中不會報錯)

  
圖片.png

字典中的小技巧:
  1) dict() 構(gòu)造函數(shù)可以直接從 key-value 對中創(chuàng)建字典
  

圖片.png

2) 字典推導(dǎo)式可以從任意的鍵值表達式中創(chuàng)建字典

  
圖片.png

3) 如果關(guān)鍵字都是簡單的字符串,有時通過關(guān)鍵字參數(shù)指定 key-value 對更為方便

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> 

15. 循環(huán)技巧

1) 在字典中循環(huán)時,關(guān)鍵字和對應(yīng)的值可以使用 items() 方法同時解讀出來:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
... 
gallahad the pure
robin the brave
>>> 

2) 在列表循環(huán)時,索引位置和對應(yīng)值可以使用 enumerate() 函數(shù)同時得到:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
... 
0 tic
1 tac
2 toe
>>> 

3) 同時循環(huán)兩個或更多的列表,可以使用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.
>>> 

16. 深入條件控制

比較操作符可以傳遞。例如a < b == c審核是否a小于b并且b等于c

>>> a,b,c = 1,2,2
>>> if a < b == c :
...     print(True)
... else:
...     print(False)
... 
True
>>> 

17. 性能度量

例如,使用元組封裝和拆封來交換元素看起來要比使用傳統(tǒng)的方法要誘人的多。timeit 證明了后者更快一些:

>>> from timeit import Timer
>>> Timer('t=a;a=b;b=t','a=1;b=2').timeit()
0.021459163981489837
>>> Timer('a,b=b,a','a=1;b=2').timeit()
0.01870661400607787
>>> 

相對于 timeit 的細粒度,profile 和 pstats 模塊提供了針對更大代碼塊的時間度量工具。
  
參考文檔:
http://www.pythondoc.com/pythontutorial3/datastructures.html
https://docs.python.org/3/tutorial/datastructures.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容