"""
今日内容:
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. dos命令的使用

    echo 百度欢迎您 >d:\1.txt F7查看执行过的命令 直接进入 D盘 d: 创建目录 md fox 在fox目录下创建子目录user md fox\user\hello1 进入到use ...

  2. Robust Principal Component Analysis?(PCP)

    目录 引 一些微弱的假设: 问题的解决 理论 去随机 Dual Certificates(对偶保证?) Golfing Scheme 数值实验 代码 Candes E J, Li X, Ma Y, e ...

  3. Quick Sort(三向切分的快速排序)(Java)

    //三向切分的快速排序 //这种切分方法对于数组中有大量重复元素的情况有比较大的性能提升 public static void main(String[] args) { Scanner input ...

  4. AOP - 1 基本概念

    1.AOP (面向切面编程) AOP,Aspect Oriented Programming,意为:面向切面编程, 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术, AOP是OOP的 ...

  5. B树和B+树详解

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

  6. cocos 动画系统

    前面的话 cocos 动画系统支持任意组件属性和用户自定义属性的驱动,再加上可任意编辑的时间曲线和移动轨迹编辑功能,就可以制作出各种动态效果 概述 Animation 组件可以以动画方式驱动所在节点和 ...

  7. Azure DevOps

    Azure DevOps https://azure.microsoft.com/zh-cn/services/devops/ It looks great!

  8. springdata 一对多配置

  9. Python 下划线

    单下划线 "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和自类对象自己能访问到这些变量. 例子:以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口 ...

  10. Matrix-tree 定理的一些整理

    \(Matrix-tree\) 定理用来解决一类生成树计数问题,以下前置知识内容均是先基于无向无权图来介绍的.有关代数余子式的部分不是很明白,如果有错误还请指出-- 部分内容参考至:\(Blog\_1 ...