【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不是一个局部变量
大多数语言都会有以下定义:
函数(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不是一个局部变量
相关文章推荐
- 【ZZ已解决】Python中如何在嵌套函数内部访问被嵌套(的父级函数)中的(局部,非全局)变量
- 作用域、全局局部变量、链接属性、存储属性、生存期、内部外部函数
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- 【Python】PYTHON 函数局部变量和全局变量
- C语言-全局变量与局部变量、全局函数与内部函数
- JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量
- 静态(static)全局变量与全局变量,静态局部变量与局部变量,内部(static)函数与普通函数
- 《零基础入门学习Python》学习过程笔记【020函数的局部变量和全全局变量内部函数和闭包】
- 函数_内部&外部/全局&局部_函数/变量
- JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量
- Python3学习笔记4-函数,全局变量&局部变量,内置函数
- Python3学习笔记4-函数,全局变量&局部变量,内置函数
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);
- python函数局部变量用法实例分析
- js使用闭包时,内部函数是直接访问外部函数的实际变量而非复制一份新变量
- matlab 自动交易系统 函数内部全局变量
- python[变量作用域-函数-闭包-装饰器-生成器]
- c语言复习之局部变量和全局变量以及局部函数和全局函数
- 关于Python函数定义全局变量执行弹出SyntaxWarning的问题