天天看點

python3.8新特性 邏輯表達式_python3.8新特性

海象運算符(指派運算符)

#原來

defchoice():

s= 'jsadlk'.strip()

res=isinstance(s, int)ifres:return 'int'

else:return 'other'res= choice()

#使用了海象運算符之後

s = 'jsadlk'.strip()defchoice():if res:=isinstance(s, int): #如果res為真的話指派給res

returnreselse:returnres

res= choice()

也可以用于循環

a =Truewhilea: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,制定輸入結果格式

importdatetime

time=datetime.datetime.now()print(f'{time=!s}')#time=2019-07-30 16:58:00.123412

importmathprint(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年左右