成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

新手請(qǐng)進(jìn):每個(gè)Python程序員都應(yīng)該知道的10個(gè)縮寫(xiě)詞

開(kāi)發(fā) 后端
Python是許多編程初學(xué)者的首選語(yǔ)言,它的語(yǔ)法非常直觀(guān),并且具有支持動(dòng)態(tài)類(lèi)型的靈活性;此外,它還是一種解釋性語(yǔ)言,可以使用交互式控制臺(tái)進(jìn)行學(xué)習(xí)。

 [[340605]]

Python是許多編程初學(xué)者的首選語(yǔ)言,它的語(yǔ)法非常直觀(guān),并且具有支持動(dòng)態(tài)類(lèi)型的靈活性;此外,它還是一種解釋性語(yǔ)言,可以使用交互式控制臺(tái)進(jìn)行學(xué)習(xí)。基本上,只使用命令行工具(例如Mac中的Terminal)就能夠開(kāi)始學(xué)習(xí)Python,如今macOS系統(tǒng)已經(jīng)附帶了Python。

學(xué)習(xí)過(guò)程中,我們會(huì)逐漸熟悉它的數(shù)據(jù)結(jié)構(gòu)、控制流、類(lèi)、函數(shù)和其他基本知識(shí)。此外,還有一件有趣的事人們不常提起:時(shí)不時(shí)就會(huì)遇到Python中的各種首字母縮寫(xiě)詞。

本文將回顧十個(gè)這樣的縮寫(xiě)詞,包括通用的編程原理以及特定的Python編碼,每個(gè)詞都有自己有用有趣的方面。

1. OOP(面向?qū)ο缶幊?

要介紹的第一個(gè)縮寫(xiě)是OOP——面向?qū)ο缶幊蹋@就是Python所基于的設(shè)計(jì)。

大家都知道編程本身是關(guān)于編碼的,但是程序本身應(yīng)該是關(guān)于數(shù)據(jù)的。程序需要獲取輸入數(shù)據(jù)、處理數(shù)據(jù)和輸出數(shù)據(jù)。請(qǐng)注意,此處討論的數(shù)據(jù)是最一般意義上的數(shù)據(jù),可以包括表格數(shù)、字符串、用戶(hù)操作(例如單擊按鈕)、圖像以及任何形式的具有信息的數(shù)據(jù)。代碼的工作就是處理各種形式的數(shù)據(jù),并以所需的方式呈現(xiàn)它們。

為了完成工作,人們需要能夠處理這些數(shù)據(jù)的代碼,而現(xiàn)代編程語(yǔ)言(包括Python)中的一種常見(jiàn)設(shè)計(jì)模式就是采用OOP范例。這個(gè)想法非常直觀(guān)——我們用特定的對(duì)象包裝數(shù)據(jù)。

更具體來(lái)講,對(duì)象可以保存數(shù)據(jù)(例如屬性)并且可以操作數(shù)據(jù)(例如方法)。例如,如果開(kāi)發(fā)一個(gè)賽車(chē)游戲,那么我們可以構(gòu)建汽車(chē)對(duì)象,并且每個(gè)對(duì)象都可以具有特定的屬性,如顏色、最大速度和重量。此外,這些對(duì)象還可以進(jìn)行制動(dòng)和加速等操作。這些數(shù)據(jù)的邏輯組織以對(duì)象(汽車(chē))為中心。

下面來(lái)看一下Python中的特定示例。可以使用內(nèi)置的str類(lèi)包裝字符串?dāng)?shù)據(jù),人們不僅可以使用字符串對(duì)象傳遞字符串?dāng)?shù)據(jù),還可以改變字符串的表示方式。請(qǐng)看一個(gè)非常瑣碎的示例。

  1. >>># Create avariable of str type 
  2.         ... hello ="HelloPython!" 
  3.         ... 
  4.         ... # Send the data toa function call 
  5.         ... print(hello) 
  6.         ... 
  7.         ... # Manipulate thestring data with string methods 
  8.         ... hello_lower = hello.lower() 
  9.         ... hello_upper = hello.upper() 
  10.         ... print( lowercased: , hello_lower) 
  11.         ... print( uppercased: , hello_upper) 
  12.         ... 
  13.         HelloPython! 
  14.         lowercased: hello python! 
  15.         uppercased: HELLOPYTHON! 

字符串?dāng)?shù)據(jù)處理

2.DRY(不要重復(fù)自己)

