import inspect
from demo import demo
def cfunc(func):
#当前位置的全部局部变量
lc=locals()
#获得函数的内容
func_code=inspect.getsource(func)
#使用replace改变函数内部的变量
#动态创建函数
exec(func_code)
#获得函数并返回
res_func=lc[func.__name__]
return res_func
demo=cfunc(demo)
demo()
在python中,函数可以被嵌套定义,也就是说,函数中可以定义函数.该函数还可以将其内部定义的函数作为返回值返回.
闭包的定义:一般来说,我们可以认为,如果一个函数可以读取其他函数中的局部变量,那么它们就构成了闭包.
注意 :闭包的定义不是特别清晰,但大体上的意思是这样的.
我们知道,普通的函数是可以使用全局变量的
类似的,函数中定义的函数,也是可以使用外部函数的变量的.所以呢,满足了函数读取了其他函数局部变量的这一条件,他们所以呢构成了闭包.
在闭包的使用中,我们可以先给外部的函数赋予不同的局部变量,然后再调用其中内部的函数时,就可以读取到这些不同的局部变量了.
外部变量的使用 在普通函数中,虽然可以直接使用全局变量,但是不可以直接修改全局变量.从变量的作用域来说,一旦你尝试修改全局变量,那么就会尝试创建并使用一个同名的局部变量.所以呢,如果你需要在普通函数中修改全局变量,需要使用global
同样的,如果你希望通过定义在内部的函数去修改其外部函数的变量,那么必须使用nonlocal
有的时候, 我们希望会保留列表中的数据作为备份,又不希望函数中不修改列表的值,该怎么做?python中提供了一种方法,将列表的副本传递给
函数,这样函数修改的只是列表的副本, 不会修改原列表的内容,可以按照下面这样做:
function_name(list_name[:])
切片表示法[:]创建列表副本.
如下面程序: 我们可以 给print_models 方法传递 unprinted_designs[:],这样原列表?unprinted_designs值的就不会被修改
def print_models(unprinted_designs ,completed_models):
? """
? 模拟打印每个设计,直到没有未打印的设计为止
? 打印每个设计后,都将其移到列表completed_models中
? while unprinted_designs:
? ? ? current_design = unprinted_designs.pop()
? ? ? 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如何修改函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!