自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

9種你不知道的Python 3功能

開發(fā) 后端
以下是一些罕見特征的說明,這些特征只能在Python 3中找到,目的是快速解決Python問題。

由于Python EOL,一些開發(fā)人員已開始將其Python版本從2轉(zhuǎn)換為3。 最著名的更改之一是Python 3中的print() 函數(shù)替換了Python 2中的print函數(shù)。但是,如果在print關(guān)鍵字之后添加空格,則括號會在Python 2中起作用,因為解釋器會將其視為表達式 。

以下是一些罕見特征的說明,這些特征只能在Python 3中找到,目的是快速解決Python問題。

所有示例均使用Python 3.8.0進行編碼。

[[341679]]

1. 枚舉

Python 3允許您以簡單的方式在Enum類中編寫枚舉。 枚舉由類語法組成,可簡化讀取和寫入的過程,但沒有任何結(jié)構(gòu)-代碼不易產(chǎn)生。

  1. from enum import Enum, auto 
  2. class Fruit(Enum):    APPLE = auto()    ORANGE = auto()    GUAVA = auto()print(Fruit.APPLE) 
  3. # Fruit.APPLE 

當(dāng)確切值微不足道時,您可以使用自動值來代替。

枚舉是與特定的固定值關(guān)聯(lián)的符號項(成員)的集合。 在枚舉中,可以通過命名以及單獨迭代枚舉來區(qū)分符號名稱。

  1. for fruit in Fruit: 
  2.     print(fruit) 
  3.  -> Fruit.APPLE 
  4. -> Fruit.ORANGE 
  5. -> Fruit.GUAVA 

最低要求Python版本:3.4

2. 類型提示

相對于動態(tài)而言,靜態(tài)打字是計算機語言中的熱門話題,每個人對此都有自己的見解。 我將允許查看者考慮何時編寫類型。 但是,我覺得您必須了解Python 3支持類型提示。

  1. def fruits_word(line: str) -> bool: 
  2.   return "fruit" in line 
  3. test = fruits_word("I love to eat fresh fruits") 
  4. print(test)# True 

最低要求Python版本:3.5

3. Pathlib

F字符串令人難以置信,但是諸如文件路徑之類的字符串都有其自己的庫,這些庫使操作它們變得更加容易。 Pathlib模塊簡化了各種復(fù)雜的情況,并且還優(yōu)化了一些簡單的情況。 作為使用文件路徑的便捷抽象,Python 3提供了pathlib。

  1. from pathlib import Path 
  2. root = Path('blog_new_folder') 
  3. print(root) 
  4. # blog_new_folder 
  5. path = root / 'new_program' 
  6. print(path.resolve()) 
  7. # /home/vivekcoder/Workspace/My_Programming/Medium-Articles/python3_uncommon_features/blog_new_folder/new_program 

我覺得這篇文章會啟發(fā)您在需要處理Python文件時使用Python Pathlib模塊。

最低要求Python版本:3.4

4. F-Strings

在沒有字符串的情況下,很難以任何編程語言執(zhí)行任何操作,并且您希望使用結(jié)構(gòu)化的方法來使用字符串來保持高效。 大多數(shù)使用Python的人都喜歡使用format方法。

  1. import datetime 
  2. name = "Leijie" 
  3. activity = "writing Toutiao article" 
  4. time = datetime.date(2020, 8, 15) 
  5.  message = 'My name is {}, I completed an activity {} on {}.'.format(name, activity, time) 
  6.  print(message) 
  7. # My name is Leijie, I completed an activity writing Toutiao article  on 2020-08-15. 

除了格式外,Python 3還提供了一種通過f字符串插值字符串的通用方法。 上面的帶有f字符串的代碼如下所示:

  1. import datetime 
  2. name = "Leijie" 
  3. activity = "writing Toutiao article" 
  4. time = datetime.date(2020, 8, 15) 
  5. message = f'My name is {name}, I completed an activity {activity} on {time:%A, %B %d, %Y}.' 
  6.  print(message)# My name is Leijie, I completed an activity writing Toutiao article 
  7.   on Saturday, August 15, 2020. 

