您的位置:首页 > 编程语言 > Python开发

【python】*函数:全局局部变量、内部函数、闭包

2017-07-31 20:52 453 查看
函数与过程

大多数语言都会有以下定义:

函数(function):有返回值

过程(procedure):是简单的特殊的没有返回值的一个特殊函数

python中只有函数没有过程。

函数有return的话就返回值,没有return的话就返回None。



说明:hello()没有return,所以temp没有值。不会显示不代表没有返回值。即使hello()没有return,也会返回一个None对象。所以 python中函数都有返回值。

python函数返回值会动态的自动确定类型。

python没有变量,只有名字。换言而知,包括python函数的返回值也不用关注数据类型。

>>> def back():
return[1,'哈哈',4.6435]

>>> back()

[1, '哈哈', 4.6435]


>>> def back():
return 1,'哈哈',4.6435

>>> back()

(1, '哈哈', 4.6435)


注意:元组的关键是逗号而不是小括号

二、函数变量的作用域:变量的可见性

1、局部变量local

在函数里定义的参数以及变量都为局部变量,在函数外不可使用

2、全局变量global

函数外定义的变量在整个代码段,整个文件,整个模块。全局变量在函数中也可使用。

注意:如果在函数内试图去修改全局变量的话,python会自动创建一个新的局部变量代替,名字和全局变量相同。但两个变量实际上是两个互不影响的变量,存储空间不同。python会自动屏蔽新创建的局部变量而保护全局变量。所以不要轻易的在函数中修改全局变量,可以访问。全局变量的使用要谨慎。 

经典例子:



说明:函数外部的a为全局变量,函数内部的a为新创建的同名局部变量。return a中的a为新创建的a,a都没有初始值,所以返回肯定会出错。

若想在函数外使用函数内部的局部变量,只需在函数内部定义变量前面加上global关键字就行。

三、内嵌函数和闭包

1、内嵌函数(内部函数):允许在函数内部创建另一个函数






说明:内部函数整个作用域都在外部函数之内,内部函数的定义和调用都在外部函数之内,出了外部函数之外,就没有任何队fun2的调用了



2、闭包:函数式编程的一个重要语法结构

编程范式:借用哲学的术语,如果说每个编程者都在创造虚拟世界,那么编程范式就是他们置身其中自觉不自觉采用的世界观和方法论。

面向对象和面向过程。l

函数式编程:百度

闭包:从表现形式上定义为,如果在一个内部函数里,对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就会被认为是闭包。






注意:不能在外部函数的外部对内部函数进行调用

外部函数的局部变量和内部函数的局部变量就像之前全局变量对于函数中的局部变量。所以此时 内部函数可以对外部函数中的局变量进行访问,但不能对他进行修改。






说明:这里内部函数新创建的同名变量没有初始值,所以返回会报错。因为内部函数之外的变量已经被屏蔽掉了。



—python3之前:无法解决,只能间接的通过容器类型。容器类型是存在在栈里面,变量不会被屏蔽掉。

容器类型:列表、元组之列的什么都可以扔进去



—python3:用nonlocal关键字声明x不是一个局部变量

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