python函数-函数进阶

一、命名空间和作用域

1.命名空间

内置命名空间 —— python解释器        就是python解释器一启动就可以使用的名字存储在内置命名空间中        内置的名字在启动解释器的时候被加载进内存里全局命名空间 —— 我们写的代码但不是函数中的代码        是在程序从上到下被执行的过程中依次加载进内存的        放置了我们设置的所有变量名和函数名局部命名空间 —— 函数        就是函数内部定义的名字        当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了

在局部:可以使用全局、内置命名空间中的名字

在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
在内置:不能使用局部和全局的名字的

在正常情况下,直接使用内置的名字当我们在全局定义了和内置名字空间中同名的名字时,会使用全局的名字当我自己有的时候 我就不找我的上级要了如果自己没有 就找上一级要 上一级没有再找上一级 如果内置的名字空间都没有 就报错多个函数应该拥有多个独立的局部名字空间,不互相共享

2.作用域

全局作用域:内置命名空间、全局命名空间

局部作用域:局部命名空间

3.global关键字

对于不可变的数据类型,在局部可以查看全局作用域中的变量,但是不能修改,如果想在局部作用域中对全局作用域的不可变数据类型变量进行修改,需要在局部开始加上global声明

x = 1 # 全局作用域的不可变数据类型变量x
def func():global x # 在局部作用域中对其进行声明x = 2     # 声明后则可以在局部作用域中对其进行修改操作
func()
print(x)   # 局部作用域将全局作用域的不可变数据类型变量修改后,在全局作用域中打印,其值被修改

4.locals()、globals()函数

①globals():输出全局作用域的所有变量

②locals():输出当前作用域的所有变量

  

