海象運算符(賦值運算符)
#原來 def choice(): s = ' jsadlk '.strip() res = isinstance(s, int) if res: return 'int' else: return 'other' res = choice()
#使用了海象運算符之后
s = ' jsadlk '.strip() def choice(): if res:=isinstance(s, int): #如果res為真的話賦值給res return res else:return res res = choice()
也可以用於循環
a = True while a: print('helloworld')
使用了海象運算符之后↓
while a:=True: print('helloworld')
f-string
a = '你好' b = '世界' print(f'a={a} b={b}') # a=你好 b=世界 # f-string在3.8中變得更加簡潔 a = '你好' b = '世界' print(f'{a=} {b=}') # a=你好 b=世界
#還添加了賦值符號!s和!f,制定輸入結果格式
import datetime time = datetime.datetime.now() print(f'{time=!s}') # time=2019-07-30 16:58:00.123412 import math print(f'{math.pi=!f:.2f}') # 精確到小數點后面兩位
[/],[*]
有新的語法(/)表示必須按位置指定某些函數參數(即,不能用作關鍵字參數
# 使用「/」規定哪些變量的輸入必須按照第一種格式
適用范圍如下:
/的所有剩余參數都只作為位置處理。
如果/未在函數定義中指定,則該函數不接受任何位置參數。
圍繞僅針對位置的參數的可選值的邏輯與針對位置或關鍵字參數的邏輯相同。
一旦用默認值指定了一個position -only參數,下面的position -only和position -or-keyword參數也需要有默認值。
沒有默認值的僅定位參數是必需的僅定位參數。
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): ---------- ---------- ---------- | | | | 位置 和 關鍵字 參數 | | - 只有關鍵字參數 -- 只有位置參數
其中/和*是可選的。如果使用這些符號,則通過參數傳遞給函數的方式來指示參數的類型:position -only、position -or-keyword和key - word-only。關鍵字參數也稱為命名參數。
pos_or_kwd參數
如果/和*在函數定義中不存在,則可以通過位置或關鍵字將參數傳遞給函數。
pos-only參數
更詳細地看一下,可以將某些參數標記為position -only。如果只是位置,則參數的順序很重要,並且不能通過關鍵字傳遞參數。位置參數將放在/(正斜杠)之前。/用於邏輯上將位置參數與其他參數分開。如果函數定義中沒有/,則沒有位置參數。
key-only
要將參數標記為僅關鍵字參數,指示參數必須通過關鍵字參數傳遞,請在參數列表中第一個僅關鍵字參數之前放置*。
所以/后面的參數可以是位置或關鍵字或關鍵字。
#下面是有效的位置函數
def name(p1, p2, /, p_or_kw, *, kw): def name(p1, p2=None, /, p_or_kw=None, *, kw): def name(p1, p2=None, /, *, kw): def name(p1, p2=None, /): def name(p1, p2, /, p_or_kw): def name(p1, p2, /):
def name(p1, p2): #當然不加的話沒有任何影響,和以前的沒有區別
#下面是有效的定義函數 def name(p_or_kw, *, kw): def name(*, kw):
#下面是無效的函數定義 def name(p1, p2=None, /, p_or_kw, *, kw): def name(p1=None, p2, /, p_or_kw=None, *, kw): def name(p1=None, p2, /):
總結:通過/或者*可以指定位置參數,常規參數,關鍵字參數在函數形參位置帶來更好的可讀性,重構性,錯誤提示性
多進程共享內存
multiprocessing模塊提供了SharedMemory類,可以在不同的Python進城之間創建共享的內存區域
__pycache__
# __pycache__目錄是由 Python3 解釋器創建的,用於保存.pyc 文件。這些文件保存着解釋器編譯.py 文件之后的字節碼(byte code)。之前的 Python 版本僅僅只是為每個.py 文件創建一個.pyc 文件,但是新版本會有所變化。
#
# 為了支持多版本的 Python,包括一些不是 CPython 的版本(如 PyPy),現在庫文件會為每個 Python 版本創建對應的.pyc 文件,格式形如「name.interp-version.pyc」。例如,某個 foo.py 文件在第一次使用的時候會創建一個對應的 pyc 文件,其路徑為「__pycache__/foo.cpython-37.pyc」,這個 pyc 文件會定義使用的 Python 版本。
python3.8將於不晚於2019年10月份,3.9版本估計在2020年左右
更多參考文檔 https://docs.python.org/3.8/whatsnew/3.8.html#assignment-expressions
