日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python類型提示的初級(jí)入門

Python語言被認(rèn)為是一種最好的“動(dòng)態(tài)但強(qiáng)類型”語言。類型不與事物的名稱相關(guān)聯(lián),而是與事物本身相關(guān)聯(lián)。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)站頁面設(shè)計(jì)、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)網(wǎng)站建設(shè)公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗(yàn),以探求精品塑造與理念升華,設(shè)計(jì)最適合用戶的網(wǎng)站頁面。 合作只是第一步,服務(wù)才是根本,我們始終堅(jiān)持講誠信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場環(huán)境中,互促共生。

這使得 Python語言對(duì)開發(fā)人員來說既靈活又方便,因?yàn)槿绻皇菍⒕帉懸粋€(gè)快速切邏輯性不強(qiáng)的腳本,就不必嚴(yán)格定義和跟蹤變量類型。但是對(duì)于更大的項(xiàng)目來說,尤其是第三方使用的庫,了解哪些對(duì)象類型與哪些變量相關(guān)聯(lián)是有幫助的。

一段時(shí)間以來,Python 已經(jīng)能夠以某種形式用類型信息“注釋”名稱。在 Python 3.5 中,類型提示正式成為語言的一部分(PEP 484)。使用 linter 或代碼檢查工具,開發(fā)人員可以跨代碼庫檢查變量及其類型的一致性,并對(duì)以前很難或者不可能實(shí)現(xiàn)的代碼執(zhí)行靜態(tài)分析。所有這些都是在代碼運(yùn)行之前提前完成的。

在本文中,我們將探討 Python 類型提示的一些基本示例。但首先我們要介紹一個(gè)常見誤解,即什么是Python類型提示,有什么用途。

Python 如何使用類型提示

關(guān)于 Python 類型提示的一個(gè)主要誤解是如何使用。運(yùn)行時(shí)不使用Python 類型提示。事實(shí)上,在程序運(yùn)行時(shí),您提供的所有類型信息都已被刪除。Python 類型提示只會(huì)被正在使用的類型檢查系統(tǒng)(例如在編輯器或 IDE 中)提前使用。換句話說,Python 的類型提示是針對(duì)開發(fā)人員的,而不是針對(duì)運(yùn)行時(shí)的。

這聽起來可能有悖常理,尤其是對(duì)于使用過類型聲明不是可選語言時(shí)的開發(fā)人員來說。但是 Python 的開發(fā)團(tuán)隊(duì)已經(jīng)明確表示,類型提示并不是核心 Python 語言成為靜態(tài)類型的征兆。它們是開發(fā)人員向代碼庫添加元數(shù)據(jù)的一種方式,以便在開發(fā)過程中更輕松地執(zhí)行靜態(tài)分析。

有人推測,Python類型提示能可能會(huì)產(chǎn)生一種靜態(tài)類型的語言分支,這可能是使Python更快的一種方法。在某些方面,已經(jīng)證實(shí)了這種推測。Cython 使用類型提示(盡管大部分是它自己特有的類型)從 Python 生成 C 代碼, mypyc項(xiàng)目使用 Python 的本機(jī)類型提示來完成同樣的工作。

但是,這些項(xiàng)目被更恰當(dāng)?shù)卣J(rèn)為是對(duì)核心 Python 語言的補(bǔ)充,而不是 Python 發(fā)展方向的標(biāo)志。Python 中類型提示的主要目的是為開發(fā)人員提供一種方法,使他們的代碼盡可能具有自描述性,這既是為了他們自己的利益,也是為了其他開發(fā)者的利益。

Python 類型提示的語法

Python 中的類型提示在命名空間中第一次調(diào)用名稱之后涉及冒號(hào)和類型聲明。例如:

 
 
 
 
  1. name: str 
  2. age: int 
  3. name = input("Your name?") 
  4. age = int(input("Your age?")) 

類型提示name和age的第一個(gè)聲明確保將來在該名稱空間中使用這些名稱時(shí),將對(duì)照這些類型進(jìn)行檢查。例如,此代碼將無效:

 
 
 
 
  1. name: int 
  2. age: int 
  3. name = input("Your name?") 
  4. age = int(input("Your age?")) 

因?yàn)槲覀円呀?jīng)聲明name為一個(gè)int,并且input默認(rèn)返回一個(gè)字符串,類型檢查器將無法查詢到。

Python 類型檢查系統(tǒng)將盡可能地推斷類型。例如,假設(shè)我們使用了以下代碼,但沒有前面的類型聲明:

 
 
 
 
  1. name = input("Your name?") 
  2. age = int(input("Your age?")) 

在這種情況下,類型檢查器將能夠推斷出name是一個(gè)字符串(因?yàn)閕nput()不返回任何其他內(nèi)容),而age是一個(gè)int(因?yàn)閕nt()不返回任何其他內(nèi)容)。

