一、名称空间:

名称空间

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

     

内置名称空间

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

解释器启动就会生效

 

全局名称空间

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

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

这个也算全局的y=3:
if 1>2:
   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(名称空间、函数嵌套、函数对象)的更多相关文章

  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. 在32位Centos6.4上安装GraphicsMagick

    安装时,make总是有如下错误,最后几行 /bin/sh ./libtool --tag=CC --mode=link gcc -std=gnu99 -g -O2 -Wall -pthread -ld ...

  2. hdu6055 Regular polygon 脑洞几何 给定n个坐标(x,y)。x,y都是整数,求有多少个正多边形。因为点都是整数点,所以只可能是正四边形。

    /** 题目:hdu6055 Regular polygon 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6055 题意:给定n个坐标(x,y).x,y都 ...

  3. android camera之nv21旋转

    这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相机打过交道的都清楚,android的came ...

  4. sed awk文本处理教程

    sed全名叫stream editor,流编辑器,用程序的方式来编辑文本,相当的hacker啊.sed基本上就是玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强. 把my字符串替换成Hao ...

  5. 第二百四十一节,Bootstrap进度条媒体对象和 Well 组件

    第二百四十一节,Bootstrap进度条媒体对象和 Well 组件 学习要点: 1.Well 组件 2.进度条组件 3.媒体对象组件 本节课我们主要学习一下 Bootstrap 的三个组件功能:Wel ...

  6. 剑指offer(13)-栈的压入、弹出序列 九度1366

    题目来自剑指offer系列 九度 1366:http://ac.jobdu.com/problem.php?pid=1367 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列 ...

  7. servlet各版本区别以及dynamic web module 版本之间的区别

    java的web系统有多种类型,比如静态的和动态的,然后动态的java web project要设置dynamic web module,也就是动态网页模型,他必须要喝对应的服务器搭配好了才能跑,今天 ...

  8. 俄罗斯方块——shell

    #!/bin/bash # Tetris Game # xhchen<[email]xhchen@winbond.com.tw[/email]> #APP declaration APP_ ...

  9. AngularJs 解决浏览器在初始化代码未加载完毕时 而出现闪烁的问题

    1. ng-cloak; 因浏览器会先加载dom元素 而针对于{{pression}} 由于angularjs 还没加载完,会在页面出现闪烁 2.ng-bind; 用ng-bind代替{{expres ...

  10. 原生JS返回顶部,带返回效果

    有些网站当滑到一定高度时右下角会有一个按钮,你只要一点就可以直接返回顶部了.那这个功能是怎么做到的呢.其实不算太难: 首先我们先在网页中创建一个按钮,上面写上返回顶部,把它的样式改成固定定位,之后想要 ...