核心開(kāi)發(fā)

Python核心開(kāi)發(fā)

一.包和模塊

1. 包和模塊的定義

為了更加有好的對(duì)python代碼進(jìn)行管理拢肆,出現(xiàn)了包和模塊的概念,包和模塊的出現(xiàn)主要是為了將代碼按照不同的功能進(jìn)行整合彼棍,以達(dá)到大幅度提高代碼的可讀性及代碼質(zhì)量民泵,方便項(xiàng)目中的協(xié)同開(kāi)發(fā)

Python中的包和模塊,首先是按照代碼的功能進(jìn)行整理扣墩,將相似的代碼整合到一起便于統(tǒng)一管理哲银。在python中,每一個(gè)文件都是一個(gè)模塊呻惕,在每一個(gè)python文件中荆责,封裝類(lèi)似的功能的變量、函數(shù)亚脆、類(lèi)型等做院。在python中,當(dāng)一個(gè)文件夾包含多個(gè)python模塊濒持,并且該文件夾中有一個(gè)init.py的特殊聲明文件键耕,那么這個(gè)文件夾就是一個(gè)包,它可以將大量功能相關(guān)的python模塊包含起來(lái)進(jìn)行統(tǒng)一管理柑营。包和模塊都可以被其他模塊通過(guò)import關(guān)鍵字進(jìn)行引入使用封裝的模塊和代碼屈雄,提高代碼的復(fù)用性,避免大量重復(fù)代碼的出現(xiàn)官套。

2. 包和模塊的復(fù)用

在python中酒奶,將包和模塊打包通過(guò)import關(guān)鍵字供其他模塊引入和使用主要是為了提高代碼的復(fù)用性。包和模塊的引入通常有兩個(gè)關(guān)鍵語(yǔ)法虏杰,import和from...import讥蟆。Import方式可以引入包和模塊, import引入的包和模塊會(huì)自動(dòng)從當(dāng)前文件夾中纺阔、系統(tǒng)環(huán)境變量PYTHONPYTH中,以及系統(tǒng)的sys.path路徑中查詢(xún)是否存在該名稱(chēng)的包和模塊修然,如果存在笛钝,就可以進(jìn)行引入調(diào)用了,若不存在愕宋,則會(huì)報(bào)錯(cuò)玻靡。

from...import語(yǔ)法方式主要是針對(duì)出現(xiàn)了包結(jié)構(gòu)的python代碼而特定的代碼引入方式,首先要非常明確代碼的組織結(jié)構(gòu)才能正確使用from...import語(yǔ)法方式的引入和復(fù)用中贝,from...import語(yǔ)法分為兩種操作囤捻,其一為使用./..的相對(duì)路徑的引入操作方式,相對(duì)引入本身是相對(duì)正在操作的文件的路徑邻寿,相對(duì)路徑是依賴(lài)于它們所屬的父路徑蝎土;其二則是直接使用包或者模塊名稱(chēng)的絕對(duì)引入方式,絕對(duì)引入操作方式比較直接绣否,它是從最外層的包的源頭直接開(kāi)始操作的誊涯。

3. 再說(shuō)模塊和包

模塊:

1)在一個(gè)python模塊中可以包含的數(shù)據(jù)有變量、函數(shù)和類(lèi)型等蒜撮,是一個(gè)完整獨(dú)立的代碼塊

2)獨(dú)立模塊中的變量分為全局變量和局部變量暴构,全局變量是整個(gè)模塊的變量,可以被其他模塊引入使用;局部變量是當(dāng)前模塊中某個(gè)函數(shù)或類(lèi)型的變量取逾,只能被當(dāng)前的函數(shù)及類(lèi)型使用

3)模塊被其他模塊引入后耗绿,相當(dāng)于在當(dāng)前模塊重寫(xiě)了被引入模塊的代碼,所以會(huì)執(zhí)行被引入模塊中的所有代碼

4)模塊中的測(cè)試代碼可以包含在if name == “main”: 這樣的語(yǔ)句中砾隅,在這些語(yǔ)句中的模塊不會(huì)在引入其他模塊時(shí)執(zhí)行

