真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python進入函數(shù)內部 python函數(shù)內部修改全局變量

怎么用python的pdb模塊進行調試?

工具/材料

創(chuàng)新互聯(lián)建站是一家專業(yè)提供嘉峪關企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站設計、做網(wǎng)站、H5響應式網(wǎng)站、小程序制作等業(yè)務。10年已為嘉峪關眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。

電腦,python環(huán)境

首先打開電腦后,打開終端,我這里以調試debug.py文件做說明,簡單介紹python的pdb調試。為了演示,先用cat命令查看一下debug.py的內容。

我這里用的python3的環(huán)境,在終端里輸入如圖顯示python3 -m pdb debug.py命令。就是就是用python的pdb模塊調試debug.py文件代碼。

進入調試后,在終端里輸入小寫字母l,就是英文單詞list的縮寫,意思就是列出代碼內容。如果顯示。

在終端里輸入小寫字母n,就是英文單詞next的縮寫,意思就是執(zhí)行下一行代碼。

在終端里輸入小寫字母p x,p就是英文單詞print的縮寫,意思就是打印變量x的值。

在終端里輸入小寫字母s,s就是英文單詞s的縮寫,進入函數(shù)內部調試。

在終端里輸入小寫字母a,a就是英文單詞arguments(參數(shù))的縮寫,會打印顯示函數(shù)所有變量的值。

在終端里輸入小寫字母c,就是英文單詞continue的縮寫,意思就是繼續(xù)執(zhí)行代碼一直結束,然后重新進入調試。

在終端里輸入小寫字母b和阿拉伯數(shù)字6,b就是英文單詞break的縮寫,意思就是在第6行代碼打個斷點。

在終端里輸入小寫字母q,q就是英文單詞quit的縮寫,意思就是退出調試。

Python嵌套函數(shù)和閉包

在Python語言中,可以在函數(shù)中定義函數(shù)。 這種在函數(shù)中嵌套定義的函數(shù)也叫內部函數(shù)。我們來看下面的代碼:

上述代碼中,定義了函數(shù)greet,在函數(shù)greet內部又定義了一個函數(shù)inner_func, 并調用該函數(shù)打印了一串字符。

我們可以看到,內部函數(shù)inner_func的定義和使用與普通函數(shù)基本相同。需要注意的是變量的作用域,在上述代碼中,函數(shù)參數(shù)name對于全局函數(shù)greet是局部變量,對內部函數(shù)inner_func來說則是非局部變量。內部函數(shù)對于非局部變量的訪問規(guī)則類似于標準的外部函數(shù)訪問全局變量。

從這個例子我們還可以看到內部函數(shù)的一個作用,就是通過定義內部函數(shù)的方式將一些功能隱藏起來,防止外部直接調用。常見的場景是,在一個復雜邏輯的函數(shù)中,將一些小的任務定義成內部函數(shù),然后由這個外層函數(shù)使用,這樣可以使代碼更為清晰,易于維護。這些內部函數(shù)只會在這個外層函數(shù)中使用,不能被其他函數(shù)或模塊使用。

在Python語言中, 函數(shù)也是對象,它可以被創(chuàng)建、賦值給變量,或者作為函數(shù)的返回值。我們來看下面這個例子。

在上述代碼中,在函數(shù)gen_greet內部定義了inner_func函數(shù),并返回了一個inner_func函數(shù)對象。外部函數(shù)gen_greet返回了一個函數(shù)對象,所以像gen_greet這樣的函數(shù)也叫工廠函數(shù)。

在內部函數(shù)inner_func中,使用了外部函數(shù)的傳參greet_words(非局部變量),以及函數(shù)的參數(shù)name(局部變量),來打印一個字符串。

接下來,調用gen_greet("Hello")創(chuàng)建一個函數(shù)對象say_hello,緊接著調用say_hello("Mr. Zhang"),輸出的結果為:Hello, Mr. Zhang!

同樣的,調用gen_greet("Hi")創(chuàng)建一個函數(shù)對象say_hi,調用say_hello("Mr. Zhang"),輸出的結果為:Hi,Tony!

我們可以發(fā)現(xiàn),gen_greet返回的函數(shù)對象具有記憶功能,它能夠把所需使用的非局部變量保存下來,用于后續(xù)被調用的時候使用。這種保存了非局部變量的函數(shù)對象被稱作閉包(closure)。

那么閉包是如何實現(xiàn)的呢?其實并不復雜,函數(shù)對象中有一個屬性__closure__,它就是在創(chuàng)建函數(shù)對象時用來保存這些非局部變量的。

__closure__屬性是一個元組或者None類型。在上述代碼中,我們可以通過下面方式查看:

函數(shù)的嵌套所實現(xiàn)的功能大都可以通過定義類的方式來實現(xiàn),而且類是更加面向對象的代碼編寫方式。

嵌套函數(shù)的一個主要用途是實現(xiàn)函數(shù)的裝飾器。我們看下面的代碼:

在上述代碼中,logger函數(shù)返回函數(shù)with_logging,with_logging則是打印了函數(shù)func的名稱及傳入的參數(shù),然后調用func, 并將參數(shù)傳遞給func。其中的@wraps(func)語句用于復制函數(shù)func的名稱、注釋文檔、參數(shù)列表等等,使得with_logging函數(shù)具有被裝飾的函數(shù)func相同的屬性。