DRY(不要重復(fù)自己)的原理是每個(gè)程序員都應(yīng)該實(shí)踐的最基本的規(guī)則之一。其含義很簡(jiǎn)單:如果發(fā)現(xiàn)代碼中有任何重復(fù),那么就表明需要進(jìn)行一些重構(gòu),以實(shí)現(xiàn)最大程度地減少重復(fù)代碼,或在可能的情況下完全刪除任何重復(fù)信號(hào)。

以下示例通過(guò)應(yīng)用DRY原理展示了一些代碼的重構(gòu):

  1. defdo_something(item): 
  2.                         pass 
  3.              # Repetativework 
  4.                     do_something(item0) 
  5.                     do_something(item1) 
  6.                     do_something(item2) 
  7.              # Apply DRY 
  8.                     for item in (item0, item1,item3): 
  9.                         do_something(item) 

不要重復(fù)自己

代碼重構(gòu)的另一種可能情況是:發(fā)現(xiàn)自己要處理一堆具有相同結(jié)構(gòu)的數(shù)據(jù)。應(yīng)該考慮使用自己的類(lèi)來(lái)處理這些數(shù)據(jù),而不是使用一系列的字典、列表或元組來(lái)存儲(chǔ)每個(gè)人的數(shù)據(jù)。這不僅可以使程序員本人的代碼不易出現(xiàn)錯(cuò)誤,而且對(duì)代碼長(zhǎng)期可維護(hù)性也很有幫助。

3. PIP(Python包安裝和管理工具)

Python受歡迎的最重要因素是其開(kāi)放源代碼的特性,這種特性帶來(lái)了大量免費(fèi)的Python軟件包。根據(jù)維基百科介紹,在Python軟件包索引(PyPI)中索引了235000多個(gè)軟件包。

我們可以使用pip工具從PyPI安裝任何軟件包。該安裝過(guò)程非常輕松,只需在命令或終端中使用一行代碼即可。以下代碼段總結(jié)了一些常用用法。想要了解有關(guān)pip工具用法的更多信息,可以訪(fǎng)問(wèn)其官方網(wǎng)站:https://pip.pypa.io/en/stable/user_guide/。

  1. # install latest version 
  2.        pip install package_name 
  3.              # install aparticular version 
  4.        pip install package_name==version_number 
  5.              # to uninstall apackage 
  6.        pip uninstall package_name 
  7.              # to show installedpackages 
  8.        pip list 
  9.              # to show theinformation about a particular package 
  10.        pip show package_name 
  11.              # to install alist of dependencies, such as to clone a virtual environment 
  12.        pip install -rrequirements.txt 

PIP 使用示例

4. LEGB(函數(shù)內(nèi)部作用域,函數(shù)內(nèi)部與內(nèi)嵌函數(shù)之間,全局作用域和內(nèi)置作用域)

LEGB規(guī)則指的是Python中的變量查找順序,如下圖所示。具體來(lái)說(shuō),當(dāng)解釋器嘗試解析變量時(shí),Python具有四層作用域——了解將哪些值綁定到變量。

首先從內(nèi)部范圍開(kāi)始,該范圍可以是函數(shù)或類(lèi)。如果解釋器為該變量找到了相應(yīng)的綁定值,那么它將停止查找并使用具有該特定值的變量。

可變分辨率規(guī)則

否則,它將在更高層次上查找——函數(shù)內(nèi)部與內(nèi)嵌函數(shù)之間。這一范圍僅存在于函數(shù)的嵌套結(jié)構(gòu)中。當(dāng)在另一個(gè)函數(shù)中聲明一個(gè)函數(shù)時(shí),我們將內(nèi)部函數(shù)稱(chēng)為內(nèi)部函數(shù),將外部函數(shù)稱(chēng)為外部函數(shù)。當(dāng)解釋器嘗試解析內(nèi)部函數(shù)范圍內(nèi)使用的變量時(shí),如果無(wú)法在局部范圍內(nèi)解析,它將進(jìn)入封閉范圍,即外部函數(shù)的局部范圍。

如果仍然無(wú)法解析封閉范圍內(nèi)的變量,它將轉(zhuǎn)到全局范圍。全局作用域通常是模塊級(jí)別,通常是獨(dú)立的Python文件。值得注意的是,將包導(dǎo)入當(dāng)前文件時(shí),導(dǎo)入中的函數(shù)和類(lèi)也將成為全局范圍的一部分。內(nèi)置作用域是啟動(dòng)解釋器時(shí)要加載的函數(shù)、類(lèi)和其他模塊,以使這些最基本的對(duì)象始終可用(例如print和其他內(nèi)置函數(shù))。

