博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十天函数进阶
阅读量:6193 次
发布时间:2019-06-21

本文共 1195 字,大约阅读时间需要 3 分钟。

---恢复内容开始---

一 命名空间:

  全局命名空间:在定义函数和变量的时候会生成一个全局命名空间,在程序从上到下被执行的过程中被一次加载进内存。

    例如:我们曾经定义过的函数名或变量名称。

  局部命名空间:就是函数内部定义的名称。在函数调用过程中才会被放到内存中

  内置命名空间:python解释器启动时就存在于内存中的空间。

    例如:print()  list()  input()  等都有内置的命名空间。

  在局部:可以使用全局和内置命名空间

  在全局:可以使用内置命名空间和全局命名空间的变量

  即在大空间不能使用小空间里的变量,但是在小空间里可以使用大空间里的变量。

  在内置的命名空间里,是不能使用全局和全局变量的。

  另外注意:如果定义了和内置函数的自定义函数,自定义函数会覆盖内置函数。

  多个局部空间之间各自的变量是不共享的。

 

二 作用域:

  全局作用域:作用在全局,包含全局和内置命名空间中的名字。

  局部作用域:作用在局部,包含函数内的名字。

    注意,对于不可变类型,在局部可以查看全局变量,但是不能直接修改。如果想要修改的话,需要使用global声名。

    但是尽量不要使用global 声名,尽量使用传参和接受参数去在局部和全局中传递参数。

a = 1 def adda():     global a     a += 1     print(a) adda() >>> 2

    以上代码意味着,函数使用的是全局变量,而不是函数内的局部变量。

  locals() :用于查看全部的局部变量。

  globals() :用于查看全部的全局变量,甚至包含在局部中的变量。

 

  注意,函数产生的作用域是在定义函数的位置产生的,而不是在定义函数的位置产生的。

  所以,即使函数是在内部空间定义,而在全局空间调用,这个函数使用的还是内部嵌套的局部空间变量,而不是全局空间变量。

  

三 闭包

  在外部函数定义了变量,在内部函数中调用了外部函数的变量,就以意味着这个内部函数就是一个闭包函数。

  如果print(函数名.__closure)如果打印了一个cell的结果,那么这个函数就是一个闭包。

 

  标准格式:

  def outer():

    a = 1

    def inner():

      print(a)

    return inner

  inn = outer()

  inn()

 

  意义:这个时候,虽然a不是一个全局变量,但是这个变量是会始终存在于内存中的。这个变量不会影响全局变量,又可以随时使用。

    目前应该还没有需求点,但是以后对于程序的优化作用是很大的。

转载于:https://www.cnblogs.com/wanghanyao/p/10171926.html

你可能感兴趣的文章
使用jMeter构造大量并发HTTP请求进行微服务性能测试
查看>>
实现RabbitMQ 延时消息
查看>>
系统目录结构、ls命令、文件类型、alias命令
查看>>
京东八年架构师: Redis 如何分布式,金融的设计原理
查看>>
完美Python入门基础知识点总结,看完你的Python就完全入门了!
查看>>
hadoop副本放置策略
查看>>
FastDFS-图片服务器
查看>>
最快1天搭建短视频APP!阿里云短视频解决方案上线
查看>>
只想着一直调用一直爽, 那API凭证泄漏风险如何破?
查看>>
Material Design设计规范在ComponentOne For WinForm的应用(上)
查看>>
分布式之数据库和缓存双写一致性方案解析
查看>>
为什么开发人员必须要了解数据库锁?
查看>>
shell-for循环
查看>>
iOS 图片 的 聊天气泡显示 Objective-C 和 Swift
查看>>
Xcache和memcache的问题
查看>>
OSChina 周六乱弹 ——你们怎么懂我的少年心
查看>>
OSChina 周四乱弹 ——程序员下班后8小时干嘛?啪啪啪
查看>>
Java开发相关配置
查看>>
开始ruby
查看>>
zookeepr集群环境搭建
查看>>