Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)
今日主要内容
1. 函数默认值细节(*)
2. 数据类型补充:三元表达式、列表推导式、字典推导式 (***)
3. 函数对象:函数名的各种应用场景 (*****)
4. 名称空间与作用域:解释变量重复与冲突问题 (*****)
5. 函数的潜逃定义:在函数内部定义函数 (*****)
1. 函数默认值细节
如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被定义为当时变量存在的值
a = 10def fn(num = a): # num = 10 a = 20 print(num) # 10 a = 200fn()
2. 数据类型补充
2.1 三目运算符(三元表达式)
三目运算符:用于简化 if...else...的语法结构
1) 只能解决if...else...结构,其他if分支结构都不管
2)一个分支提供一个结果: 如果一个分支提供了多个结果, 将多个结果通过元组返回
a = int(input('a:')) # 10b = int(input('b:')) # 20if a > b: print(a)else: print(b) # 20
res = a if a > b else bprint(res) # 20
2.2 列表推导式(快速生成列表的语法糖)
能被列表推导式推导的数据源必须在循环取值时可以得到一个值
可以应用于生成多个数据的场景,推导式也可以拥有见到的逻辑
ls = []for i in range(1,6): ls.append(i)print(ls) # [1, 2, 3, 4, 5] ls = [v for v in range(1,6)] # [1, 2, 3, 4, 5]print(ls)
ls = ['奇数' if v % 2 != 0 else '偶数' for v in range(1,6)] print(ls) # ['奇数', '偶数', '奇数', '偶数', '奇数']
2.3 字典推导式(快速生成字典的语法糖)
能被推导式推导的数据源必须在循环取值时可以被解压赋值为两个值
ls = [('a',1),['b',2]]print(dict(ls)) # {'a': 1, 'b': 2}
res = {k:v for k,v in ls}print(res) # {'a': 1, 'b': 2}
res = {k.upper():v for k,v in ls}print(res) # {'A': 1, 'B': 2}
3. 函数对象
3.1. 函数对象
在python中,所有变量存放的值只要是地址,就称之为对象
所有的变量都是用来存放地址的,所以都是对象
函数对象:存放函数地址的变量就是函数对象
3.2 应用场景
1. 函数对象加()就是调用函数
2. 函数对象可以直接作为变量赋值给其他变量
3. 函数对象可以作为函数的参数
4. 函数对象可以作为函数的返回值
5. 函数对象可以作为容器类型的成员
1.函数对象()就是调用函数def f1(): passf1()# 2.函数对象可以直接作为变量赋值给其他变量def f2(): passf21 = f2f21()# 3.函数对象可以作为函数的参数def f3(func): # func = f21 = f2 func()fn3(f21)# 4.函数对象可以作为函数的返回值def f4(): return f5f4()# 5.函数对象可以作为容器类型的成员ls = [f21, f5]
4. 名称空间与作用域
4.1 名称空间
名称空间:就是名字与地址的对应关系,可以被python解释器遍历查找,采用堆栈存储方式
队列存储方式:先进先出
堆栈存储方式:先进后出,优先访问到的是最后添加到结构中的变量
在内置、全局、局部三个位置,只要出现了变量的定义,一定产生了自己名称空间中的民资,这些名字之间没有冲突
三种名称空间:
1. 内置名称空间:系统级,一个,随解释器执行而产生,解释器停止而销毁
2. 全局名称空间:文件级,多个,随所属文件加载而产生,稳健运行完毕而销毁
3. 当前名称空间:函数级,多个,随所属函数执行而产生,函数执行完毕而销毁
【注】文件的if,while,for,with这些能产生缩减的关键字并不能产生名称空间
加载顺:内置名称空间 > 全局名称空间 > 当前名称空间
4.2 作用域
作用域:变量名(名字,对象)起作用的范围
四种作用域
内置作用域:作用所有文件的所有地方
全局作用域:作用当前文件的所有地方
嵌套作用域:作用当前函数以及内部被嵌套的函数
局部作用域:作用当前的函数内部
【注】
不同作用域之间名字不冲突,已达到名字的重用
每个作用域优先使用自己作用域的名字,没有再找更大的名称空间的名字,直到内置,还没有就报错
查找顺序:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域
print(len) # <built-in function len>len = 10def f1(): len = 20 print(len) # 20 def f2(): len = 30 print(len) # 30 f2()f1()print(len) # 10
5. 函数的嵌套定义
概念:在一个函数中定义另一个函数
def outter(): print('from outter:') def inner(): # 嵌套定义在outter函数内部 print('from inner:') inner()outter()
Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)的更多相关文章
- day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义
复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...
- python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
复习 1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用: # 字符串的比较# -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...
- python之三元表达式,列表|字典推导式,函数对象
#### 三元表达式: 就是if....else...的语法糖 # -- 1) 只能解决if...else...结构,其他if分支结构都不管 # -- 2)一个分支提供一个结果: 如果一个分支提供了多 ...
- python 函数的名称空间及作用域
一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...
- Python——day11 函数(对象、名称空间、作用域、嵌套、闭包)
一.函数对象 函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象 函数对象的应用 1. 可以直接被引用 fn = cp_fn 2 .可以当作函数参数传递 c ...
- python之函数名称空间,作用域,嵌套函数
目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1(): def ...
- day12 函数对象,名称空间与作用域
""" 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...
- Python 函数对象-函数嵌套-名称空间与作用域-闭包函数
今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...
- PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数
一 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 3 可以当作容器类型的元素 def foo(): return len f = foo pri ...
- python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域
复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参: -- 形参:在函数定义时()中出现的参数 ...
随机推荐
- 使用Update Strategy组件无法进行delete操作
问题: Update Strategy组件根据字段值对目标表进行DD_DELETE操作时失效 同时,session log中报错:Target table [XXXXXXXX] does not al ...
- .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...
- 时序数据库连载系列:指标届的独角兽Prometheus
简介 Prometheus是SoundCloud公司开发的一站式监控告警平台,依赖少,功能齐全.于2016年加入CNCF,广泛用于 Kubernetes集群的监控系统中,2018.8月成为继K8S之后 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——1.stm32主控硬件设计
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- Spring Boot 2.X 如何添加拦截器?
最近使用SpringBoot2.X搭建了一个项目,大部分接口都需要做登录校验,所以打算使用注解+拦截器来实现,在此记录下实现过程. 一.实现原理 1. 自定义一个注解@NeedLogin,如果接口需要 ...
- Dynamics 365中显示格式为URL的字段极少部分URL值录入了不显示怎么回事?
微软动态CRM专家罗勇 ,回复318或者20190315可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 对于如下类型的字段, ...
- 适合精致女孩使用的APP软件 不容错过的精彩人生
阳光下灿烂,风雨中奔跑,每个人都会遇见美丽的缘分,或深或浅,或浓或淡.所以人生不管遇到什么难题,都要勇往直前.今天分享的软件也是十分精彩的,非常适合精彩的你哦! 薄荷健康 薄荷健康APP是专为想要减肥 ...
- java压缩指定目录下的所有文件和文件夹的代码
将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...
- 解决在圆角手机(如小米8)上自定义Dialog无法全屏的问题
在小米8等一系列圆角的手机上测试项目时,发现我的自定义dialog无法全屏了,这时我的dialog全屏的解决方案还是和网上大部分人是一样的 Window window = getWindow(); i ...
- Android Fragment碎片
什么是碎片? 碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛.可以把Fragment当成Activity一个界面的一 ...