類型提示 Python 函數(shù)

Python 函數(shù)也可以是類型提示,以便提前記錄它們接受和返回的值。例如下面的代碼:

 
 
 
 
  1. greeting = "Hello, {}, you're {} years old" 
  2. def greet(user, age): 
  3.     return greeting.format(user, age) 
  4. name = input("Your name?") 
  5. age = int(input("How old are you?")) 
  6. print(greet(name, age)) 

這段代碼的一個(gè)歧義是,greet()理論上可以接受user和age的任何類型,并且可以返回任何類型。以下是我們?nèi)绾问褂妙愋吞崾鞠缌x的方法:

 
 
 
 
  1. greeting = "Hello, {}, you're {} years old" 
  2. def greet(user:str, age:int) -> str: 
  3.     return greeting.format(user, age) 
  4. name = input("Your name?") 
  5. age = int(input("How old are you?")) 
  6. print(greet(name, age)) 

給定greet()的這些類型提示, 當(dāng)您在代碼中插入對(duì)greet()的調(diào)用時(shí),編輯器可以提前告訴您接受哪些類型的greet()。

同樣,有時(shí) Python 可以自動(dòng)推斷函數(shù)返回的類型,但是如果對(duì)函數(shù)使用類型提示,最好是提示有關(guān)它的所有內(nèi)容——它接受什么類型以及返回什么類型。

類型提示容器對(duì)象

如列表、字典和元組這樣的對(duì)象包含其他對(duì)象,所以我們需要鍵入類型提示來指示它們包含什么類型的對(duì)象。為此,我們需要求助于 Python 的typing(類型化)模塊,它提供了用于描述此類事物將持有的類型的工具。

 
 
 
 
  1. from typing import Dict, List 
  2. dict_of_users: Dict[int,str] = { 
  3.     1: "Jerome", 
  4.     2: "Lewis" 
  5. list_of_users: List[str] = [ 
  6.     "Jerome", "Lewis" 

字典由鍵和值組成,它們可以是不同的類型。您可以通過將字典作為列表提供給 來描述字典的類型typing.Dict。也可以通過向提供該類型來描述列表的對(duì)象類型typing.List。

Optional和Union類型

某些對(duì)象可能包含兩種不同類型的對(duì)象之一。在這些情況下,可以使用Union或Optional。使用Union指示對(duì)象可以是多種類型之一,使用Optional指示對(duì)象是一種給定類型還是無。例如:

 
 
 
 
  1. from typing import Dict, Optional, Union 
  2. dict_of_users: Dict[int, Union[int,str]] = { 
  3.     1: "Jerome", 
  4.     2: "Lewis", 
  5.     3: 32 
  6. user_id: Optional[int] 
  7. user_id = None # valid 
  8. user_id = 3 # also vald 
  9. user_id = "Hello" # not valid!  

在本例中,我們有一個(gè)以ints 作為鍵,但以ints 或strs 作為值的字典。user_id變量(我們可以用它來比較對(duì)字典的鍵)可以是一個(gè)int或None(“無有效用戶”),而不能是str。

類型提示和類

要為類提供類型提示,只需引用與任何其他類型相同的名稱:

 
 
 
 
  1. from typing import Dict 
  2. class User: 
  3.     def __init__(self, name): 
  4.         self.name = name 
  5. users: Dict[int, User] = { 
  6.     1: User("Serdar"), 
  7.     2: User("Davis") 
  8. def inspect_user(user:User) -> None: 
  9.     print (user.name) 
  10. user1 = users[1] 
  11. inspect_user(user1) 

請(qǐng)注意,inspect_user()的返回類型為None,因?yàn)樗皇谴蛴≥敵龆环祷厝魏蝺?nèi)容。(此外,我們通常會(huì)將這樣的函數(shù)變成類的方法,但在本例中,將單獨(dú)對(duì)其進(jìn)行說明。)

當(dāng)對(duì)自定義對(duì)象使用類型提示時(shí),我們有時(shí)需要為尚未定義的對(duì)象提供類型提示。在這種情況下,您可以使用字符串來提供對(duì)象名稱: 

 
 
 
 
  1. class User: 
  2.     def __init__(self, name:str, address:"Address"): 
  3.         self.name = name 
  4.         self.address = address 
  5.         # ^ because let's say for some reason we must have 
  6.         # an address for each user 
  7. class Address: 
  8.     def __init__(self, owner:User, address_line:str):         
  9.         self.owner = owner 
  10.         self.address_line = address_line 

【譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為.com】


新聞名稱:Python類型提示的初級(jí)入門
本文網(wǎng)址:http://www.dlmjj.cn/article/ccoipeo.html