一、名称空间:

名称空间

定义:存放名字和值的绑定关系

     

内置名称空间

python自带的名字,如print、int、str

解释器启动就会生效

 

全局名称空间

文件级别定义的名字,都会放在全局名称空间(没有缩进的所有定义的名字)

执行文件时会产生,执行完就没了

这个也算全局的y=3:
if 1>2:
   y=3

局部名称空间

定义在函数内部的名字

只有在调用函数的时候才生效,调用结束就失效

 

加载顺序

内置名称空间======》

全局名称空间======》

局部名称空间

另:

取值顺序

局部名称空间======》

全局名称空间======》

内置名称空间

函数与变量的作用域关系在定义的时候就已经固定了,即使后来在外面调用了内层函数,使用的变量任然是定义时的各个函数

       

作用域

全局作用域(全局有效)

内置名称空间+全局名称空间

 

局部作用域(局部、函数内部有效)

局部名称空间

 

取值

局部作用域=======》

全局作用域

 

局部作用域

locals

局部要改全局变量,要先声明 globals x,再定义x(尽量避免)

全局作用域

globals

文件执行结束,变量删除,重新定义后才会失效

 

nonlocal

改上一层的局部变量,如果局部没有,不会改全局

二、函数嵌套:

函数的嵌套调用

函数的嵌套定义

函数内定义的函数只能在函数内调用,就像函数内定义的变量,外面无法调用

  1. def f1():
  2. def f2():
  3. def f3():
  4. print('from f3')
  5. print('from f2')
  6. f3()
  7. print('from f1')
  8. f2()
  9.  
  10. f1()
  11.  
  12. D:\Python36\python.exe D:/py/test/homework0612.py
  13. from f1
  14. from f2
  15. from f3

三、函数对象:

函数是第一类对象:

可以被引用

 

可以被当做函数参数

 

可以被当做函数返回值

 

可以当做容器类型的元素

  1. #函数是第一类对象: 指的是函数可以被当做数据传递
  2.  
  3. # def func():
  4. # print('from func')
  5.  
  6. #可被引用
  7. # f=func
  8.  
  9. #可以当做函数的参数
  10. # def func():
  11. # print('from func')
  12. # def foo(x):
  13. # print(x)
  14. # x()
  15.  
  16. # foo(func)
  17.  
  18. #可以当做函数的返回值
  19. # def foo():
  20. # print('from foo')
  21. # def bar():
  22. # return foo
  23. # f=bar()
  24. # print(f)
  25. # print(foo)
  26. # f()
  27.  
  28. # x=0
  29. # def f1():
  30. # x=1
  31. # def f2():
  32. # # x=2
  33. # print(x)
  34. # return f2
  35. # f=f1()
  36. # print(f)
  37. # f()
  38.  
  39. #可以当做容器类型的元素
  40. # def select():
  41. # print('select function')
  42. #
  43. # func_dic={
  44. # 'select':select,
  45. # }
  46. #
  47. # print(func_dic['select'])
  48. # func_dic['select']()
  49. #
  50.  
  51. #
  52. # def select():
  53. # print('select func')
  54. #
  55. # def delete():
  56. # print('delete func')
  57. #
  58. # def change():
  59. # print('change func')
  60. #
  61. # def add():
  62. # print('add func')
  63. #
  64. #
  65. # while 1:
  66. # cmd=input('>>: ').strip()
  67. # if not cmd:continue
  68. # if cmd == 'select':
  69. # select()
  70. # elif cmd == 'delete':
  71. # delete()
  72. # elif cmd == 'change':
  73. # change()
  74. # elif cmd == 'add':
  75. # add()
  76. # else:
  77. # print('无效的命令')
  78.  
  79. def select(cmd_l):
  80. filename=cmd_l[-1]
  81. pattern=cmd_l[1]
  82.  
  83. with open(filename,'r',encoding='utf-8') as f:
  84. for line in f:
  85. if pattern in line:
  86. print(line)
  87.  
  88. def delete():
  89. print('delete func')
  90.  
  91. def change():
  92. print('change func')
  93.  
  94. def add():
  95. print('add func')
  96.  
  97. def check():
  98. print('check func')
  99.  
  100. func_dic={
  101. 'select':select,
  102. 'delete':delete,
  103. 'change':change,
  104. 'add':add,
  105. 'check':check,
  106. }
  107.  
  108. while 1:
  109. inp=input('>>: ').strip()
  110. if not inp:continue #如果输入为空则继续 输入自带bool值,如果为空,bool值为FALSE,不空则为True。
  111. cmd_l=inp.split()
  112. # print(cmd_l)
  113. cmd=cmd_l[0]
  114. if cmd in func_dic:
  115. func_dic[cmd](cmd_l)
  116. else:
  117. print('无效的命令')

