一、名称空间和作用域

  1. 名称空间:Python所有有关命名的操作都是在操作名称空间,例如变量名,函数名
  2. 1、内置名称空间:Python解释器提供好的功能,解释器启动跟着一起启动,是全局作用域
  3. 2、全局名称空间:Python中顶行写的,不在函数内部定义的,都是全局名称空间,在运行的时候会产生名称空间,是全局作用域
  4. 3、局部名称空间:在一个小范围定义,只能当前范围及其子空间内运行,例如在函数内部定义的,是局部作用域

二、函数的嵌套

  1. 1、函数的嵌套调用
  2. 2、函数的嵌套定义
  1. x = 1111111111111111
  2. def f1():
  3. #x=1
  4. print('------>f1 ',x)
  5. def f2():
  6. #x = 2
  7. print('---->f2 ',x)
  8. def f3():
  9. x=3
  10. print('-->f3 ',x)
  11. f3()
  12. f2()
  13. f1()

三、函数的使用

  1. 1、函数可以被当做变量赋值
  1. def foo():
  2. print("foo")
  3. print(foo) #打印foo的内存地址空间,函数的名字在不带小括号时表示的是函数的内存地址
  4. f=foo #把foo的内存地址空间做值赋值给f变量
  5. print(f) #打印f,起始就是打印foo的内存地址空间
  6. f() #f()事实上就是执行foo函数,等同于foo()
  7. 打印结果为
  8. <function foo at 0x0000000000B91378> #print(foo)的结果
  9. <function foo at 0x0000000000B91378> #print(f)的结果
  10. foo #执行f()的结果,实际就是执行foo()的结果

2、函数可以当做参数传递

  1. def foo():
  2. print("foo")
  3. print(foo) #打印foo的内存地址空间
  4. f=foo #把foo的内存地址空间做值赋值给f变量
  5. print(f) #打印f,起始就是打印foo的内存地址空间
  6. f() #f()事实上就是执行foo函数,等同于foo()
  7. def bar(func):
  8. print(func) #这个是打印foo()函数的内存地址
  9. func() #func是foo的内存地址,加()实际就是执行foo()函数
  10. return func
  11. f = bar(foo) #这个是获取bar的返回值
  12. print(f) #打印f,就是打印bar()的返回值,就是foo()的内存地址,和print(func)相同
  13. f() #f是bar
  14. def bar(func):
  15. print(func)
  16. bar(foo()) #这个是先执行foo()行数,执行函数里的代码,先打印foo,然后把foo()的返回值作为bar()函数的实参传递给bar,foo()没有返回值,所以是None
  17. #结果就是先输出一个 "foo" 然后bar(None),把none传递给bar()函数,打印No

四、闭包:内部函数的代码包含对外部作用域的引用,但一定不是对全局作用域的引用,闭包函数一定有__closure__方法

  1. x=1
  2. def f1():
  3. x=2
  4. y=3
  5. def f2():
  6. print(x)
  7. y
  8. return f2
  9. f=f1() #f是f2的内存地址
  10. f() #f()就是f2(),可以保证f2()可以在任何位置执行,而不受作用域的限制
  11. print(f.__closure__) #打印结果是元组,元组个数代表的是闭包所引用的上次函数的元素个数
  12. print(f.__closure__[0]) #结果是元组,可以使用索引的方式查看
  13. print(f.__closure__[0].cell_contents) #查看指定元组所对应的应用上层参数的值
  1. def init(func):
  2. def wrapper(*args,**kwargs):
  3. res=func(*args,**kwargs)
  4. return res
  5. return wrapper

Python基础--函数的嵌套和闭包的更多相关文章

  1. Python中函数的嵌套及闭包

    函数的嵌套 调用:在函数中调用函数 定义:在函数中定义函数 地址:函数名有内存地址,内存地址可赋值 示例 a = 1 def outer(): a = 1 def inner(): a = 2 def ...

  2. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

  3. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  4. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  5. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  6. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  7. Python之函数2 嵌套,作用域和闭包(Day12)

    一.函数对象 1.函数是第一类对象,即函数可以当做数据传递 1.1 可以被引用 1.2 可以当做参数传递 1.3 返回值可以是函数 1.4 可以当做容器类型的元素 二.函数的嵌套 1.函数嵌套的调用: ...

  8. Python基础(7)_闭包函数、装饰器

    一.闭包函数 闭包函数:1.函数内部定义函数,成为内部函数, 2.改内部函数包含对外部作用域,而不是对全局作用域名字的引用那么该内部函数成为闭包函数 #最简单的无参闭包函数 def func1() n ...

  9. Python基础(函数部分)-day04

    写在前面 上课第四天,打卡: 加勒比海盗今天上映:端午节公司发的粽子很有范! 一.函数的基本概念 - 函数是什么?  函数,就是一个'锤子',一个具有特定功能的'锤子',使用者可以在适当的时候使用这个 ...

随机推荐

  1. python解决图的最短路径问题

    在hihoCoder上遇到一个算法题目,描述如下: 对图结构有了解的不难发现,这是经典的求图的最短路径问题.以下是python代码: def findMin(row): minL = max(row) ...

  2. http协议中302和303的区别

    http1.0协议中只有302码,没有303状态码:http1.1,在默认情况下,很多服务端基础程序,为了兼容http1.0,在遇到本应响应303时,也给客户端响应了302. 碰到的问题: 场景: 在 ...

  3. 重读 必须知道的.NET

    1 .public ,对访问成员无限制,属于访问级别最高的权限. protected 访问包含类或者丛类派生类的类. internal  仅限于程序集, protected inernal 访问仅限于 ...

  4. gif文件解析

    详细资料:http://blog.csdn.net/wzy198852/article/details/17266507 MD5:98206F88B84CCC399C840C8EEC902CCF GI ...

  5. 基于jQuery/zepto的单页应用(SPA)搭建方案

    这里介绍一个基于jquery或zepto的单页面应用方案,遵循尽可能简单的原则,使大家一目了然,只需配置一个路由,之后完全按照jq日常写法即可完成.可做学习使用,也可修改后用于一些业务逻辑简单的spa ...

  6. PHP Session 常用的函数

    我们在前面的文章里面讲到session的原理和最佳实践,感到意犹未尽.现在再来聊下PHP Session用到的几个相关的函数. session_start() session_start() 会创建新 ...

  7. Java多线程:ThreadLocal

    一.ThreadLocal基础知识 ThreadLocal是线程的一个本地化对象,或者说是局部变量.当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的 ...

  8. JavaScript(第六天)【函数】

    函数是定义一次但却可以调用或执行任意多次的一段JS代码.函数有时会有参数,即函数被调用时指定了值的局部变量.函数常常使用这些参数来计算一个返回值,这个值也成为函数调用表达式的值. 一.函数声明   函 ...

  9. Beta项目复审

    Beta项目复审 复审人:张宇光 所属团队:MyGod 团队成员:程环宇.王田路.张芷祎.张宇光.王婷婷 团队排名: SW_HW4-team团队 hyw-team团队 Java-Team团队 C++团 ...

  10. 展示博客(Beta版本)

    团队:xjbz 1. 团队成员博客,源码仓库地址. coding:https://git.coding.net/z404395979/xjbz.git 钟平辉(071):http://www.cnbl ...