python函數(shù)修改 Python函數(shù)修改列表不更新

python中使用閉包及修改外部函數(shù)的局部變量

在python中,函數(shù)可以被嵌套定義,也就是說,函數(shù)中可以定義函數(shù)。該函數(shù)還可以將其內(nèi)部定義的函數(shù)作為返回值返回。

目前創(chuàng)新互聯(lián)公司已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、靖州網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

閉包的定義:一般來說,我們可以認(rèn)為,如果一個(gè)函數(shù)可以讀取其他函數(shù)中的局部變量,那么它們就構(gòu)成了閉包。

注意 :閉包的定義不是特別清晰,但大體上的意思是這樣的。

我們知道,普通的函數(shù)是可以使用全局變量的

類似的,函數(shù)中定義的函數(shù),也是可以使用外部函數(shù)的變量的。因此,滿足了函數(shù)讀取了其他函數(shù)局部變量的這一條件,他們因此構(gòu)成了閉包。

在閉包的使用中,我們可以先給外部的函數(shù)賦予不同的局部變量,然后再調(diào)用其中內(nèi)部的函數(shù)時(shí),就可以讀取到這些不同的局部變量了。

外部變量的使用 在普通函數(shù)中,雖然可以直接使用全局變量,但是不可以直接修改全局變量。從變量的作用域來說,一旦你嘗試修改全局變量,那么就會(huì)嘗試創(chuàng)建并使用一個(gè)同名的局部變量。因此,如果你需要在普通函數(shù)中修改全局變量,需要使用global

同樣的,如果你希望通過定義在內(nèi)部的函數(shù)去修改其外部函數(shù)的變量,那么必須使用nonlocal

Python 中如何修改禁止函數(shù)修改列表

有的時(shí)候, 我們希望會(huì)保留列表中的數(shù)據(jù)作為備份,又不希望函數(shù)中不修改列表的值,該怎么做?python中提供了一種方法,將列表的副本傳遞給

函數(shù),這樣函數(shù)修改的只是列表的副本, 不會(huì)修改原列表的內(nèi)容,可以按照下面這樣做:

function_name(list_name[:])

切片表示法[:]創(chuàng)建列表副本.

如下面程序: 我們可以 給print_models 方法傳遞 unprinted_designs[:],這樣原列表?unprinted_designs值的就不會(huì)被修改

def print_models(unprinted_designs ,completed_models):

"""

模擬打印每個(gè)設(shè)計(jì),直到?jīng)]有未打印的設(shè)計(jì)為止

打印每個(gè)設(shè)計(jì)后,都將其移到列表completed_models中

"""

while unprinted_designs:

? ? current_design = unprinted_designs.pop()

? ? #模擬根據(jù)設(shè)計(jì)制作3D打印模型的過程

? ? print("Printing model:"+current_design)

? ? completed_models.append(current_design)

def show_completed_models(completed_models):

"""顯示打印的所有模型"""

print("\n The following mdels have been printed:")

for completed_model in completed_models:

? ? print(completed_model)

unprinted_designs =['iphone case','robot pendant','dodecahedron']

completed_models = []

print_models(unprinted_designs , completed_models)

show_completed_models(completed_models)

Python 如何利用函數(shù)修改函數(shù)外list

"""

使用global子句。在stisfiesF函數(shù)中,聲明L為一個(gè)全局變量,如此

你在該函數(shù)中修改L的值,則會(huì)體現(xiàn)到函數(shù)之外。這種寫法違背Python

優(yōu)雅的原則,不推薦使用,僅供學(xué)習(xí).【L中的元素不能有數(shù)字,否則

報(bào)錯(cuò),我也不知什么原因】

"""

def?f(s):

return?'av'?in?s

#?在聲明L為全局變量之前定義,代碼更直觀

L?=?['av1',?'av',?'a','b','ac','love','python',('f','av','gh'),[1,2,3]]

#?此處函數(shù)不傳入?yún)?shù)L

def?satisfiesF():

#?聲明L為全局變量

global?L

x?=?[]

for?i?in?L:

if?f(i):?????

x.append(i)

else:

pass

L?=?x

return?len(L)

print?('新列表L的長(zhǎng)度為%s'%satisfiesF())

print?('將原列表修改為元素含有"av"的新列表L:')

print(L)

"""

結(jié)果:新列表L的長(zhǎng)度為3

將原列表修改為元素含有"av"的新列表L:

['av1',?'av',?('f',?'av',?'gh')]

"""

python函數(shù)外更改函數(shù)內(nèi)的值

import inspect

from demo import demo

#傳入函數(shù),改變函數(shù)內(nèi)部變量a,從a=1改變成a=2

def cfunc(func):

#當(dāng)前位置的全部局部變量

lc=locals()

#獲得函數(shù)的內(nèi)容

func_code=inspect.getsource(func)

#使用replace改變函數(shù)內(nèi)部的變量

func_code=func_code.replace('a=1','a=2')

#動(dòng)態(tài)創(chuàng)建函數(shù)

exec(func_code)

#獲得函數(shù)并返回

res_func=lc[func.__name__]

return res_func

demo=cfunc(demo)

demo()

分享文章:python函數(shù)修改 Python函數(shù)修改列表不更新
文章出自:http://muchs.cn/article38/hgespp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站排名、全網(wǎng)營(yíng)銷推廣、Google、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)