python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义
复习
1. 字符串的比较:
2. 函数的参数:形参与实参
3. 实参的分类:位置实参与关键字实参
4. 形参分类:
1.无值位置形参
2.有值位置形参
3.可变长位置形参
4.有无值关键字形参
5.可变长关键字形参
5. 打散机制
今日内容
1. 函数默认值的细节。*
2. 数据类型的补充:语法简单,经常去使用就OK ***
----- 三元表达式 | 列表推导式 | 字典推导式
3. 函数对象:函数名的各种应用场景 *****
4. 名称空间与作用域:解释变量名重复与从图冲突问题 *****
5. 函数的嵌套定义:在函数内部定义函数 *****
函数默认值的细节
如果函数的默认参数,它的默认值为变量,在所属函数定义阶段执行时就被确为当时变量存放的值。
a = 100
def fn(num=a):
print(num) # 此处打印的值还是100
a = 200 # 此处再次赋值的200并没有被带入函数中
fn()
三元表达式
三目运算符:用于简化 if ...else... 的语法:
----- 只能解决 if...else...结构,其他 if 分支结构都不管
-----一个分支提供一个结果,如果一个分支提供了多个结果,将多个结果通过元祖返回
a = int(input('输入:'))
b = int(input('输入:'))
res = a if a > b else b
print(res)
列表与字典推导式
---快速生成列表或者字典的语法糖。而且还能在生成过程中添加简单的逻辑
1 . 能被列表推导式推到的数据源,必须在循环取值时可以得到一个值
ls = [v for v in range(1,6)]
print(ls) # [1, 2, 3, 4, 5] 快速的创建一个字典
ls = ['奇数'if v %2 ==0 else '偶数' for v in range(1,6)] # 可以使用if...else 与for循环连用,此处if后的v就是经过for循环的v
print(ls) # ['偶数', '奇数', '偶数', '奇数', '偶数']
2. 能被字典推导式推导的数据源,必须在循环取值时可以被解压赋值为两个值
ls = [['A',1],('B',2)]
res = {k.lower():v for k,v in ls} # 字典推导式可以for循环遍历列表总的元素,然后用k,v来接受,来作为它的key和value 还可以对key加功能,比如此处的lower
print(res) # 此处的结果为{'a': 1, 'b': 2}
函数对象
在python中,所有变量存放的值,只要是地址,我们就称之为对象
-----所有的变量都是用来存放地址的,所以都是对象
-----存放整型的地址就是整型对象 | 存放函数的地址就是函数对象 | 存放文件的地址就是文件对象
函数对象:存放函数地址的变量,就是函数对象
def fn():pass
my_fn = fn
# my_fn 存着函数fn()的函数地址,所以都是函数对象,函数对象的使用就是函数对象加()来调用函数
my_fn() # 可以这样来使用
函数对象的应用场景
1. 函数对象()就是调用函数
def fn1():
pass
fn1() # 普通的函数调用
2. 函数对象可以直接作为变量赋值给其他变量
def fn2():
pass
my_fn = fn2
print('>>>',my_fn,fn2) # 此处打印的地址一致,说明函数对象可以作为变量来赋值给其他变量
my_fn() # 依然能调用 此处my_fn 等同与所定义的 fn2 函数
3. 函数对象可以作为函数的参数
def fn3(func): # 所以此处的fnnc 就等同与my_fn 和 fn2
func()
fn3(my_fn) # 此处把my_fn作为了 func的实参所以这个函数所执行的就是fn2函数
4. 函数对象可以作为函数的返回值
def fn4():
return my_fn # 此处这个函数的返回值是my_fn
my_fn2 = fn4() # s所以此处的my_fn2的功能就是my_fn而my_fn的功能是fn2,所以等同于fn2
5. 函数对象可以作为容器类型的成员
ls = [my_fn,my_fn2] # 函数的对象可以作为容器的元素。如果调用,也具有函数的功能
print(ls[0]()) # 可以按照索引来调用
名称空间并不能
队列存储方式: 先进先出
堆栈存储方式:先进后出
名称空间:就是名字与地址的对应关系,可以被python解释器遍历查找,采用堆栈存储方式
三种名称空间:
1. Built - in : 内置名称空间,系统级,一个,随解释器执行而产生,解释器停止而销毁
2. Global : 全局名称空间,文件级,多个,随所属文件加载而产生,文件运行完毕后销毁
3. Local : 局部名称空间,函数级,多个,随所属函数执行而产生,函数执行完毕后销毁
注:文件的 if ,while,for ,with,这些能产生缩减的关键字并不能产生名称空间
4. 加载顺序 Bulit-in > Global > Local
函数嵌套定义
概念:在一个函数内部定义另一个函数
def outer():
print('outer run')
a = 10 # 函数对象 (变量) 与普通(对象)变量一样,在函数内部定义,随函数调用而产生
# 调用结束而销毁,所以只能在函数内部调用
def inner():
print('inner run')
inner() # 此处inner必须在函数内部调用,在外部是无法调用
outer()
作用域
作用域:变量(名字 | 对象) 起作用的范围
四种作用域
1. Built-in 内置作用域:作用所有文件的所有地方
2. Global 全局作用域 :作用当前文件的所有地方
3. Enclosing 嵌套作用域 :作用当前函数以及内部被嵌套的函数
4. Local 局部作用域 : 作用当前函数内部
注意:
不同作用域之间名字不冲突,来达到名字的重复的使用
每个作用域优先使用自己作用域中的名字,没有再找到更大的名称空间,直到内置。再找不到就会报错
查找顺序:Local > Enclosing > Global > Built - in
python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义的更多相关文章
- day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义
复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...
- python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
复习 1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用: # 字符串的比较# -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...
- python 函数的名称空间及作用域
一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...
- Python 函数对象-函数嵌套-名称空间与作用域-闭包函数
今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...
- day12 函数对象,名称空间与作用域
""" 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...
- PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数
一 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 3 可以当作容器类型的元素 def foo(): return len f = foo pri ...
- python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域
复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参: -- 形参:在函数定义时()中出现的参数 ...
- Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)
今日主要内容 1. 函数默认值细节(*) 2. 数据类型补充:三元表达式.列表推导式.字典推导式 (***) 3. 函数对象:函数名的各种应用场景 (*****) 4. 名称空间与作用域:解释 ...
- day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义
复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...
随机推荐
- 程序员50题(JS版本)(八)
程序36:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人推出圈子,问最后留下的是原来第几号的那位 var n=20; var arr=[]; for(var i=0;i& ...
- vue -webkit-box-orient: vertical webpack打包后被过滤掉了 线上没有这行代码
(1)方法一:加上绿色注释,跳过webpack的css打包 .word-overflow-{ overflow:hidden; text-overflow:ellipsis; display:-web ...
- VSCode中快捷输入HTML代码
VSCode中有一些快捷编辑HTML的方法,能大大提高工作效率,在这记录一些. 1.输入html:5,然后按tab键或enter键,效果如下: <!-- 输入html或者html:5生成页面模板 ...
- 【AO笔记】有关使用AO基于shp文件创建网络数据集的一个细节
前些日子,和群友交流时提及shp文件创建单一网络数据集的创建问题. 由于项目需求,用shp文件创建网络合适,所以不得不去找一些古老的代码资料... 以前的研究中,创建网络数据集是根据IDatasetC ...
- <%@ Register TagPrefix="uc1" TagName="user" Src="../Control/user.ascx" %>什么意思?
TagPrefix定义控件位置的命名空间.有了命名空间制约,就可以在同一个网页里使用不同功能的同名控件. TagName指向所使用控件的名字.在同一个命名空间里的控件名是唯一的.控件名一般都表明控件的 ...
- 安装CentOs 7.3
步 下载安装 CentOS 7.3 下载地址 1.官网:https://www.centos.org/download/ 2.centos阿里汇总:https://yq.aliyun.com/zt/ ...
- SQL运维
1.碎片扫描 dbcc showconfig('table_name')
- w3wp.exe进程占用内存过高解决方法
解决CPU占用过多: 1.在IIS中对每个网站进行单独的应用程序池配置.即互相之间不影响. 2.设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭. 根据w3wp ...
- 安装了精简版的windows 的电脑如何修复?参照的程序集没有安装在系统上
我利用网络上的windows 10 纯净版来进行安装windows 10 镜像的时候,发现很多的windows 的服务都是不能用的.比如启动/删除 windows 功能就是不能用的,会出现如下信息: ...
- Linux Mint(ubuntu)如何汉化firefox浏览器?
自从火狐浏览器改用新的Quantum新核心后,原来的一些插件.性能,还有一部分设置方法都与原来相比有所改变,比如汉化问题,以前的做法是这样的: sudo apt-get install firefox ...