Python(名称空间、函数嵌套、函数对象)的更多相关文章

  1. Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器

    Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: ​ 1. 可以在局部作用域声明一 ...

  2. Python记录9:函数4:名称空间作用域+闭包函数+装饰器

    ''' 一: 名称空间namespaces     名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种     内置名称空间:         1. 特点: 存放是python解释器自 ...

  3. Day11名称空间,作用域,闭包函数

    Day11 1.函数对象: ①可以被引用 ​ ②可以作为另一个函数的参数 ​ ③可以作为另一个函数的返回值0 ​ ④可以被存储到容器类型中 2.函数嵌套: ①嵌套调用:在一个函数中调用了另一个函数 ​ ...

  4. python名称空间和作用域

    python名称空间和作用域 名称空间 名称空间:例如a=1000,python解释器会开辟一块新的内存来存贮1000这个变量值,然后会有一个a指向这个1000,那么a存在哪里?其实他和变量值差不多, ...

  5. day 22 二十二、面向对象导入、名称空间、类与对象

    一.面向对象导入 1.含义: ①面向过程: 重过程:解决问题,考虑的是解决问题的流程 解决问题的思路清晰,但拓展性不强 ②面向对象: 重对象:解决问题,找到解决问题的对象 解决问题的思路可能不止一条( ...

  6. python名称空间介绍

    python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...

  7. Python名称空间与作用域

    什么是名称空间? 比如下图的长方形代表内存,在这个内存里我要设置一个变量100,那么这个变量得有个门牌号,就叫他a吧,但其实变量不是这么存储的,他其实的存储方式是这样的,他会有一个名称空间,这个名称空 ...

  8. python之函数对象、名称空间、嵌套、作用域、闭包

    函数对象 # 函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象​# 函数对应的原因# 1 可以直接被引用# 2 可以当作函数参数传递# 3 可以作为函数的返回值 ...

  9. day 12 名称空间和闭包函数

    函数嵌套 按照函数的两个阶段分为: 嵌套调用:在一个函数内部调用另一个函数 嵌套定义:在一个函数内部定义另一个函数 名称空间(namespace):存储名字的内存区域 名称空间的分类: 内置名称空间: ...

  10. Python学习之高阶函数--嵌套函数、函数装饰器、含参函数装饰器

    玩了一晚上王者,突然觉得该学习,然后大晚上的搞出来这道练习题,凌晨一点写博客(之所以这么晚就赶忙写是因为怕第二天看自己程序都忘了咋写的了),我太难了o(╥﹏╥)o 言归正传,练习题要求:构造类似京东的 ...

随机推荐

  1. Linux下配置Hadoop全分布式环境

    1. 前提 部署全分布式环境,我们肯定不能在一台服务器上了,这里我用了7台服务器,在VMware上开了7个虚拟机,如下图所示: 我基本配置了一晚上才搞定,第一次配置一般都有错,这时候不妨去到hadoo ...

  2. css背景图片拉伸

    css背景图片拉伸 background-image:url(bg.png); -moz-background-size: 100% 100%; -o-background-size: 100% 10 ...

  3. java需要掌握内容、核心不断更新中

    1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该十分了解UML,尤其是class,object,interaction以及statediagra ...

  4. 深入了解Go Playground

    简介 2010年9月,我们介绍了Go Playground,这是一个完全由Go代码组成和返回程序运行结果的web服务器. 如果你是一位Go程序员,那你很可能已经通过阅读Go教程或执行Go文档中的示例程 ...

  5. struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象

    struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...

  6. 嵌入式开发之示波器----tektronix tds2024 的使用

    http://jingyan.baidu.com/article/91f5db1bf715c01c7f05e39a.html http://cn.tek.com/learning/oscillosco ...

  7. js漂亮的弹出层

    1.漂亮的弹出层----artDialog http://aui.github.io/artDialog/ 2.弹出层 ------layer http://sentsin.com/jquery/la ...

  8. vim 命令大全(写的非常全和好)http://blog.csdn.net/woshixiaosimao/article/details/54312738

    下文转自链接.由原作者陈皓译自<Learn ViM Progressively>,非常不错. ——————————正文开始—————————— 你想以最快的速度学习人类史上最好的文本编辑器 ...

  9. 第8步:安装Oracle

    安装Oracle 注意,安装Oracle时需要以oracle用户身份执行,在那之前需要以root身份执行xhost+,即命令: 代码1 [root@sgdb1~]# xhost+ [root@sgdb ...

  10. node中的require和exports

    http://cnodejs.org/topic/4f16442ccae1f4aa270010e9