5)一個(gè)標(biāo)準(zhǔn)模塊的定義方式分為以下幾個(gè)步驟

coding:utf-8

(# 引入系統(tǒng)標(biāo)準(zhǔn)模塊

(# 引入第三方模塊

(# 引入自定義模塊

(# 聲明定義變量

(# 聲明定義函數(shù)

(# 聲明定義類(lèi)型

(# 當(dāng)前模塊測(cè)試代碼

包:python中的標(biāo)準(zhǔn)包误阻,是包含一個(gè)init.py聲明文件的文件夾,在包中琉用,可以創(chuàng)建多個(gè)模塊堕绩,由包進(jìn)行統(tǒng)一的路徑方式和導(dǎo)入方式管理。在默認(rèn)情況下邑时,包都是可以直接導(dǎo)入的奴紧,同樣為了方便,我們也可以通過(guò)通配符的方式來(lái)一次引入包中所有的指定模塊晶丘。all屬性就是用于模糊導(dǎo)入的特殊魔法屬性黍氮,值是一個(gè)包含模塊名稱(chēng)的列表,主要聲明在init.py文件中浅浮,用于定義可以使用通配符的方式引入的模塊沫浆。

4. 再說(shuō)導(dǎo)入

import及 from...import導(dǎo)入的基本語(yǔ)法結(jié)構(gòu)分別如下:

(# 導(dǎo)入一個(gè)包/模塊 :

Import 包名稱(chēng)/模塊名稱(chēng)

from 包名稱(chēng) import *

(# 導(dǎo)入一個(gè)包中的某個(gè)模塊 :

import 包名稱(chēng).模塊名稱(chēng)

from 包名稱(chēng) import 模塊名稱(chēng)

(# 導(dǎo)入一個(gè)包中某個(gè)模塊的某個(gè)函數(shù) :

Import 包名稱(chēng).模塊名稱(chēng).函數(shù)名稱(chēng)

from 包名稱(chēng).模塊名稱(chēng) import 函數(shù)名稱(chēng)

(# 導(dǎo)入一個(gè)人包中某個(gè)模塊的某個(gè)類(lèi)型【使用別名】:

Import 包名稱(chēng).模塊名稱(chēng).類(lèi)型名稱(chēng) as 別名

from 包名稱(chēng).模塊名稱(chēng) import 類(lèi)型名稱(chēng) as 別名

5. 自定義包的發(fā)布

已經(jīng)開(kāi)發(fā)好的模塊包如果想要發(fā)布出來(lái)供給其他人使用使其可以通過(guò)命令直接安裝使用的話,可以進(jìn)行打包發(fā)布滚秩,自定義包的發(fā)布分為兩種专执,本地發(fā)布和網(wǎng)絡(luò)發(fā)布。

本地發(fā)布:在已經(jīng)開(kāi)發(fā)好的包文件夾下新創(chuàng)建一個(gè)python模塊:setup.py郁油。模塊中需要引用構(gòu)建包信息的模塊 from distutils.core import setup本股。定義發(fā)布包文件的信息格式如下:setup(name = “xxx”)模塊中的其他內(nèi)容格式同上,可自行添加內(nèi)容桐腌,暫不過(guò)多說(shuō)明拄显。執(zhí)行完當(dāng)前程序包文件的構(gòu)建操作命令后,需按照標(biāo)準(zhǔn)格式組織包中的所有數(shù)據(jù)文件案站。

構(gòu)建操作命令格式如下:

python setup.py bulid

REMARK:構(gòu)建完的文件

可以通過(guò)python setup.py install 命令直接當(dāng)成第三方模塊進(jìn)行安裝

執(zhí)行命令進(jìn)行包的打包發(fā)布格式如下:

python setup.py sdist

REMARK:打包的文件躬审,主要方便進(jìn)行網(wǎng)絡(luò)傳輸,打包之后會(huì)在dist中創(chuàng)建包含包中所有信息的tar.gz壓縮包文件蟆盐,該文件可以通過(guò)git等方式提交給對(duì)應(yīng)的開(kāi)源組織發(fā)布你的自定義包模塊

網(wǎng)絡(luò)發(fā)布:首先承边,需要進(jìn)入<u>http://pypi.python.org/pypi</u>網(wǎng)站上注冊(cè)一個(gè)自己的賬號(hào),這個(gè)網(wǎng)站是目前大部分python第三方模塊集中的一個(gè)管理社區(qū)平臺(tái)舱禽;其次炒刁,準(zhǔn)備好自己的python程序包,并在包中準(zhǔn)備好了setup.py 文件誊稚。在setup.py中翔始,定義好如下的程序包的描述信息:

xxx_users/

init.py

moduels.py

manager.py

menus.py

setup.py

之后執(zhí)行打包命令:python setup.py sdist

接下來(lái)罗心,安裝第三方模塊twine,方便上傳我們打包的項(xiàng)目文件:pip install twine,之后上傳項(xiàng)目:twine upload dist/*

6. 關(guān)于Main 主方法

Python中的最小運(yùn)行單元數(shù)代碼塊城瞎,在代碼塊中渤闷,哪怕只有一行代碼也能執(zhí)行,所以沒(méi)有主方法或函數(shù)的概念脖镀,但是主方法在python中是有必要存在的飒箭,主方法的使用,可以避免在執(zhí)行代碼的過(guò)程中由于測(cè)試代碼的一并執(zhí)行而引起的不必要的錯(cuò)誤和系統(tǒng)資源的浪費(fèi)蜒灰。雖然python中沒(méi)有主方法主函數(shù)的概念弦蹂,但我們可以通過(guò)模擬主函數(shù)的方法去達(dá)到我們想要的結(jié)果。Python中的模塊有一個(gè)魔法屬性name.表示當(dāng)前模塊的運(yùn)行時(shí)的名稱(chēng)强窖,它具有以下特性:

1)當(dāng)前模塊如果是程序運(yùn)行入口凸椿,name 的值:main

2)當(dāng)前模塊如果被其他模塊import引入 name的值:模塊名稱(chēng)

所以我們可以定義模塊demo.py,main.py,用于測(cè)試魔法屬性的操作,利用main 的特性完成main方法的設(shè)計(jì)

二.內(nèi)存分析和處理

1. 程序內(nèi)存淺析

程序的運(yùn)行離不開(kāi)對(duì)內(nèi)存的操作翅溺,一個(gè)軟件要運(yùn)行脑漫,需要將數(shù)據(jù)加載到內(nèi)存中,通過(guò)CPU進(jìn)行內(nèi)存數(shù)據(jù)的讀寫(xiě)完成數(shù)據(jù)的運(yùn)算咙崎。軟件程序在計(jì)算機(jī)中的執(zhí)行优幸,主要是通過(guò)數(shù)據(jù)單元、控制單元褪猛、執(zhí)行單元共同協(xié)作网杆,完成數(shù)據(jù)的交互,達(dá)到程序處理數(shù)據(jù)的目的伊滋。Python程序在運(yùn)行過(guò)程中跛璧,主要是解釋器從系統(tǒng)中申請(qǐng)內(nèi)存空間以運(yùn)行python軟件解釋器將申請(qǐng)的內(nèi)存主要區(qū)分為四個(gè)部分用于處理執(zhí)行的程序軟件,分別是:

1)棧內(nèi)存區(qū):用于直接分配數(shù)據(jù)新啼,存取速度較快、數(shù)據(jù)存儲(chǔ)不穩(wěn)定刹碾、適用于小數(shù)據(jù)塊的快速存取燥撞,一般在程序中用于存儲(chǔ)變量數(shù)據(jù)

2)方法區(qū):主要用于加載程序中使用的代碼數(shù)據(jù)迷帜、二進(jìn)制數(shù)據(jù)戏锹、方法數(shù)據(jù)等等程序運(yùn)行需要的預(yù)加載數(shù)據(jù)

3)靜態(tài)區(qū):主要用于加載存儲(chǔ)程序中的一些靜態(tài)數(shù)據(jù)锦针、常量數(shù)據(jù)等等,在python中的不可變數(shù)據(jù)類(lèi)型的數(shù)據(jù)盯荤,也會(huì)存儲(chǔ)在靜態(tài)常量區(qū)中

4)堆內(nèi)存區(qū):存儲(chǔ)數(shù)據(jù)持久穩(wěn)定,一般用于存儲(chǔ)加載較為重量級(jí)的數(shù)據(jù)灼卢,如程序運(yùn)行過(guò)程中的對(duì)象都是存在堆內(nèi)存區(qū)中的来农。

在python中备图,根據(jù)數(shù)據(jù)是否可以進(jìn)行修改提供了兩種不同的數(shù)據(jù)類(lèi)型揽涮,分別是:

1)不可變數(shù)據(jù)類(lèi)型:一般基本數(shù)據(jù)類(lèi)型都是不可變數(shù)據(jù)類(lèi)型

2)可變數(shù)據(jù)類(lèi)型:一般組合數(shù)據(jù)類(lèi)型和自定義數(shù)據(jù)類(lèi)型都是可變數(shù)據(jù)類(lèi)型

3)區(qū)別:可變數(shù)據(jù)類(lèi)型是在定義了數(shù)據(jù)之后修改變量的數(shù)據(jù)盾似,內(nèi)存地址不會(huì)改變零院;不可變數(shù)據(jù)類(lèi)型在定義了數(shù)據(jù)之后修改變量的數(shù)據(jù)告抄,變量不會(huì)修改原來(lái)的內(nèi)存地址而是會(huì)指向新的地址打洼,原有的數(shù)據(jù)進(jìn)行保留

Python中最小的運(yùn)行單元是代碼塊募疮,代碼塊的最小單元是一行代碼阿浓,在實(shí)際開(kāi)發(fā)過(guò)程中筋蓖,需要注意python的兩種操作方式

1)交互模式:在交互模式下扭勉,每行命令都是一個(gè)獨(dú)立的代碼塊涂炎,每個(gè)代碼塊運(yùn)行會(huì)獨(dú)立的申請(qǐng)一次內(nèi)存唱捣,在操作過(guò)程中交互模式?jīng)]有推出的情況下遵循python官方操作標(biāo)準(zhǔn)

2)IDE開(kāi)發(fā)模式:在IDE開(kāi)發(fā)模式下震缭,代碼封裝在模塊中拣宰,用過(guò)python命令運(yùn)行模塊時(shí)巡社,模塊整體作為一個(gè)代碼塊向系統(tǒng)空間申請(qǐng)內(nèi)存并執(zhí)行程序晌该,執(zhí)行過(guò)程中對(duì)于基本數(shù)據(jù)類(lèi)型進(jìn)行緩存優(yōu)化操作

2. 操作符號(hào)的使用

在python中,可以通過(guò)操作符號(hào)判斷對(duì)象和對(duì)象之間的關(guān)系與值的情況姜胖,進(jìn)行組合數(shù)據(jù)類(lèi)型及不可變數(shù)據(jù)類(lèi)型的數(shù)據(jù)判斷:

1)is : 判斷多個(gè)對(duì)象是否存在于同一個(gè)內(nèi)存地址谭期,是否同一對(duì)象

2)== : 判斷多個(gè)對(duì)象中的內(nèi)容是否一致

3. 引用、淺拷貝熏瞄、深拷貝

對(duì)象和對(duì)象之間,通過(guò)內(nèi)存的操作存在各種各樣的關(guān)系帆谍。對(duì)象的創(chuàng)建汛蝙,依賴(lài)于申請(qǐng)內(nèi)存空間中加載的數(shù)據(jù),對(duì)象在內(nèi)存的創(chuàng)建過(guò)程依賴(lài)于三部分內(nèi)存處理:對(duì)象內(nèi)存分配地址西土、引用變量分配內(nèi)存地址需了、對(duì)象和引用變量之間的關(guān)聯(lián)。當(dāng)程序中要在多個(gè)地方使用一個(gè)對(duì)象數(shù)據(jù)時(shí)住拭,有三種不同的操作方式:

1)如果程序中多個(gè)不同的地方都要使用同一個(gè)對(duì)象滔岳,通過(guò)對(duì)象的引用賦值,將同一個(gè)對(duì)象賦值給多個(gè)變量

2)如果程序中多個(gè)不同地方都要使用相同的對(duì)象數(shù)據(jù)刘离,通過(guò)對(duì)象的拷貝完成數(shù)據(jù)的簡(jiǎn)單復(fù)制,對(duì)象中包含的數(shù)據(jù)要求必須統(tǒng)一

3)如果程序中多個(gè)不同的地方使用相同的且獨(dú)立的數(shù)據(jù)對(duì)象恼除,通過(guò)對(duì)象的深層次復(fù)制將對(duì)象的數(shù)據(jù)完整復(fù)制成獨(dú)立的另一份

對(duì)象的引用賦值令野,可以將對(duì)象的內(nèi)部地址同時(shí)賦值給多個(gè)變量气破,這些變量中存放的都是同一個(gè)引用地址,如果通過(guò)一個(gè)變量修改了對(duì)象內(nèi)容朴下,其他變量指向的對(duì)象內(nèi)容也會(huì)同時(shí)發(fā)生改變。Python中對(duì)象的引用賦值团滥,針對(duì)的是可變類(lèi)型,不適合不可變類(lèi)型,不可變類(lèi)型的引用賦值操作有只讀不寫(xiě)的特征父晶,一旦通過(guò)變量重新賦值就會(huì)重新指向新的引用對(duì)象

對(duì)象的淺拷貝,是一種對(duì)象的臨時(shí)備份埠胖,核心機(jī)制主要是賦值對(duì)象內(nèi)部數(shù)據(jù)的引用;對(duì)象的深拷貝谊惭,是對(duì)象數(shù)據(jù)的直接拷貝

4. 垃圾回收機(jī)制

垃圾回收機(jī)制基本是所有高級(jí)語(yǔ)言的標(biāo)準(zhǔn)配置之一,在一定程度上,能優(yōu)化編程語(yǔ)言的數(shù)據(jù)處理效率和提高編程軟件開(kāi)發(fā)軟件的安全性能。Python中的垃圾回收機(jī)制主要是以引用基數(shù)為主要手段容诬,以標(biāo)記清除和分代回收為輔助操作手段完成對(duì)內(nèi)存中無(wú)效數(shù)據(jù)的自動(dòng)操作管理

引用計(jì)數(shù)是python中垃圾回收機(jī)制的核心操作算法狈定,當(dāng)一個(gè)對(duì)象被創(chuàng)建或者拷貝時(shí),引用計(jì)數(shù)就會(huì)加一,這個(gè)對(duì)象的多個(gè)引用計(jì)數(shù)變量被銷(xiāo)毀時(shí)引用計(jì)數(shù)就會(huì)減一,為零時(shí)探孝,就會(huì)被清除。它的優(yōu)點(diǎn)是操作簡(jiǎn)單,實(shí)時(shí)性能優(yōu)秀,能在最短的時(shí)間內(nèi)獲得并運(yùn)算引用數(shù),缺點(diǎn)是必須提供對(duì)等的內(nèi)存消耗來(lái)維護(hù)引用計(jì)數(shù)萝快,無(wú)形中增加內(nèi)部負(fù)擔(dān)。同時(shí)對(duì)于循環(huán)應(yīng)用及對(duì)象之間的相互引用,無(wú)法進(jìn)行計(jì)數(shù)操作蜀细,會(huì)造成內(nèi)存常駐的情況奕谭。

標(biāo)記清除算法的核心思想是官册,首先找到python中的一批根節(jié)點(diǎn)對(duì)象根吁,通過(guò)根節(jié)點(diǎn)獨(dú)象找到它們的子節(jié)點(diǎn)對(duì)象,如果對(duì)象可達(dá),將可達(dá)部分的對(duì)象在程序中保留,如果不可達(dá)坦袍,則清除。

分代回收機(jī)制缝其,是一種通過(guò)空間換取時(shí)間效率的做法,python內(nèi)部處理機(jī)制定義了三個(gè)不同的鏈表數(shù)據(jù)結(jié)構(gòu)竿音,第零代春瞬、第一代柴信、第二代,并且對(duì)這三代都進(jìn)行了閥值限定宽气,當(dāng)?shù)诹愦拈y值達(dá)到臨界點(diǎn)時(shí)随常,對(duì)第零代對(duì)象進(jìn)行引用計(jì)數(shù)運(yùn)算,將沒(méi)有引用的對(duì)象回收萄涯,將有引用繼續(xù)指向的對(duì)象移動(dòng)到第一代中绪氛,同理,閥值到達(dá)特定的數(shù)值時(shí)涝影,對(duì)第一代枣察、第二代進(jìn)行相同處理。

Python中的gc模塊提供了垃圾回收處理的各項(xiàng)功能機(jī)制燃逻,必須調(diào)用gc模塊才能使用序目,在程序開(kāi)發(fā)過(guò)程中需要注意:

1)項(xiàng)目代碼中盡量避免循環(huán)使用

2)引入gc模塊,啟用gc模塊自動(dòng)清理循環(huán)引用對(duì)象的機(jī)制

3)將需要長(zhǎng)期使用的對(duì)象集中管理唆樊,減少gc資源消耗

4)Gc模塊處理不了重寫(xiě)del方法導(dǎo)致的循環(huán)引用宛琅,如果一定要添加該方法,需要顯式調(diào)用gc模塊的garbage對(duì)象的del方法進(jìn)行處理

三.再說(shuō)列表

1. 列表和列表的內(nèi)存處理

列表是python組合數(shù)據(jù)類(lèi)型中使用較多的類(lèi)型之一逗旁,在程序開(kāi)發(fā)過(guò)程中嘿辟,對(duì)列表的操作有兩種不同的情況需要考慮:

1)如何定義一個(gè)存放了大量有規(guī)律的數(shù)據(jù)的列表

2)列表中存儲(chǔ)的數(shù)據(jù)量過(guò)大是否會(huì)對(duì)內(nèi)存產(chǎn)生影響

Python中提供了對(duì)于有規(guī)律數(shù)據(jù)的快捷操作:推導(dǎo)式舆瘪,通過(guò)推導(dǎo)式可以方便快捷的生成需要的數(shù)據(jù)。推導(dǎo)式分為簡(jiǎn)單推導(dǎo)式红伦、運(yùn)算推導(dǎo)英古、條件推導(dǎo)式、組合推導(dǎo)式昙读。推導(dǎo)式的出現(xiàn)召调,極大程度的簡(jiǎn)化了存放有規(guī)律的數(shù)據(jù)列表的操作,在實(shí)際開(kāi)發(fā)過(guò)程中蛮浑,甚至可以基本代替一些簡(jiǎn)單程序結(jié)構(gòu)實(shí)現(xiàn)一行代碼獨(dú)立功能流程

列表簡(jiǎn)介方便的操作性雖然給程序開(kāi)發(fā)帶來(lái)了非常便捷的操作效率唠叛,但列表本身存儲(chǔ)數(shù)據(jù)的機(jī)制在進(jìn)行大量數(shù)據(jù)的處理時(shí),會(huì)極度的消耗系統(tǒng)內(nèi)存沮稚。針對(duì)操作頻繁的列表艺沼,列表生成器的油然而生。生成器的語(yǔ)法結(jié)構(gòu)和推導(dǎo)式的語(yǔ)法結(jié)構(gòu)及其類(lèi)似蕴掏,生成器對(duì)象必須通過(guò)系統(tǒng)內(nèi)建標(biāo)準(zhǔn)函數(shù)來(lái)獲取生成下一個(gè)數(shù)據(jù)障般,生成器的優(yōu)異性能在于使用的時(shí)候才會(huì)運(yùn)行下一個(gè)數(shù)據(jù),而不會(huì)一次性將數(shù)據(jù)加載

2. 循環(huán)遍歷與迭代器

Python程序中通過(guò)for循環(huán)進(jìn)行循環(huán)遍歷操作的盛杰,就是迭代器對(duì)象iterable挽荡,在自定義類(lèi)型中,可以通過(guò)重寫(xiě)iter()方法即供,讓自定義對(duì)象返回一個(gè)迭代器對(duì)象

四.再說(shuō)函數(shù)

1. 函數(shù)的引用賦值和參數(shù)操作

Python中的函數(shù)定拟,本身也是一個(gè)對(duì)象,常規(guī)定義語(yǔ)法的函數(shù)募狂,就是將一個(gè)函數(shù)對(duì)象的引用地址賦值給函數(shù)名稱(chēng)的變量办素,通過(guò)函數(shù)名稱(chēng)的變量調(diào)用執(zhí)行函數(shù)。如果函數(shù)就是對(duì)象祸穷,函數(shù)也可以和對(duì)象一樣被引用賦值性穿,也可以被當(dāng)成參數(shù)傳遞給其他函數(shù)執(zhí)行

2. 偏函數(shù)

偏函數(shù)可以讓函數(shù)的操作執(zhí)行更加人性化的處理,使用偏函數(shù)可以有效的“凍結(jié)”那些預(yù)先確定的函數(shù)雷滚,來(lái)緩存函數(shù)參數(shù)然后在運(yùn)行時(shí)需曾,當(dāng)獲得需要的剩余參數(shù)時(shí),可以將其解凍傳遞到最終的參數(shù)中祈远,從而使用最終確定的所有參數(shù)去調(diào)用函數(shù)呆万。在一定程度上,偏函數(shù)只是一個(gè)語(yǔ)法糖车份,因?yàn)閜ython中對(duì)于函數(shù)參數(shù)的處理已經(jīng)有默認(rèn)值的操作谋减,完全可以替代偏函數(shù)的復(fù)雜操作

3. 裝飾器函數(shù)

裝飾器函數(shù)的本質(zhì)是為其他函數(shù)添加附加功能,裝飾器的返回值也是一個(gè)函數(shù)對(duì)象扫沼,原則:

1)不能修改被裝飾函數(shù)的源代碼

2)不能修改被裝飾函數(shù)的調(diào)用方式

4. 閉包函數(shù)

在python中出爹,函數(shù)執(zhí)行結(jié)束時(shí)其中的數(shù)據(jù)就會(huì)丟失庄吼,在函數(shù)外部就不能訪問(wèn)函數(shù)中的數(shù)據(jù)。當(dāng)需要函數(shù)外部直接操作函數(shù)中的數(shù)據(jù)時(shí)严就,可以將函數(shù)中的數(shù)據(jù)直接通過(guò)返回值返回总寻,但是返回值的操作方式比較單一,能作為簡(jiǎn)單數(shù)據(jù)的處理方式梢为。更加靈活的操作方式是閉包函數(shù)渐行。閉包函數(shù)就是在函數(shù)中聲明另一個(gè)函數(shù)

5. 匿名函數(shù)

很多函數(shù)中都存在匿名函數(shù),匿名函數(shù)又名lambda表達(dá)式铸董,它的主要作用是簡(jiǎn)化函數(shù)操作祟印,將簡(jiǎn)單的邏輯封裝在一個(gè)表達(dá)式中,從而省去定義函數(shù)繁雜的操作方式粟害,主要起到簡(jiǎn)單處理函數(shù)的功能旁理。匿名函數(shù)只能有一個(gè)表達(dá)式,返回值就是該表達(dá)式的結(jié)果我磁。因?yàn)槟涿瘮?shù)沒(méi)有名字,因此不用擔(dān)心函數(shù)名沖突驻襟,它也是一個(gè)函數(shù)對(duì)象夺艰,可以將其賦值給一個(gè)變量,再利用變量來(lái)調(diào)用該函數(shù)沉衣,同樣郁副,匿名函數(shù)也可以作為返回值返回

五.標(biāo)準(zhǔn)模塊和內(nèi)建函數(shù)

系統(tǒng)標(biāo)準(zhǔn)模塊:Python標(biāo)準(zhǔn)庫(kù)中提供了大量的模塊,通過(guò)dir()命令可以查看所有內(nèi)建模塊

系統(tǒng)內(nèi)建函數(shù):系統(tǒng)內(nèi)建函數(shù)包含大量的操作處理

六.元類(lèi)

類(lèi):元類(lèi)是用來(lái)定義和構(gòu)建類(lèi)型的豌习,在大多數(shù)編程語(yǔ)言中存谎,類(lèi)就是一組用來(lái)描述如何生成一個(gè)對(duì)象的代碼段,在python中肥隆,類(lèi)同樣也是一個(gè)對(duì)象既荚,可以賦值、拷貝栋艳、增加屬性

類(lèi)的動(dòng)態(tài)創(chuàng)建:因?yàn)轭?lèi)也是對(duì)象恰聘,可以在運(yùn)行時(shí)創(chuàng)建它們,使用class關(guān)鍵字即可吸占。當(dāng)使用class關(guān)鍵字時(shí)晴叨,python解釋器自動(dòng)創(chuàng)建這個(gè)對(duì)象

Type創(chuàng)建類(lèi)、屬性矾屯、方法:type還有一種完全不同的功能兼蕊,動(dòng)態(tài)的創(chuàng)建類(lèi)。Type可以接受一個(gè)類(lèi)的描述作為參數(shù)件蚕,然后返回一個(gè)類(lèi)

元類(lèi):用來(lái)創(chuàng)建類(lèi)

'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孙技,一起剝皮案震驚了整個(gè)濱河市产禾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绪杏,老刑警劉巖下愈,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蕾久,居然都是意外死亡势似,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)僧著,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)履因,“玉大人,你說(shuō)我怎么就攤上這事盹愚≌て” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵皆怕,是天一觀的道長(zhǎng)毅舆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)愈腾,這世上最難降的妖魔是什么憋活? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮虱黄,結(jié)果婚禮上悦即,老公的妹妹穿的比我還像新娘。我一直安慰自己橱乱,他們只是感情好辜梳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著泳叠,像睡著了一般作瞄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上危纫,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天粉洼,我揣著相機(jī)與錄音,去河邊找鬼叶摄。 笑死属韧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛤吓。 我是一名探鬼主播宵喂,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼会傲!你這毒婦竟也來(lái)了锅棕?” 一聲冷哼從身側(cè)響起拙泽,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裸燎,沒(méi)想到半個(gè)月后顾瞻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡德绿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年荷荤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片移稳。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蕴纳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出个粱,到底是詐尸還是另有隱情古毛,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布都许,位于F島的核電站稻薇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胶征。R本人自食惡果不足惜颖低,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弧烤。 院中可真熱鬧,春花似錦蹬敲、人聲如沸暇昂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)急波。三九已至,卻和暖如春瘪校,著一層夾襖步出監(jiān)牢的瞬間澄暮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工阱扬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泣懊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓麻惶,卻偏偏與公主長(zhǎng)得像馍刮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窃蹋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 〇卡啰、前言 本文共108張圖静稻,流量黨請(qǐng)慎重! 歷時(shí)1個(gè)半月匈辱,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍振湾。 ...
    Raxxie閱讀 18,954評(píng)論 17 410
  • 決定考研之后,書(shū)看的精細(xì)了亡脸,人也變得細(xì)致化起來(lái)押搪,說(shuō)起話來(lái)來(lái)一板一眼的,總覺(jué)得過(guò)于系統(tǒng)化甚至是框架化了梗掰,可是不可否認(rèn)...
    獨(dú)孤藍(lán)簡(jiǎn)羊閱讀 232評(píng)論 0 0
  • 楔子_穿越前夕 北城的冬天來(lái)的比任何時(shí)候都要早及穗,還未入冬卻己開(kāi)始飄起了小雪摧茴,整個(gè)城市如同薄冰呈現(xiàn)在人們的...
    忽而姜出閱讀 230評(píng)論 0 0