a = 1
def func():a = 666print('函数内部的locals:'+str(locals()))
func()print('函数外部的globals:'+str(globals()))
print('函数外部的locals:'+str(locals()))>>> 函数内部的locals:{'a': 666}
>>> 函数外部的globals:{'__doc__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000653EF0>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, '__spec__': None, '__author__': 'Elijah', '__file__': 'D:/python_fullstack_s9/day10/practice.py', '__date__': '2017/12/27 8:33', 'func': <function func at 0x000000000070E6A8>, 'a': 1, '__package__': None}
>>> 函数外部的locals:{'__doc__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000653EF0>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, '__spec__': None, '__author__': 'Elijah', '__file__': 'D:/python_fullstack_s9/day10/practice.py', '__date__': '2017/12/27 8:33', 'func': <function func at 0x000000000070E6A8>, 'a': 1, '__package__': None}

③global关键字

a = 1
def func():global aa = 666
func()print('此时a的值:' + str(a))
>>> 此时a的值:666

④nonlocal和global 

global---在局部声明一个全局变量

nonlocal--在局部声明最近的上一层局部中的变量

nonlocal1.对全局无效
2.对局部,也是对最近的一层有影响
3.只能用于局部变量,找上层中离当前函数最近一层的局部变量
4.声明了nonlocal的内部函数的变量,修改会影响到离当前函数最近的一层的局部变量

 

a = 0
def func():#a = 1def inner():a = 2def inner2():nonlocal  ainner2()inner()
func()

5.函数的嵌套

def outer():print('this is outer!')def inner():print('this is inner!')inner()
outer()

6.作用域链 

小范围用变量的时候,先从自己的命名空间查找,找不到就一层一层向外层找,知道找为止,找不到就报错

a = 1
def outer():a = 1def inner():a = 2def inner2():nonlocal a  #声明了一个上面第一层局部变量a += 1   #不可变数据类型的修改inner2()print('##a## : ', a)inner()print('**a** : ',a)outer()
print('全局 :',a)

7.函数名的本质 

①可以被赋值

②可以被当作容器类型的元素

③可以当作函数的参数和返回值

第一类对象(first-class object)指
1.可在运行期创建
2.可用作函数参数或返回值
3.可存入变量的实体

8.闭包  

①内部函数调用对外部函数,还是嵌套函数称为闭包函数

def outer():a = 1def inner():print(a)return inner
inn = outer()
inn()

②判断闭包函数的方法__closure__

  

#输出的__closure__有cell元素 :是闭包函数
def func():name = 'eva'def inner():print(name)print(inner.__closure__)return innerf = func()
f()#输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():def inner():print(name)print(inner.__closure__)return innerf2 = func2()
f2()

  



转载于:https://www.cnblogs.com/a438842265/p/8466361.html

python函数-函数进阶相关推荐

  1. python基础函数及用法意思_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

  2. python order函数_Python进阶内容(一)--- 高阶函数 High order function

    0. 问题 # 本文将围绕这段代码进行Python中高阶函数相关内容的讲解 # 文中所有代码的兼容性要求为:Python 3.6,IPython 6.1.0 def addspam(fn): def ...

  3. python进行linux编程,Python之函数进阶

    本节内容 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一.递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数.如果一个函数在内部调用本身,这个函数就是一个递归函数.函数递归 ...

  4. python replace函数用法_Python实现的从右到左字符串替换方法示例

    本文实例讲述了Python实现的从右到左字符串替换方法.分享给大家供大家参考,具体如下: 一 . 前言 需要用到,但是发现python没有从右边开始替换的内置方法,默认的replace只是从左边开始, ...

  5. exit函数_全面深入了解 Python 魔法函数

    (点击上方公众号,可快速关注一起学Python) 作者:浪子燕青       链接: http://www.langzi.fun/Python魔法函数.html 魔法函数概念 魔法函数是以双下划线开头 ...

  6. python函数和方法概念_第48p,什么是函数?,Python中函数的定义

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第48篇文章,第三阶段的课程:Python进阶知识:详细讲解Python中的函数(一)====> 函数概念介绍(上篇). 函数 ...

  7. python中home定义是什么_第48p,什么是函数?,Python中函数的定义

    原标题:第48p,什么是函数?,Python中函数的定义 大家好,我是 杨数 Tos ,这是<从 零 基础到大神>系列课程的第 48 篇文章 ,第三阶段的课程 : Python进阶知识:详 ...

  8. python中怎么调用函数_浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时 ...

  9. python中函数的定义实例_Python基础之函数的定义与使用实例

    此文实例介绍了Python基础之函数的定义与使用.推荐给大伙学习一下,内容如下: Python 定义函数使用 def 关键字,一般格式如下: def 函数名(参数列表): 函数体 让我们使用函数来输出 ...

最新文章

  1. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决
  2. oracle 数据库中拆分,oracle数据库字符串拆分
  3. 根据IP地址获取主机名称
  4. Win10系统hosts文件不见了的解决方法
  5. 10篇产品大V精华文章,你值得一读
  6. 灵活强大的MySQL代理中间件ProxySQL应用实战(2)
  7. 他爱的只是你爱他(一)
  8. idea mysql做登录界面_IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能...
  9. a中嵌套div的问题
  10. Atitit 项目分析与统计目录1. 静态分析+动态分析 。其中, 12. 模块分析,与模块位置idx 13. 编程语言类型与版本 13.1. 类库统记表 类型与版本 23.2. 中间
  11. Visual Studio 2012 激活码
  12. matlab求导程序,「matlab求导」matlab 求导的一个简单程序 - 金橙教程网
  13. IIS站点部署后频繁弹出“Visual Studio实时调试器”问题
  14. 汾阳哪里有计算机培训班,汾阳市2020年第六期 吕梁山护工培训班开班
  15. 【教程】Unity账号注册和Unity Hub激活
  16. 新年寄语+从业感受+祝大家新年快乐~
  17. java 定义泛型变量_Java不应该允许变量声明的泛型类型声明的任何原因?
  18. K9F1G08U0B K9F2G08U0A K9F2G08U0M
  19. 基于xilinx fpga的ofdm通信系统基带设计_基于嵌入式Wi-Fi处理器的无线系统设计...
  20. 服务注册中心如何选型

热门文章

  1. js原型、原型链、作用链、闭包全解
  2. VBA操作word生成sql语句
  3. windows服务器的DDOS防御,
  4. Proe Top-Down设计演示
  5. 【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告...
  6. 北语19秋计算机应用基础作业答案,北语18秋《计算机应用基础》练习1满分答案...
  7. python将dataframe导出为csv_python将dataframe转换为csv,为每列导出一个格式独特的文本文件...
  8. php无法用mail函数发送邮件之原因
  9. SVG格式的Icon,用了你就知道有多香
  10. 汽车电子专业知识篇(二十)-深度解析CAN FD与传统CAN的差异