day12 函数对象,名称空间与作用域
"""
今日内容:
1、函数参数传值细节
2、三元表达式
3、列表及字典推导式
4、函数对象
5、名称空间与作用域
6、函数的嵌套定义初识
""" """
一、函数参数的传值细节
举例:
num = 10
def fn(n=num):
print(n)
num = 20
fn()
在上例中函数的参数列表是一个带有默认值的位置形参,由于初识传值为 n = num = 10
在调用之前num又重新赋值了,此时在函数内打印n 值为10
原因为:在执行时,函数的参数已经由于值拷贝赋值上了10,此时num被重新赋值不会影响n与10的绑定关系
""" """
二、三元表达式
三元表达式是if...else...的语法糖(简写形式),与原来的判断语句没有任何区别
三元表达式的格式为:
a if a < b else b
三元表达式肯定会返回一个值,这个值可以被变量接收页可以进行打印
例如:
a = input("a:")
b = input("b:")
print(a if a > b else b) # 只会返回大值
三元表达式只能返回一个值,如果想要返回两个值,可以用元组将两个值进行接收,实际上还是一个值
""" """
三、列表及字典推导式
列表及字典的推导式就是列表及字典的语法糖,并且可以在生成列表及字典时可以添加简单的逻辑
我们平时创建列表及字典时经常会使用list() 及 dict() 进行创建,但是这样不能添加逻辑
列表及字典的推导式的格式为:
ls = [v for i in range(10)]
其与下方表达式一样:
ls = []
for i in range(10):
ls.append(i)
在进行列表推导式中还可以对列表中的值添加简单的逻辑,【可以在添加时使用三元表达式】
ls = ["偶数" if i % 2 == 0 else "奇数" for i in range(10)] #使用此方法定义函数时,必须使用else 另一种使用方法:
ls = [i for i in range(10) if i%2==0] # 此方法可以不使用else 能被字典推到式推导的数据在循环取值时都必须可以被解压赋值为两个值
ls = [("a":1),("b",2)]
dic = {k:v for k,v in ls} # {"a":1,"b":2}
""" """
四、函数对象
在python中万物皆对象,所有能够保存的内存地址的变量统称为对象
-- 由于在函数中所有的变量都是用来保存内存地址的,所以所有的变量都是对象
--存放整数地址的是整型对象,存放函数内存地址的就是函数对象,实际上函数与普通的变量完全相同
举例:
def fn():
pass
在上例中,函数名fn中存放着函数的内存地址,如果要执行函数中的代码,只需要在函数的后面加()就可以执行
如果不执行函数,得到的是函数的内存地址,如果加括号执行函数,得到的就是函数的返回值 函数对象的使用场景:
1、作为调用函数 ---> 加()
2、作为函数的返回值
3、作为函数的参数
4、作为变量传递给其它函数
5、作为容器类型的元素 实例: 进行数学运算
def add(a, b):
return a + b def low(a, b):
return a - b def mul(a, b):
return a * b def div(a, b):
return a / b math_map = {
"add": add,
"low": low,
"mul": mul,
"div": div,
} # 完成映射关系
def get_math(math):
if math not in math_map:
print("该运算暂不支持")
else:
return math_map[math] def math(a, b, sym="add"):
sym = get_math(sym)
return sym(a, b) a = int(input("a: "))
b = int(input("b: "))
print(math(a,b,"mul")) """ """
五、函数的名称空间及作用域
-- 名称空间:函数名字与内存地址的对应关系,存储在堆区中,python解释器会遍历访问名称空间,采用的是堆栈存储结构
-- 堆栈存储结构:采用的是先进后出,后进先出的取值原则
-- 队列存储结构:采用先进先出、后进后出的取值原则 -- 三种名称空间:
-- Built-in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁
-- Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁
-- Local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁 -- 名称空间的加载顺序: 内置名称空间(系统级) --> 全局名称空间(文件级) --> 局部名称空间(函数级)
-- 名称空间的遍历顺序:名称所在函数的局部名称空间 --> 函数所在函数的局部名称了空间 --> 全局名称空间 --> 内置名称空间 -- 作用域:名字起作用的范围
-- 四种作用域:
-- Built-in:内置作用域:作用所有文件的所有地方
-- Global:全局作用域:作用当前文件的所有地方
-- Enclosing:嵌套作用域:作用当前函数已内部被嵌套函数
-- Local:局部作用域:作用当前函数内部 -- 不同的作用域之间的名字可以重复,以达到重复使用名字的目的
-- 函数会优先查找自己作用域中的名字,如果未发现会查找上一级名称空间,再到全局名称空间,再到内置名称空间 """ """
六、函数的嵌套定义
-- 在函数中定义另一个函数叫做函数的嵌套定义
def outer():
print('outer run')
a = 10
def inner():
print('inner run')
inner()
outer() -- 函数对象(变量)与普通对象(变量)一样,在函数内部定义,随函数调用而产生,调用结束而销毁,所以只能在函数内部调用 """
day12 函数对象,名称空间与作用域的更多相关文章
- day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义
复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...
- Python 函数对象-函数嵌套-名称空间与作用域-闭包函数
今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...
- python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
复习 1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用: # 字符串的比较# -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...
- python 函数的名称空间及作用域
一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...
- PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数
一 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 3 可以当作容器类型的元素 def foo(): return len f = foo pri ...
- day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义
复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...
- python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域
复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参: -- 形参:在函数定义时()中出现的参数 ...
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)
今日主要内容 1. 函数默认值细节(*) 2. 数据类型补充:三元表达式.列表推导式.字典推导式 (***) 3. 函数对象:函数名的各种应用场景 (*****) 4. 名称空间与作用域:解释 ...
随机推荐
- selenium webdriver 如何实现将浏览器滚动条移动到某个位置
说明: 在做selenium webdriver 在做UI 自动化时,有些页面时使用懒加载的形式显示页面图片,如果在不向下移动滚动条时,获取到的图片会是网站的默认图片和真实的图片不相符. 所以研究了 ...
- PHP加密解密函数(带有效期,过了有效期也解不了)
转的,原来应该是discuz中弄的 <?php //加解密函数 //此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原. //这样我们就可以拿此函数来做很多用途了,比如:单点登录的 ...
- Acdream1201 SuSu's Power
题目:SuSu's Power 链接:http://acdream.info/problem?pid=1201 题意:一个人站在x轴原点上,初始方向向x轴正方向,由一个字符串来控制其运动,字符串由A. ...
- Linux几大服务
server0操作: 1.创建/devops目录,并修改其SELINUX安全上下文 # mkdir /devops # vim /devops/1.mp3# chcon -R -t samba_sha ...
- Spring Boot 2.x 编写 RESTful API (六) 事务
用Spring Boot编写RESTful API 学习笔记 Transactional 判定顺序 propagation isolation 脏读 不可重复读 幻读 不可重复读是指记录不同 (upd ...
- SpringBoot配置MySql数据库和Druid连接池
1.pom文件增加相关依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connec ...
- whois 查询 API
项目介绍 免费Whois查询接口,完全开放 API接口,返回JSON格式数据(支持POST,GET方式) 网页查询接口(支持POST,GET方式) 测试接口 页面: http://whois.tt80 ...
- 题解:[JSOI2004]平衡点 / 吊打XXX
这个题目算是一个模拟退火的板子题 物重一定,绳子越短,重物越低,势能越小,势能又与物重成正比 使得$\sum_{i=1}^nd[i]*w[i]$也就是总的重力势能最小,可以使得系统平衡 交了两面半.. ...
- consul剔除节点
查询节点注册 curl -s http://192.168.1.1:8500/v1/catalog/service/aaa | python -m json.tool 删除注册信息 curl http ...
- css:a:visited限制
:active 对于:active伪类可以在div上生效.没有限制 :visited使用限制 :visited只适用于带href的a标签.如果给a标签绑定了click事件,那跳转的url必须跟href ...