日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python最新功能_Python在2020的新增功能:第1部分

發布時間:2025/3/12 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python最新功能_Python在2020的新增功能:第1部分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自從很久以前改用了python3,語言層面的特征變化就相對較小了,然而對于每一個版本,Python都會添加一些新函數。

隨著Python3.8于2019年10月發布,我發現自己使用的是這種語言的一些特性,關于Python每個版本新增的特性,有如下

3.5-類型注解

3.6-異步

3.7-數據類

3.8-海象算子

3.9-字典聯合運算符和泛型類型提示

以上所有的這些,我都會在代碼庫中使用到。

oapbox演講:如果你仍在工作或項目中使用舊版本的Python,不要害怕升級!你的舊代碼仍然可以工作,而且你將從Python的新特性中獲益!

免責聲明:如果你仍然使用Python2.7,在這種情況下,我知道你很有可能不會升級。

下面我將回顧(快速)我最喜歡的一些特性,我希望你可以在你的代碼中使用。

它們是:類型注解、數據類、字典聯合運算符、海象算子。

在這第一部分,我主要介紹:類型注解,海象算子。

Python 3.5

從Python 3開始,Typing就成為了一個特性。因為我們是開發人員,而不是歷史學家,所以Typing將提供類型注解和類型提示。

Python不需要為變量指定類型,這是我如此熱愛這門語言的部分原因。清晰易讀的語法,可以用20多種不同的方法編寫一個解決方案,但仍能得到相同的結果。

但后來隨著應用程序的增長,或者回頭看看你幾個月或幾年沒碰過的代碼,或者去閱讀別人寫的代碼。

這種情況下,你就會意識到變量不指定類型對你來說沒有啥好處。

Typing 可以幫助你解決這個問題,這也是TypeScript如此流行的原因。

from typing import List

def print_cats(cats: List[str]) -> None:

for cat in cats:

print(f"{cat} has a name with {len(cat)} letters.")

class Cat(object):

def init(self, name: str, age: int, **attrs):

self.cattributes = {

"name": name,

"age": age,

**attrs

}

cats = "this still works w/o type annotation!"

cats: List[str] = ["Meowie", "Fluffy", "Deathspawn"]

不是字符串列表,Python不會檢查

cats2: List[str] = [Cat("Meowie", 2), Cat("Deathspawn", 8)]

print_cats(cats)

print_cats(cats2) # 失敗

這將返回:

Meowie has a name with 6 letters.

Fluffy has a name with 6 letters.

Deathspawn has a name with 10 letters.

...

TypeError: object of type 'Cat' has no len()

類型注解在這里并沒有起到任何作用,那為什么要使用它們呢?因為在創建變量cats并用List[str]時,很明顯分配的數據應該與該結構相匹配,因此對于具有復雜類型的可維護代碼來說,這將變得更加有用。

from typing import List

class Cat(object):

def init(self, name: str, age: int, **attrs):

self.cattributes = {

"name": name,

"age": age,

**attrs

}

創建類型變量

Cats: type = List[Cat]

def print_cats(cats: Cats) -> None:

for cat in cats:

name: str = cat.cattributes.get("name")

print(f"{name} has a name with {len(name)} letters.")

cats = [Cat("Meowie", 2), Cat("Deathspawn", 8)]

print_cats(cats)

輸出:

Meowie has a name with 6 letters.

Deathspawn has a name with 10 letters.

在函數/方法定義中鍵入參數稱為類型暗示,而且類型甚至不必是Python數據類型或來自typing模塊。例如最后一行提示性字符串是完全合法的:

import pandas as pd

cols = ["name", "age", "gender"]

data = [["Meowie", 2, "female"],

["Fluffy", 5, "male"],

["Deathspawn", 8, "rather not say"]]

df: pd.DataFrame = pd.DataFrame()

df: "name (string), age (integer), gender (string)" =

pd.DataFrame(data, columns=cols)

在數據處理管道中,如果有很多復雜類型的變量,那這樣的操作可能會很有用,因為你可能搞不清楚讀取的數據是什么結構,你會試圖把它們弄清楚。在IDE上鼠標懸停在變量上會有類型提示的信息,而不是一個簡單的pandas.DataFrame提示。

額外的好處是:在python4中,前向引用可以開箱即用,這意味著你可以對尚未定義的類型進行注解。我們現在仍然可以利用這種優勢,在文件頂部編寫from future import annotations,然后執行以下操作:

from future import annotations

class Food:

"""

Food是合法的,即使沒有類別的定義。

"""

def init(self, ingred_1: Food, ingred_2: Food) -> None:

self.ingred_1 = ingred_1

self.ingred_2 = ingred_2

原生類型注解-3.9

內置泛型類型是3.9中的一個特性,我們不需要從typing中導入以向泛型數據類型添加參數。從3.7版開始,使用from futures import annotations就可以使用這種方法,但這是因為它阻止了在運行時計算類型引用。

這個功能讓我很興奮。在3.8中我將typing導入每個模塊,或者導入在公共模塊中。

示例(信貸:PEP 585):

l = liststr

[]

list is list[str]

False

list == list[str]

False

list[str] == list[str]

True

list[str] == list[int]

False

isinstance([1, 2, 3], list[str])

TypeError: isinstance() arg 2 cannot be a parameterized generic

issubclass(list, list[str])

TypeError: issubclass() arg 2 cannot be a parameterized generic

isinstance(list[str], types.GenericAlias)

True

def find(haystack: dict[str, list[int]]) -> int:

...

海象算子-3.8

海象有眼睛:,然后有牙齒=。

:=是Python3.8中新增的賦值表達式。

complicated = {

"data": {

"list": [1,2,3],

"other": "stuff"

}

}

if (nums := complicated.get('data').get('list')):

print(nums)

結果:

1

2

3

如果沒有海象,會有更多的代碼行。

...

nums = complicated.get('data').get('list')

if nums:

print(nums)

由于控制流語句在編程中經常使用,使用海象算子可以簡化代碼。

來自PEP 572:

這樣的命名表達式的值與合并表達式的值的結果是相同的,但附加的作用是目標被賦給了該值

換言之,用一個表達式表達了兩個語句。

在我復制/粘貼PEP指南的同時,這里還有一些規范中的示例,我認為它們是很好的示例。迫不及待地想嘗試一下海象算子來理解列表。

#處理匹配正則表達式

if (match := pattern.search(data)) is not None:

# 匹配后...

一個更直觀易寫的循環

while chunk := file.read(8192):

process(chunk)

重用一個計算成本很高的值

[y := f(x), y2, y3]

在理解filter語句及其輸出之間共享子表達式

filtered_data = [y for x in data if (y := f(x)) is not None]

總結

以上是生活随笔為你收集整理的python最新功能_Python在2020的新增功能:第1部分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。