函数:有返回值
过程:无返回值
注解:在python中,只有函数(每个函数都有返回值),没有过程>>> def hello():print("first")>>> temp = hello()   #解释:虽然没有写明返回值,但是
first
>>> print(temp)    #打印出来的temp却有值None
None
>>> 

python可以返回多个值

>>> def back1():   #返回的值存放在stuple中return 1,2,'Curry'>>> back1()
(1, 2, 'Curry')   #元祖stuple>>> def back2():   #返回的值存放在list中return [1,2,'Curry']>>> back2()
[1, 2, 'Curry']    #列表list

变量的作用域(局部变量,全局变量)

    存放位置:栈、全局变量区在函数里边定义的参数、变量,它们就是局部变量,出了这个函数,该变量就失效。
函数外部无法访问到这些局部变量。在函数外部定义的变量,全局变量。局部变量、全局变量如果同名,在函数内部,局部变量会覆盖全局变量的值。
>>> count = 5   #全局变量
>>> def MyFun():count = 10   #局部变量print(count)>>> MyFun()
10
>>> print(count)
5

global关键字

告诉python编译器,把后面的变量变成全局变量:
>>> count = 5   #全局变量
>>> def MyFun():global count   #把count变量变成全局变量count = 10   #局部变量print(count)>>> MyFun()
10
>>> print(count)
10

内嵌函数(内部函数):函数中有函数

1.
>>> def f2():   #先定义f2()函数print("f2()")>>> def f1():  #在f1()函数中调用f2()函数f2()>>> f1()
f2()2.直接在f1()中定义并调用f2()函数
>>> def f1():def f2():  #在f1()函数中声明f2()函数print("f2 in f1")f2()  #在f1()函数中实现f2()函数>>> f1()
f2 in f1
【注解】函数f2()是函数f1()的内嵌/内部函数,f2的作用域只在f1的内部生效,超出f1外,函数f2不可见。

闭 包
http://www.cnblogs.com/ma6174/archive/2013/04/15/3022548.html

闭包的条件:
- 函数funA中有内嵌函数funB
- 函数funA返回值是funB
- 函数funA中有自由变量temp
- 并且,自由变量temp在funB中被使用
那么:函数funA执行完成后,自由变量temp暂时不被回收,因为temp又被函数funB使用。【例】
>>> def funA(temp):def funB(bb):return temp*bbreturn funB>>> funA(10)(20)
200>>> a = funA(100)
>>> a(20)
120解释:funA被调用的时候产生一个闭包——funB,并且funB闭包持有funA中的自由变量temp,当funA函数的生命周期结束之后,temp变量依然存在,
因为temp被闭包funB使用了,暂时不会被回收。

【闭包的作用域问题】

>>> def f():a = 1     #② a是g()函数的“非全局的外部变量”def g():a = 2print aprint a  #①return g>>> f()()
1
2先执行①
在return g中执行②
>>> def f():count = 5   #5是g()函数"非全局的的外部变量",因此在g()函数中不认识count=5def g():count = count+100  #因此count在此时并没有初始值,所以没有初始值的count+100会报错return g
执行结果:报错
>>> f()()Traceback (most recent call last):File "<pyshell#157>", line 1, in <module>f()()File "<pyshell#156>", line 4, in gcount = count+100
UnboundLocalError: local variable 'count' referenced before assignment #count在引用前没有被赋值【解决方案1】使用list列表:把"非全局变量的外部变量"放在list中,
然后再使用。【因为】在python中,list中的元素是全局变量,不是局部变量。
>>> def f():count = [5,10,121,20]def g():count[0] = count[0]+100count[1] = count[1]+100print count[0],count[1]return g>>> f()()
105 110上面把[5,10,121,20]放在list中,相当于变成了全局变量,
不会出现没有赋值的错误。【解决方案2】python3中引出了关键字nonlocal
def hellocounter (name):count=0 def counter():nonlocal count  #声明为全局变量count+=1print 'Hello,',name,',',str(count[0])+' access!'return counterhello = hellocounter('ma6174')
hello()
hello()
hello() 
Python中怎么创建闭包?
在Python中创建一个闭包可以归结为以下三点:
- 闭包函数必须有内嵌函数
- 内嵌函数需要引用该嵌套函数上一级namespace中的变量
- 闭包函数必须返回内嵌函数