與利用字符串連接或格式化字符串相比,F(xiàn)-Strings創(chuàng)建的代碼甚至更易于理解和使用。

F字符串允許使用最少的語法將表達式集成到字符串文字中。 應(yīng)當(dāng)注意,f-Strings實際上是運行時表達式,而不是固定值。

最低要求Python版本:3.6

5. 內(nèi)置LRU緩存

如果最新的呼叫是傳入呼叫的最佳預(yù)測器,則LRU(最近最少使用)的緩存性能會很好。 (例如,最常見的新聞服務(wù)器帖子每天都會變化)。 緩存的大小限制意味著,如果沒有像Web服務(wù)器這樣的長時間運行的循環(huán),緩存就不會擴展。

定義用戶功能時,它必須是可調(diào)用的。 這使得在Python 3中可以將lru_cache裝飾器直接應(yīng)用于用戶函數(shù)。

下面是一個斐波那契函數(shù)的示例,我們知道該函數(shù)將從緩存中受益,因為通過遞歸,它可以多次執(zhí)行相同的工作。

  1. import time 
  2. def fibon(number: int) -> int: 
  3.     if number == 0: return 0 
  4.     if number == 1: return 1 
  5.     return fibon(number-1) + fibon(number-2) 
  6. start = time.time()fibon(20) 
  7. print(f'Duration: {time.time() - start}s') 
  8. -> Duration: 0.007005214691162109s 

