"""
今日内容:
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 函数对象,名称空间与作用域的更多相关文章

  1. day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义

    复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...

  2. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  3. python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套

     复习   1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用:     # 字符串的比较#  -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...

  4. python 函数的名称空间及作用域

    一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...

  5. PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数

    一 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 3 可以当作容器类型的元素 def foo(): return len f = foo pri ...

  6. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

    复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...

  7. python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域

    复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参:       -- 形参:在函数定义时()中出现的参数       ...

  8. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  9. Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)

    今日主要内容 1.  函数默认值细节(*) 2.  数据类型补充:三元表达式.列表推导式.字典推导式 (***) 3.  函数对象:函数名的各种应用场景 (*****) 4.  名称空间与作用域:解释 ...

随机推荐

  1. Vue 2.6版本基础知识概要(一)

    挂载组件 //将 App组件挂载到div#app节点里 new Vue({ render: h => h(App), }).$mount('#app') VueComponent.$mount ...

  2. open-vm-tools与VMware Tools

    安装VMware Tools经常会出现兼容性不好,系统之间复制文件失灵,并且安装时提示建议使用open-vm-tools,于是放弃vmware-tools的安装,尝试使用open-vm-tools o ...

  3. keras02 - hello convolution neural network 搭建第一个卷积神经网络

    本项目参考: https://www.bilibili.com/video/av31500120?t=4657 训练代码 # coding: utf-8 # Learning from Mofan a ...

  4. rpm安装查看卸载软件

    1.安装 rpm -i 需要安装的包文件名 举例如下: rpm -i example.rpm 安装 example.rpm 包: rpm -iv example.rpm 安装 example.rpm ...

  5. B树和B+树详解

    一 B树 1.B树的定义:B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点 ...

  6. Python视频人脸检测识别

    案例 这里我们还是使用 opencv 中自带了 haar人脸特征分类器,通过读取一段视频来识别其中的人脸. 代码实现:   动图有点花,讲究着看吧:   如果是捕捉摄像头,只需要改变以下代码即可: c ...

  7. js 时间格式,加减

    Date.prototype.Format = function (fmt) { //author: rixiao var o = { "M+": this.getMonth() ...

  8. 关于空想X

    只是一个ID而已,我才不会告诉你这是一艘法国驱逐舰 想去打CTF,但是什么也不会. 博主人很懒,估计也不会更几篇博客,嘿嘿嘿. 最近在学PYTHON,欢迎交流.

  9. UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)

    显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...

  10. Centos下MariaDB操作

    MariaDB简介 MariaDB是mysql数据库的一个分支,操作几乎和mysql一样 MariaDB安装.启动.停止 # 安装 yum -y install mariadb mariadb-ser ...