5. MRO(方法解析順序)

方法解析順序表示Python或編程語(yǔ)言通常如何解析方法或?qū)傩浴I厦嬗懻摰腖EGB規(guī)則關(guān)注的是解決變量,而MRO不同,它關(guān)注的是對(duì)象以及對(duì)象的方法調(diào)用或特定屬性的獲取如何解決。

MRO主要是在多繼承的上下文中討論的——從多個(gè)類(lèi)(即超類(lèi))和/或繼承的多層繼承的類(lèi)(即子類(lèi))。因?yàn)樽宇?lèi)和超類(lèi)都共享一些具有可能不同實(shí)現(xiàn)的通用方法,所以Python解釋器需要一種機(jī)制來(lái)確定在特定調(diào)用中應(yīng)使用哪種方法或?qū)傩裕@正是MRO負(fù)責(zé)的。

  1. >>>classX: 
  2.      ...    defbin(self): 
  3.      ...        print(f"bin called in X"
  4.      ... 
  5.      ... classY(X): 
  6.      ...    defgo(self): 
  7.      ...        print(f"go called Y"
  8.      ... 
  9.      ... classZ(X): 
  10.      ...    defgo(self): 
  11.      ...        print(f"go called Z"
  12.      ... 
  13.      ... classW(Y, Z): 
  14.      ...    defbin(self): 
  15.      ...        super().bin() 
  16.      ...        print(f"bin called W"
  17.      ... 
  18.      ...    defbingo(self): 
  19.      ...        self.bin() 
  20.      ...        self.go() 
  21.      ... 
  22.      ... w =W() 
  23.      ... w.bingo() 
  24.      ... 
  25.      bin called inX 
  26.      bin called W 
  27.      go called Y 

方法解析順序

對(duì)于W類(lèi)的實(shí)例(第22行),當(dāng)我們調(diào)用bingo()方法時(shí),此方法在其自己的類(lèi)中解析,因?yàn)樗窃陬?lèi)中定義的(第18-20行)。但是,此方法將進(jìn)一步調(diào)用bin()和go()方法。

以類(lèi)似的方式,bin()方法在其自己的類(lèi)中得到解析,但它調(diào)用超類(lèi)的bin()方法,如第15行所示。但是在其直接超類(lèi)(即Y和Z)中,都未實(shí)現(xiàn) bin()方法,因此Python會(huì)比超類(lèi)的超類(lèi)(如X)高一個(gè)級(jí)別,在該超類(lèi)中實(shí)現(xiàn)并調(diào)用bin()方法。

值得注意的是,對(duì)于W的go()方法,其兩個(gè)超類(lèi)都實(shí)現(xiàn)了此方法,但是如你所見(jiàn),這僅調(diào)用了Y類(lèi)中使用的實(shí)現(xiàn)。因?yàn)楫?dāng)定義W類(lèi)時(shí),繼承順序?yàn)閅和Z,這將使MRO遵循相同的順序。

與此相關(guān)的是,可以使用特殊方法__mro__找出特定類(lèi)的MRO。另外,為了展示類(lèi)繼承順序的重要性,我們創(chuàng)建了另一個(gè)類(lèi),其中Z類(lèi)位于Y類(lèi)之前,這會(huì)更改W_類(lèi)的MRO。

  1. >>>print( W Class MRO: , W.__mro__) 
  2.           ... 
  3.           ... classW_(Z, Y): 
  4.           ...    pass 
  5.           ... 
  6.           ... print( W_ Class MRO: , W_.__mro__) 
  7.           ... 
  8.           WClassMRO: (<class  __main__.W >, <class  __main__.Y >, <class  __main__.Z >, <class  __main__.X >, <class  object >) 
  9.           W_ClassMRO: (<class  __main__.W_ >, <class  __main__.Z >, <class  __main__.Y >, <class  __main__.X >, <class  object >) 

特殊方法 __mro__

6.&7. EAFP(請(qǐng)求寬恕比許可更容易)和LBYL(事先檢查)

EAFP(請(qǐng)求寬恕比許可更容易)編碼風(fēng)格是Python賴(lài)以生存的基礎(chǔ)。由于Python是一種動(dòng)態(tài)編程語(yǔ)言,因此在運(yùn)行時(shí)可以實(shí)現(xiàn)對(duì)現(xiàn)有實(shí)例對(duì)象,類(lèi)甚至模塊的實(shí)現(xiàn)以及修改。因此,建議在假定特定屬性或功能可用的情況下編寫(xiě)代碼。