在這里,我們可以利用lru-cache對其進行配置。 (這種優(yōu)化方法稱為備忘錄)。 裝飾器涵蓋了一個具有備忘錄的可調(diào)用函數(shù),該函數(shù)可存儲最近調(diào)用的最大大小。

  1. from functools import lru_cache 
  2. @lru_cache(maxsize=512
  3. def fib_memoization(number: int) -> int: 
  4.     if number == 0: return 0 
  5.     if number == 1: return 1 
  6.         return fib_memoization(number-1) + fib_memoization(number-2) 
  7. start = time.time()fib_memoization(20) 
  8. print(f'Duration: {time.time() - start}s') 
  9. -> Duration: 4.341516078231e-09s 

最低要求Python版本:3.2

6. 擴展的可重復(fù)拆包

我將允許代碼在下面回應(yīng)。 一個示例描述了功能,該功能優(yōu)于1000個單詞:

  1. x, *y, z = range(4) 
  2. print(x, y, z) 
  3. # 0 [1, 2] 3 
  4. python_version, file_name, topic, *output = "python3.0 hello.py betterprogramming 1 2 3 4".split() 
  5. print(python_version) 
  6. print(file_name) 
  7. print(topic) 
  8. print(output) 
  9. # python3.0 
  10. # hello.py# betterprogramming# ['1', '2', '3', '4'] 
  11. a, b, c, *d = range(7) 
  12. print(b, d) 
  13. # 1 [3, 4, 5, 6] 

最低要求Python版本:3.0

有關(guān)擴展的可迭代解壓縮的更多信息,請參見此處的官方Python 3文檔。

7. 數(shù)字文字中的下劃線

Python 3.6提供了一種令人興奮的方法,可以通過強調(diào)數(shù)字來幫助閱讀數(shù)字文字。 它可以用于描述例如數(shù)千個,十六進制和二進制數(shù)。

  1. price = 50_000 
  2.  print(f'Price: {price}') 
  3.  # Price: 50000 
  4. hexa_val = 0xABCD_EFD9 
  5.  print(f'Decimal equivalent: {hexa_val}') 
  6.  # Decimal equivalent: 2882400217 
  7. bin_ary = 0b_0010_0110 
  8.  print(f'Decimal: {bin_ary}') 
  9.  # Decimal: 38 

最低要求Python版本:3.6

8. 賦值表達式-“海象”運算符

在Python的最新版本中,引入了walrus運算符,該運算符可對表達式進行變量分配。 如果您打算稍后在代碼中引用外觀,則可能會有所幫助,并且可以節(jié)省一行或兩行代碼。

  1. birds = [‘owl’, ‘hen’, ‘duck’, ‘parrot’] 
  2. for bird in birds:    if (len_bird :len(bird)) > 4: 
  3.         print(f’A bird “{bird}” consists of “{len_bird}”, letters’)# A bird “parrot” consists of “6”, letters 

最低要求Python版本:3.8

9. 數(shù)據(jù)類

Python 3提供的數(shù)據(jù)類幾乎沒有什么限制,并且由于裝飾器會自動生成諸如__init __()和__repr __()之類的獨特方法,因此可用于減少樣板代碼。 官方提案將其列為“具有默認(rèn)值的可變命名元組”。

  1. class Item_list: 
  2.     def __init__(self, name: str, perunit_cost: float, quantity_available: int = 0): 
  3.         self.name = name 
  4.         self.perunit_cost = perunit_cost 
  5.         self.quantity_available = quantity_available 
  6.             def total_cost(self) -> float: 
  7.         return self.perunit_cost * self.quantity_available 
  8. book = Item_list("better programming.", 50, 2) 
  9. x = book.total_cost()print(x)# 100 
  10. print(book)# <__main__.Item_list object at 0x00000052DB9D2A48> 

使用@dataclass裝飾器,您可以編寫相同的實現(xiàn):

  1. from dataclasses import dataclass 
  2. @dataclassclass Item_list:    name: str    perunit_cost: float    quantity_available: int = 0 
  3.     def total_cost(self) -> float: 
  4.         return self.perunit_cost * self.quantity_available 
  5.     book = Item_list("better programming.", 50, 2) 
  6. x = book.total_cost()print(x)# 100 
  7. print(book) 
  8. # Item_list(name='better programming.'perunit_cost=50quantity_available=2

最低要求Python版本:3.7

有關(guān)數(shù)據(jù)類的進一步說明,請參閱Python 3官方文檔。

關(guān)鍵要點

沒有神奇的秘訣,只有細(xì)心,勤勞的工作,以及足夠的耐心和實踐。 每天,您需要學(xué)習(xí)新事物并享受工作,因為這是您成長的唯一途徑。

我相信上述見解可以為您顯示至少一個以前未認(rèn)識到的Python 3附加功能,并鼓勵您開始編寫更簡潔,更直觀的代碼。

謝謝閱讀!

原文:https://medium.com/better-programming/9-python-3-features-you-might-not-use-yet-fade13932a3e

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2022-12-07 08:16:50

Vue 3技巧數(shù)組

2011-09-06 13:56:07

Vista服務(wù)器網(wǎng)卡

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2024-12-17 08:33:42

2015-10-30 09:56:10

WiFiWiFi技術(shù)傳感

2021-12-17 00:10:00

ChromeDevtools功能

2020-07-31 17:13:28

Python開發(fā)工具

2011-09-15 17:10:41

2022-10-13 11:48:37

Web共享機制操作系統(tǒng)

2009-12-10 09:37:43

2021-02-01 23:23:39

FiddlerCharlesWeb

2010-08-23 09:56:09

Java性能監(jiān)控

2023-12-21 14:40:09

Python編程語言

2020-01-29 19:40:36

Python美好,一直在身邊Line

2021-01-05 11:22:58

Python字符串代碼

2021-03-25 11:19:34

Windows 10Windows微軟

2020-02-21 14:55:02

Python代碼字符串

2019-11-25 14:05:47

Python裝飾器數(shù)據(jù)

2020-09-15 08:35:57

TypeScript JavaScript類型
點贊
收藏

51CTO技術(shù)棧公眾號