代碼中接下來用@logger對函數(shù)power_func進行修飾,它的作用等同于下面的代碼:

可見,裝飾器@符其實就是上述代碼的精簡寫法。

通過了解了嵌套函數(shù)和閉包的工作原理,我們在使用過程中就能夠更加得心應手了。

python內置函數(shù)

python內置函數(shù)是什么?一起來看下吧:

python內置函數(shù)有:

abs:求數(shù)值的絕對值

abs(-2) 2

pmod:返回兩個數(shù)值的商和余數(shù)

pmod(5,2) (2,1) pmod(5.5,2) (2.0,1.5)

bool:根據(jù)傳入的參數(shù)的邏輯值創(chuàng)建一個布爾值

bool()?#未傳入?yún)?shù) False bool(0)?#數(shù)值0、空序列等值為False False bool(1) True

all:判斷可迭代對象的每個元素是否都為True值

all([1,2])?#列表中每個元素邏輯值均為True,返回True True ?all(())?#空元組 True ?all({})?#空字典 True

help:返回對象的幫助信息

help(str)? Help?on?class?str?in?module?builtins: class?str(object) |??str(object='')?-?str |??str(bytes_or_buffer[,?encoding[,?errors]])?-?str |?? |??Create?a?new?string?object?from?the?given?object.?If?encoding?or |??errors?is?specified,?then?the?object?must?expose?a?data?buffer |??that?will?be?decoded?using?the?given?encoding?and?error?handler. |??Otherwise,?returns?the?result?of?object.__str__()?(if?defined) |??or?repr(object). |??encoding?defaults?to?sys.getdefaultencoding(). |??errors?defaults?to?'strict'. |?? |??Methods?defined?here: |?? |??__add__(self,?value,?/) ??????????Return?self+value.

_import_:動態(tài)導入模塊

index?=?__import__('index') index.sayHello()

locals:返回當前作用域內的局部變量和其值組成的字典

def?f(): ????print('before?define?a?') ????print(locals())?#作用域內無變量 ????a?=?1 ????print('after?define?a') ????print(locals())?#作用域內有一個a變量,值為1 ?f?f() before?define?a? {}? after?define?a {'a':?1}

input:讀取用戶輸入值

s?=?input('please?input?your?name:') please?input?your?name:Ain ?s 'Ain'

open:使用指定的模式和編碼打開文件,返回文件讀寫對象

#?t為文本讀寫,b為二進制讀寫 ?a?=?open('test.txt','rt') ?a.read() 'some?text' ?a.close()

eval:執(zhí)行動態(tài)表達式求值

eval('1+2+3+4') 10

除了上述舉例的函數(shù)之外,內置函數(shù)按分類還可分為:

1、數(shù)學運算(7個)

2、類型轉換(24個)

3、序列操作(8個)

4、對象操作(7個)

5、反射操作(8個)

6、變量操作(2個)

7、交互操作(2個)

8、文件操作(1個)

9、編譯操作(4個)

10、裝飾器(3個)

python如何導入函數(shù)

python的內建函數(shù)即是python自帶的函數(shù),這種函數(shù)不需要定義,并且不同的內建函數(shù)具有不同的功能,可以直接使用。

以下是部分內建函數(shù)用法及說明

1、abs(),返回數(shù)字的絕對值。

2、all(),如果集合中所有元素是true或集合為空集合,返回True。

3、any(),如果集合中有一項元素是true,返回True;空集合為False

4、ascii(), 返回一個表示對象的字符串。

5、bin(),將整數(shù)轉換為前綴為“0b”的二進制字符串。

6、bool(),返回一個布爾值,即True或者之一False。

7、bytearray(),返回一個新的字節(jié)數(shù)組。

8、callable(對象)判斷對象參數(shù)是否可被調用(可被調用指的是對象能否使用()括號的方法調用)

9、chr(),返回表示Unicode代碼點為整數(shù)i的字符的字符串。與ord()函數(shù)相反。

推薦學習《python教程》

10、classmethod,將方法轉換為類方法。

11、compile,將源代碼編譯為代碼或AST對象。代碼對象可以由exec()或執(zhí)行eval()。 source可以是普通字符串,字節(jié)字符串或AST對象。

12、dic(),創(chuàng)建一個字典

13、divmod(a,b),將兩個數(shù)作為參數(shù),并在使用整數(shù)除法時返回由商和余數(shù)組成的一對數(shù)

14、enumerate(iterable,start = 0)

enumerate是枚舉、列舉的意思

對于一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值

enumerate多用于在for循環(huán)中得到計數(shù)

15、eval,將一個字符串變?yōu)樽值?/p>

16、exec(object [, globals[, locals]])exec語句用來執(zhí)行儲存在字符串或文件中的Python語句

17、filter(功能,可迭代)

filter函數(shù)用于過濾序列

filter()把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。


分享名稱:python進入函數(shù)內部 python函數(shù)內部修改全局變量
標題路徑:http://weahome.cn/article/dojijsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部