Python(名称空间、函数嵌套、函数对象)
一、名称空间:
名称空间 |
定义:存放名字和值的绑定关系 |
|||
内置名称空间 |
python自带的名字,如print、int、str |
解释器启动就会生效 |
||
全局名称空间 |
文件级别定义的名字,都会放在全局名称空间(没有缩进的所有定义的名字) |
执行文件时会产生,执行完就没了 |
这个也算全局的y=3: |
|
局部名称空间 |
定义在函数内部的名字 |
只有在调用函数的时候才生效,调用结束就失效 |
加载顺序 |
内置名称空间======》 |
全局名称空间======》 |
局部名称空间 |
另: |
取值顺序 |
局部名称空间======》 |
全局名称空间======》 |
内置名称空间 |
函数与变量的作用域关系在定义的时候就已经固定了,即使后来在外面调用了内层函数,使用的变量任然是定义时的各个函数 |
作用域 |
全局作用域(全局有效) |
内置名称空间+全局名称空间 |
||
局部作用域(局部、函数内部有效) |
局部名称空间 |
|||
取值 |
局部作用域=======》 |
全局作用域 |
局部作用域 |
locals |
局部要改全局变量,要先声明 globals x,再定义x(尽量避免) |
全局作用域 |
globals |
文件执行结束,变量删除,重新定义后才会失效 |
nonlocal |
改上一层的局部变量,如果局部没有,不会改全局 |
二、函数嵌套:
函数的嵌套调用
函数的嵌套定义
函数内定义的函数只能在函数内调用,就像函数内定义的变量,外面无法调用
- def f1():
- def f2():
- def f3():
- print('from f3')
- print('from f2')
- f3()
- print('from f1')
- f2()
- f1()
- D:\Python36\python.exe D:/py/test/homework0612.py
- from f1
- from f2
- from f3
三、函数对象:
函数是第一类对象: |
可以被引用 |
可以被当做函数参数 |
|
可以被当做函数返回值 |
|
可以当做容器类型的元素 |
- #函数是第一类对象: 指的是函数可以被当做数据传递
- # def func():
- # print('from func')
- #可被引用
- # f=func
- #可以当做函数的参数
- # def func():
- # print('from func')
- # def foo(x):
- # print(x)
- # x()
- # foo(func)
- #可以当做函数的返回值
- # def foo():
- # print('from foo')
- # def bar():
- # return foo
- # f=bar()
- # print(f)
- # print(foo)
- # f()
- # x=0
- # def f1():
- # x=1
- # def f2():
- # # x=2
- # print(x)
- # return f2
- # f=f1()
- # print(f)
- # f()
- #可以当做容器类型的元素
- # def select():
- # print('select function')
- #
- # func_dic={
- # 'select':select,
- # }
- #
- # print(func_dic['select'])
- # func_dic['select']()
- #
- #
- # def select():
- # print('select func')
- #
- # def delete():
- # print('delete func')
- #
- # def change():
- # print('change func')
- #
- # def add():
- # print('add func')
- #
- #
- # while 1:
- # cmd=input('>>: ').strip()
- # if not cmd:continue
- # if cmd == 'select':
- # select()
- # elif cmd == 'delete':
- # delete()
- # elif cmd == 'change':
- # change()
- # elif cmd == 'add':
- # add()
- # else:
- # print('无效的命令')
- def select(cmd_l):
- filename=cmd_l[-1]
- pattern=cmd_l[1]
- with open(filename,'r',encoding='utf-8') as f:
- for line in f:
- if pattern in line:
- print(line)
- def delete():
- print('delete func')
- def change():
- print('change func')
- def add():
- print('add func')
- def check():
- print('check func')
- func_dic={
- 'select':select,
- 'delete':delete,
- 'change':change,
- 'add':add,
- 'check':check,
- }
- while 1:
- inp=input('>>: ').strip()
- if not inp:continue #如果输入为空则继续 输入自带bool值,如果为空,bool值为FALSE,不空则为True。
- cmd_l=inp.split()
- # print(cmd_l)
- cmd=cmd_l[0]
- if cmd in func_dic:
- func_dic[cmd](cmd_l)
- else:
- print('无效的命令')
Python(名称空间、函数嵌套、函数对象)的更多相关文章
- Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器
Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: 1. 可以在局部作用域声明一 ...
- Python记录9:函数4:名称空间作用域+闭包函数+装饰器
''' 一: 名称空间namespaces 名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种 内置名称空间: 1. 特点: 存放是python解释器自 ...
- Day11名称空间,作用域,闭包函数
Day11 1.函数对象: ①可以被引用 ②可以作为另一个函数的参数 ③可以作为另一个函数的返回值0 ④可以被存储到容器类型中 2.函数嵌套: ①嵌套调用:在一个函数中调用了另一个函数 ...
- python名称空间和作用域
python名称空间和作用域 名称空间 名称空间:例如a=1000,python解释器会开辟一块新的内存来存贮1000这个变量值,然后会有一个a指向这个1000,那么a存在哪里?其实他和变量值差不多, ...
- day 22 二十二、面向对象导入、名称空间、类与对象
一.面向对象导入 1.含义: ①面向过程: 重过程:解决问题,考虑的是解决问题的流程 解决问题的思路清晰,但拓展性不强 ②面向对象: 重对象:解决问题,找到解决问题的对象 解决问题的思路可能不止一条( ...
- python名称空间介绍
python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...
- Python名称空间与作用域
什么是名称空间? 比如下图的长方形代表内存,在这个内存里我要设置一个变量100,那么这个变量得有个门牌号,就叫他a吧,但其实变量不是这么存储的,他其实的存储方式是这样的,他会有一个名称空间,这个名称空 ...
- python之函数对象、名称空间、嵌套、作用域、闭包
函数对象 # 函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象# 函数对应的原因# 1 可以直接被引用# 2 可以当作函数参数传递# 3 可以作为函数的返回值 ...
- day 12 名称空间和闭包函数
函数嵌套 按照函数的两个阶段分为: 嵌套调用:在一个函数内部调用另一个函数 嵌套定义:在一个函数内部定义另一个函数 名称空间(namespace):存储名字的内存区域 名称空间的分类: 内置名称空间: ...
- Python学习之高阶函数--嵌套函数、函数装饰器、含参函数装饰器
玩了一晚上王者,突然觉得该学习,然后大晚上的搞出来这道练习题,凌晨一点写博客(之所以这么晚就赶忙写是因为怕第二天看自己程序都忘了咋写的了),我太难了o(╥﹏╥)o 言归正传,练习题要求:构造类似京东的 ...
随机推荐
- Linux下配置Hadoop全分布式环境
1. 前提 部署全分布式环境,我们肯定不能在一台服务器上了,这里我用了7台服务器,在VMware上开了7个虚拟机,如下图所示: 我基本配置了一晚上才搞定,第一次配置一般都有错,这时候不妨去到hadoo ...
- css背景图片拉伸
css背景图片拉伸 background-image:url(bg.png); -moz-background-size: 100% 100%; -o-background-size: 100% 10 ...
- java需要掌握内容、核心不断更新中
1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该十分了解UML,尤其是class,object,interaction以及statediagra ...
- 深入了解Go Playground
简介 2010年9月,我们介绍了Go Playground,这是一个完全由Go代码组成和返回程序运行结果的web服务器. 如果你是一位Go程序员,那你很可能已经通过阅读Go教程或执行Go文档中的示例程 ...
- struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象
struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...
- 嵌入式开发之示波器----tektronix tds2024 的使用
http://jingyan.baidu.com/article/91f5db1bf715c01c7f05e39a.html http://cn.tek.com/learning/oscillosco ...
- js漂亮的弹出层
1.漂亮的弹出层----artDialog http://aui.github.io/artDialog/ 2.弹出层 ------layer http://sentsin.com/jquery/la ...
- vim 命令大全(写的非常全和好)http://blog.csdn.net/woshixiaosimao/article/details/54312738
下文转自链接.由原作者陈皓译自<Learn ViM Progressively>,非常不错. ——————————正文开始—————————— 你想以最快的速度学习人类史上最好的文本编辑器 ...
- 第8步:安装Oracle
安装Oracle 注意,安装Oracle时需要以oracle用户身份执行,在那之前需要以root身份执行xhost+,即命令: 代码1 [root@sgdb1~]# xhost+ [root@sgdb ...
- node中的require和exports
http://cnodejs.org/topic/4f16442ccae1f4aa270010e9