函数:全局局部变量、内部函数、闭包 详细解释与传参方法
函数与过程
大多数语言都会有以下定义:
函数(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不是一个局部变量
函数:全局局部变量、内部函数、闭包 详细解释与传参方法相关推荐
- MATLAB中var函数,mean函数的含义及用法详细解释
MATLAB中var函数,mean函数的含义及用法详细解释 var函数语句 我们先来看var函数,MATLAB命令窗输入help var ,可以得到用到方差函数Syntax有: V = var(X); ...
- visualGDB配合VS2015使用,出现函数内部局部变量无法跳转到定义的解决方法。
visualGDB配合VS2015使用,出现函数内部局部变量无法跳转到定义的解决方法. 原因:从其它地方拷贝过来的VS工程在自己的电脑上编译时可能出现找不到交叉编译工具.ip不同等问题. 解决方案:如 ...
- 在qt中用c语言数组,在QT函数中返回一个数组/把一个数组传参给函数
1.把数组传参给函数 可以定义一个QVector的一个数组 QVector num(10); for(int i =0;i<10;i++) num [i] = i*i; fun(num); / ...
- 算法函数 Ins_Linklist() ;Del_Linklist(L,i);详细解释
/* 学习数据结构的一些笔记! / L=(LinkList)malloc(sizeof(LNode)); P=L; //单链表的值赋值给P for(i=1;i<=4;i++){ P->ne ...
- Go 学习笔记(18)— 函数(04)[闭包定义、闭包修改变量、闭包记忆效应、闭包实现生成器、闭包复制原对象指针]
1. 闭包定义 Go 语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说: 函数 + ...
- delphi中的函数传参如何传枚举参数_shell脚本的函数介绍使用和工作常用案例。建议收藏...
#前言:今天我们来聊聊shell脚本中的函数知识,看一下函数的优势,执行过程和相关的使用案例. #简介 1.函数也具有别名类似的功能 2.函数是把程序里多次调用相同的代码部分定义成一份,然后给这份代码 ...
- python-return_全局局部变量_函数名用法_函数嵌套
函数 1. return 返回值 作用: 自定义函数的返回值,return 可以把值返回到函数的调用处 return + 六大标准数据类型 , 还有类和对象,函数 如果不定义return ...
- Python之pandas:pandas.set_option函数的参数详细解释
Python之pandas:pandas.set_option函数的参数详细解释 目录 pandas.set_option函数的参数解释 函数API:pandas.set_option pandas. ...
- matlab imcrop 对应python函数_Python精讲Numpy基础,大牛笔记详细解释
总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Python.所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门等, ...
最新文章
- 【 FPGA 】设计一个通用移位寄存器
- golang中map并发读写问题及解决方法
- 8个你应该了解的正则表达式
- 《大话数据结构》读后总结(九)
- newcode Gene Tree 点分治
- leetcode76. 最小覆盖子串
- Oculus首席科学家发声,称VR需要能够“欺骗”大脑
- sift计算描述子代码详解_浅谈SIFT特征描述子
- python xlrd导入后怎么保存_Python xlrd模块导入过程及常用操作
- idea debug调试_IDEA中debug调试(非多线程)
- No module named swigfaiss
- 使用SubSonic生成数据访问层步骤
- 【每日一网】Day4:OverFeat流程简单理解
- c语言第三章课后作业答案,C语言第三章习题带答案
- [LOJ#10064]黑暗城堡
- 北京大兴国际机场希尔顿花园酒店开业
- 最新Exsi-6.7.0U3b版本下载
- 麻省理工大学教授教你怎样做…
- 国际首例人造单染色体真核细胞创建成功,中国实现合成生物学里程碑式突破...
- 完美的word转pdf