換句話(huà)說(shuō),如果某些代碼可能存在特定問(wèn)題,那么就讓問(wèn)題浮出水面并相應(yīng)地解決它們。通過(guò)應(yīng)用EAFP規(guī)則,如果我們想更進(jìn)一步,就可以簡(jiǎn)單地使用try ... except語(yǔ)句編寫(xiě)特定代碼,以處理代碼可能引發(fā)的潛在異常。總之,宗旨就是如果發(fā)生意外情況,事后處理。

與EAFP原理相反,還有另一種稱(chēng)為L(zhǎng)BYL的編碼樣式,它代表“事先檢查”。使用這種編碼方式,程序員可以在運(yùn)行某些代碼之前排除所有可能的不良情況。因此,就可以在更多遵循LBYL原則的項(xiàng)目中看到更多if語(yǔ)句。這種編碼樣式就是盡力以特定的方式防止一切問(wèn)題。

以下代碼段顯示了使用EAFP與LBYL的可能方案。使用EAFP編碼樣式,只需將代碼和預(yù)期的可能異常包裝在try…except語(yǔ)句中,同時(shí)使用LBYL編碼樣式,必須使用內(nèi)省法和值檢查來(lái)驗(yàn)證除法之前的適用條件。

正如大家看到的,EAFP代碼看起來(lái)更干凈,并且沒(méi)有創(chuàng)建嵌套結(jié)構(gòu)。當(dāng)然,如果愿意的話(huà),也可以在項(xiàng)目中應(yīng)用LBYL,最終項(xiàng)目仍然將以類(lèi)似的方式工作。

  1. defwith_EAFP_divide_ten_by(number): 
  2.                                      try: 
  3.                                          print(f 10 divided by {number} is {10/ number}. ) 
  4.                                      exceptZeroDivisionError: 
  5.                                          print("You can tdivide zero."
  6.                                      exceptTypeError: 
  7.                                          print("You canonly divide a number."
  8.              defwith_LBYL_divide_ten_by(number): 
  9.                                      ifisinstance(number, int) orisinstance(number, float): 
  10.                                          if number ==0: 
  11.                                              print("You can tdivide zero."
  12.                                          else
  13.                                              print(f 10 divided by {number} is {10/ number}. ) 
  14.                                      else
  15.                                          print("You canonly divide a number."

EAFP vs. LBYL

8. PEP(Python增強(qiáng)建議書(shū))

上一節(jié)大體討論了編碼樣式,但是最有影響力的Python編碼風(fēng)格指南之一就是PEP 8——Python增強(qiáng)建議書(shū)#8,由BDFL(將在下文討論)和其他幾個(gè)Python核心維護(hù)者編寫(xiě)。

PEP涵蓋了很多內(nèi)容——所有與Python相關(guān)的內(nèi)容,可以在官方網(wǎng)站上找到整個(gè)列表(https://www.python.org/dev/peps/。這里列出了一些著名的文章:

  • PEP 8: Style Guide for Python Code
  • PEP 257: Docstring Conventions
  • PEP 20: The Zen of Python
  • PEP 498: Literal String Interpolation
  • PEP 202: List Comprehensions
  • PEP 405: Python Virtual Environment

9. BDFL(仁慈的獨(dú)裁者)

什么是BDFL?以下是維基百科的定義:仁慈的獨(dú)裁者(BDFL)是少數(shù)開(kāi)源軟件開(kāi)發(fā)領(lǐng)導(dǎo)者的頭銜,他們通常是在社區(qū)中的爭(zhēng)端或爭(zhēng)論中保留最終決定權(quán)的項(xiàng)目創(chuàng)始人。

盡管這個(gè)定義通常適用于開(kāi)源軟件開(kāi)發(fā),但它最初是在Python社區(qū)中使用的,是指代Python編程語(yǔ)言的創(chuàng)建者Guido van Rossum(GvR)的一種方式。他在擔(dān)任BDFL角色20多年之后,于2018年卸任,你可以在維基百科上找到更多關(guān)于BDFL的故事。

10. REPL(“讀取-求值-輸出”循環(huán))

在筆者看來(lái),REPL(“讀取-求值-輸出”循環(huán))正是使學(xué)習(xí)Python如此輕松的便捷工具。我們可以像使用命令或終端窗口一樣開(kāi)始簡(jiǎn)單地學(xué)習(xí)Python編碼,可以使用pip工具如前所示安裝軟件包。更重要的是,無(wú)需編寫(xiě)任何其他編程語(yǔ)言可能需要的IDE工具即可立即編寫(xiě)Python代碼的第一行(例如可能應(yīng)該是這行代碼:print(“Hello World!”))。

來(lái)快速看一下它的樣子吧:

  1. >>>print("HelloWorld!"
  2.             HelloWorld! 
  3.             >>>3*2 
  4.             6 
  5.             >>>type(5) 
  6.             <class int > 

REPL示例

REPL工作流程非常簡(jiǎn)單——閱讀代碼,對(duì)其進(jìn)行評(píng)估,并在控制臺(tái)中打印評(píng)估中的所有適用結(jié)果,然后循環(huán)重復(fù)這三個(gè)步驟以探索Python的各種功能。REPL在標(biāo)準(zhǔn)Python或其他常見(jiàn)的Python開(kāi)發(fā)工具(例如ipython)中作為默認(rèn)模式實(shí)現(xiàn),這也是著名的Python學(xué)習(xí)和編碼工具——Jupiter Notebook的基礎(chǔ)。

Python是一種由BDFL GvR創(chuàng)建的靈活而強(qiáng)大的OOP語(yǔ)言。利用PIP,我們可以輕松地管理Python軟件包,并通過(guò)REPL在控制臺(tái)中學(xué)習(xí)語(yǔ)言和各種軟件包。使用Python進(jìn)行編碼時(shí),我們希望遵循PEP 8中概述的樣式。其他重要的編碼原理包括DRY和EAFP。如果愿意的話(huà),也可以在編碼中做一些LBYL。LEGB規(guī)則和MRO將幫助大家了解如何解析變量、屬性和函數(shù)以使你的代碼按預(yù)期運(yùn)行。

這些Python“黑話(huà)”,你學(xué)會(huì)了嗎?

本文轉(zhuǎn)載自微信公眾號(hào)「 讀芯術(shù)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 讀芯術(shù)公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 讀芯術(shù)
相關(guān)推薦

2012-02-28 10:52:13

2018-03-07 12:57:53

2018-05-03 08:45:58

Linux命令

2023-12-27 09:00:00

Python魔術(shù)方法開(kāi)發(fā)

2012-10-11 10:32:48

Linux命令程序員

2022-09-11 15:20:05

程序員命令開(kāi)發(fā)

2024-04-24 14:52:26

JavaScriptWeb 開(kāi)發(fā)

2023-01-31 15:43:47

2021-10-18 10:21:28

程序員技能優(yōu)化

2024-04-10 12:36:41

硬件代碼

2023-06-27 00:04:10

程序員JavaScript

2011-07-25 10:09:57

Python

2015-04-16 10:26:51

程序員 Python Ruby

2023-11-02 14:21:06

2016-06-22 09:30:58

Linux命令新手

2021-08-19 15:14:29

程序員電子表格Airtable

2014-07-16 09:34:44

2021-10-20 06:05:01

編程語(yǔ)言開(kāi)發(fā)

2013-03-20 17:58:41

虛擬內(nèi)存程序員

2017-04-05 12:04:17

python函數(shù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日韩国产一区二区 | 日本成年免费网站 | 久久久久国产精品一区二区 | 亚洲精品成人 | 久久精品影视 | 日本激情一区二区 | 国产一区黄色 | 亚洲三区视频 | 精品亚洲一区二区 | 国产一区 | 精品久久中文字幕 | 日韩成人免费av | 国产精品久久久久久久久久久免费看 | 午夜一级黄色片 | 欧美成人h版在线观看 | 成人久久久| 亚洲伦理自拍 | 欧美三区 | 亚洲区一区二 | 99久久婷婷国产综合精品 | 做a视频 | 久久精品国产亚洲 | 久在线| 91麻豆精品一区二区三区 | 欧美日韩综合 | 日韩视频在线观看中文字幕 | 91久久精品一区 | pacopacomama在线| 欧美激情精品久久久久 | 伊人久久免费 | 一区二区三区韩国 | 在线日韩欧美 | 国产精品资源在线观看 | 成人精品一区亚洲午夜久久久 | 婷婷色在线播放 | 国产激情网 | 91中文字幕在线 | 91精品国产91久久久久久三级 | 五月天激情电影 | 成人精品一区亚洲午夜久久久 | 国产1区2区在线观看 |