网站首页 > 文章中心 > 其它

python局部函数

作者:小编 更新时间:2023-08-29 23:10:43 浏览量:350人看过

python中变量的引用、可变和不可变类型、局部变量和全局变量

变量的引用

变量和数据都是保存在内存中的

变量和数据是分开存储的

数据保存在内存中某个位置,通过地址来标记

变量保存的是数据的地址,通过地址可以找到数据在内存空间的位置

把变量保存数据地址的过程称为引用

变量的重新赋值修改的是变量中引用数据的内存地址

python局部函数-图1

变量之间的赋值实际是引用的传递

函数参数的传递,本质也是引用的传递

函数的返回值本身也是引用的传递

可变和不可变类型

可变类型,内存中的数据可以被修改:列表list、字典dict

无论是可变还是不可变数据类型,通过赋值语句,都会改变变量的引用

Hash函数只能接收不可变数据类型,字典的键也只能是不可变数据类型,字典的value值可以是任意数据类型

局部变量

①在函数内部定义的变量就是局部变量(作用范围只能是当前函数内部)

全局变量

①在所有函数外边定义的变量就是全局变量

函数的多个返回值

python函数中局部变量与全局变量遵守规则

(1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,如有全局同名变量,其值不变.

*<>.高等教育出版社

python中使用闭包及修改外部函数的局部变量

在python中,函数可以被嵌套定义,也就是说,函数中可以定义函数.该函数还可以将其内部定义的函数作为返回值返回.

闭包的定义:一般来说,我们可以认为,如果一个函数可以读取其他函数中的局部变量,那么它们就构成了闭包.

注意 :闭包的定义不是特别清晰,但大体上的意思是这样的.

我们知道,普通的函数是可以使用全局变量的

类似的,函数中定义的函数,也是可以使用外部函数的变量的.所以呢,满足了函数读取了其他函数局部变量的这一条件,他们所以呢构成了闭包.

在闭包的使用中,我们可以先给外部的函数赋予不同的局部变量,然后再调用其中内部的函数时,就可以读取到这些不同的局部变量了.

外部变量的使用 在普通函数中,虽然可以直接使用全局变量,但是不可以直接修改全局变量.从变量的作用域来说,一旦你尝试修改全局变量,那么就会尝试创建并使用一个同名的局部变量.所以呢,如果你需要在普通函数中修改全局变量,需要使用global

同样的,如果你希望通过定义在内部的函数去修改其外部函数的变量,那么必须使用nonlocal

Python-嵌套函数中的局部变量?

嵌套函数在执行时(而不是在定义时)从父范围中查找变量.

编译函数主体,然后验证"自由"变量(未在函数本身中通过赋值定义),然后将其作为闭包单元绑定到函数,并且代码使用索引引用每个单元格.pet_function所以呢具有一个自由变量(cage),然后将其通过一个闭合单元引用,索引为0的闭合本身指向局部变量cage在get_petters功能.

当你实际调用该函数时,该闭包将用于在你调用该函数时查看cage周围作用域中的值.问题就今天这一节.在你调用函数时,该函数已经完成了对其结果的计算.将在在执行过程中的一些点局部变量分配各的,和字符串,但在功能的结束,包含了最后一个值.所以呢,当你调用每个动态返回的函数时,就会得到打印的值.get_petterscage'cow''dog''cat'cage'cat''cat'

解决方法是不依赖闭包.你可以改用部分函数,创建新的函数作用域或将变量绑定为关键字parameter的默认值.

部分函数示例,使用functools.partial():

from functools import partialdef pet_function(cage=None):

print "Mary pets the " + cage.animal + "."yield (animal, partial(gotimes, partial(pet_function, cage=cage)))

创建一个新的范围示例:

def scoped_cage(cage=None):

def pet_function():

print "Mary pets the " + cage.animal + "."

return pet_functionyield (animal, partial(gotimes, scoped_cage(cage)))

将变量绑定为关键字参数的默认值:

def pet_function(cage=cage):

print "Mary pets the " + cage.animal + "."yield (animal, partial(gotimes, pet_function))

无需scoped_cage在循环中定义函数,编译仅进行一次,而不是在循环的每次迭代中进行.

以上就是土嘎嘎小编为大家整理的python局部函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章