http://www.jb51.net/article/54498.htm

8.局部变量/全局变量global/内嵌函数/闭包nonlocal相关推荐

  1. 零基础入门学习Python(19)-内嵌函数和闭包

    global关键字 全局变量的作用域是整个模块,也就是代码段内所有的函数内部都可以访问到全局变量 注意,在函数内部仅仅去访问全局变量就好,不要试图去修改它,如果随意修改全局变量的值,很容易牵一发而动全 ...

  2. 课时20:内嵌函数和闭包

    目录: 一.global关键字 二.内嵌函数 三.闭包 四.课时20课后习题及答案 ******************** 一.global关键字 ******************** 全局变量 ...

  3. 小甲鱼python第二十讲(内嵌函数和闭包)

    内嵌函数 def fun1():print("fun1正在被调用...")def fun2():print("fun2正在被调用..")fun2()#在fun1 ...

  4. python中闭包函数_Python的闭包问题(关于内嵌函数引用闭包函数的变量问题)

    一.闭包: 记得:闭包的特性就是:内嵌函数会保存它引用的外围函数的变量值. 闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数和被引用的变量等 ...

  5. Python--12 内嵌函数和闭包

    内嵌函数/内部函数 >>> def fun1(): ... print('fun1()正在调用') ... def fun2(): ... print('fun2()正在被调用') ...

  6. 原来 JS 也支持跟 Lua 语意一样的内嵌函数的闭包概念

    原来 JS 也支持跟 Lua 语意一样的内嵌函数的闭包概念. 我是从这里看来的: http://blog.dreambrook.com/soloist/archive/2005/03/13/526.a ...

  7. 使用匿名函数和内嵌函数处理多变量传递问题

    问题:有一个多变量函数f(abcx),现需要分别在a=a0b=b0c=c0和a=a1b=b1c=c1的条件下对f(abcx)进行某一操作. 此类问题常在数值积分时出现. 解决方案: 1. 使用全局变量 ...

  8. function函数嵌套 matlab_Matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题...

    Matlab 函数进阶: 使用匿名函数 (Anonymous Function) 和内嵌函数 (Nested Function) 处理多变量传递问题 (Matlab 7.0 以上 ) 问题: 有一个多 ...

  9. Python函数05/内置函数/闭包

    Python函数05/内置函数/闭包 内容大纲 1.内置函数(二) 2.闭包 1.内置函数(二) #(abs()) 绝对值--返回的都是正数 #print([abs(i) for i in lst]) ...

最新文章

  1. 内核中的HZ 及延迟等
  2. Python(1) 整型与浮动型
  3. JDK11的新特性:新的HTTP API
  4. 前端wxml取后台js变量值_这些鲜为人知的前端冷知识,你都GET了吗?
  5. in-nan(ind)_NaN16 Constant in Julia
  6. hive 配置mysql_Hive的mysql安装配置
  7. centos修改主机名的正确方法
  8. oracle 修改sgamaxsize_Oracle修改表空间大小
  9. 自动特征工程在推荐系统中的研究
  10. flow使用_使用Microsoft Flow进行文本分析
  11. exchange加mysql_Exchange 事务和Exchange 数据库回顾
  12. 惠普m128fn中文说明书_hp m125m126m127m128使用说明.pdf
  13. Android面试准备复习之Android知识点大扫描
  14. C#ObjectArx Cad添加图层
  15. Vasya the Hipster - CodeForces - 581A
  16. 数据结构概述3 对称矩阵、树和二叉树
  17. webassembly学习-modules
  18. Bazel build Remote-caching
  19. C中输入半径计算球体的体积
  20. Axure RP8 图片手风琴

热门文章

  1. 写给用我的“新闻推荐项目”做毕设的同学们
  2. 轻量级微服务架构实践之路
  3. spring源码分析之cache demo
  4. spring beans源码解读之--Bean的定义及包装
  5. mongdb开始标记
  6. HuggingFace-transformers系列的介绍以及在下游任务中的使用
  7. vue-element-admin台前端解决方案: 基于 vue 和 element-ui实现
  8. 初识区块链——用JS构建你自己的区块链
  9. 揭秘Kaggle神器xgboost
  10. 《巴伦周刊》:纳德拉带领微软中兴