day-12函数对象
函数默认值的细节
如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值,后面变化不会再变化
a = 100
def fn(num=a):
print(num) #
a = 200
fn()
三元表达式:就是if...else...的语法糖
三目运算符:用于简化if...else...的语法结构
-- 1) 只能解决if...else...结构,其他if分支结构都不管
-- 2)一个分支提供一个结果: 如果一个分支提供了多个结果, 将多个结果通过元组返回
a = int(input('a: '))
b = int(input('b: '))
res = a if a > b else b
print(res)
列表与字典推导式
快速生成列表或字典的语法糖,且能在生成过程中添加简单逻辑
# 能被列表推导式推导的数据源必须在循环取值时可以得到一个值
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)]
print(ls) # ['奇数', '偶数', '奇数', '偶数', '奇数']
# 能被字典推导式推导的数据源必须在循环取值时可以被解压赋值为两个值
ls = [['A', 1], ('B', 2)]
res = {k.lower(): v for k, v in ls}
print(res)
函数对象
在python中,所有变量存放的值只要是地址,我们就称之为对象
-- 所有的变量都是用来存放地址的,所以都是对象
-- 存放整型的地址就是整型对象 | 存放函数的地址就是函数对象 | 存放文件的地址就是文件对象
函数对象:存放函数地址的变量就是函数对象
def fn(): pass
my_fn = fn
# my_fn | fn都存着函数地址,所以都是函数对象,函数对象的使用就是 函数对象() 来调用函数
函数对象的应用场景
1.函数对象()就是调用函数
2.函数对象可以直接作为变量赋值给其他变量
3.函数对象可以作为函数的参数
4.函数对象可以作为函数的返回值
5.函数对象可以作为容器类型的成员
# 1.函数对象()就是调用函数
def fn1():
pass
fn1()
# 2.函数对象可以直接作为变量赋值给其他变量
def fn2():
pass
my_fn = fn2
print('>>>', my_fn, fn2)
my_fn()
# 3.函数对象可以作为函数的参数
def fn3(func): # func = my_fn = fn2
func()
fn3(my_fn)
# 4.函数对象可以作为函数的返回值
def fn4():
return my_fn
my_fn2 = fn4()
# 5.函数对象可以作为容器类型的成员
ls = [my_fn, my_fn2]
名称空间
名称空间:就是名字与地址的对应关系,可以被Python解释器遍历查找,采用堆栈存储方式
三种名称空间
Built-in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁
Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁
Local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁
注:文件中的if、while、for、with这些能产生缩减的关键字并不能产生名称空间
加载顺序:Built-in > Global > Loca
函数嵌套定义
概念:在一个函数内部定义另一个函数
def outer():
print('outer run')
a = 10
# 函数对象(变量)与普通对象(变量)一样,在函数内部定义,随函数调用而产生,
# 调用结束而销毁,所以只能在函数内部调用
def inner():
print('inner run')
inner()
outer()
作用域
作用域:变量(名字|对象)起作用的范围
四种作用域
Built-in:内置作用域:作用所有文件的所有地方
Global:全局作用域:作用当前文件的所有地方
Enclosing:嵌套作用域:作用当前函数已内部被嵌套函数
Local:局部作用域:作用当前函数内部
注:不同作用域之间名字不冲突,以达到名字的重用
每个作用域优先使用自己作用域中的名字,没有再找更大的名称空间的名字,直到内置,还没有就报错
查找顺序:Local > Enclosing > Global > Built-in
堆栈与队列的区别整理
队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。
而栈就像一个箱子,后放的在上边,所以后进先出。
day-12函数对象的更多相关文章
- javascript 利用匿名函数对象给你异步回调方法传参数
先来创建一个匿名函数对象: /*** * 匿名函数 */ var callChangeBtn=new function(bugBtn){ this.chage=function(json){ bugB ...
- python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...
- C++学习笔记(八):函数重载、函数指针和函数对象
函数重载 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于 ...
- C++中的函数指针和函数对象总结
篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址.函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数. ...
- JS 字符串对象 数组对象 函数对象 函数作用域
一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.V ...
- python之函数对象、函数嵌套、名称空间与作用域、装饰器
一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...
- C++的函数对象优于函数指针地方
转载自:http://blog.csdn.net/huang_xw/article/details/7934156 在C++编程语言中,有很多功能都与C语言相通,比如指针的应用等等.在这里我们介绍的则 ...
- python之旅:函数对象、函数嵌套、名称空间与作用域、装饰器
一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...
- C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素
01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...
- C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器
01 上次课程回顾 昨天讲了三个容器 string string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...
随机推荐
- 对低开销的静态组件使用v-once
<body> <div id="app"> <terms-of-service></terms-of-service> </d ...
- WordCount程序与测试
Github地址: https://github.com/hcy6668/wordCount PSP表格: PSP PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 60 40 ...
- ecplise导入项目报错而文件不报错
第一步 确认项目的jdk和tomcat版本,在Java Build Path的Libraries中查看包是否有报错,按照本机环境进行配置 第二步 检查 Java Compiler中的jdk版本,和ec ...
- BluePrism初尝
由于对工作的需求,现在开始接触了RPA. RPA是什么?第一次看见这个名词,我脑海里只有RPG的概念.一番查询,才知道是Robotic Process Automation的英文缩写,机器人流程自动化 ...
- 20175224 2018-2019-2 《Java程序设计》第八周学习总结
教材学习内容总结 第十五章 泛型与集合框架 泛型 泛型:目的为建立具有类型安全的集合框架. 泛型类声明:class People<E> class 名称<泛型列表> 链表 定义 ...
- TCP学习总结(一)
在学习的过程中,相信大家都有过“学了就忘“这种经历,又特别是TCP/IP知识点密集的通信协议,所以在此总结一下自己学到的皮毛,希望对自己对大家也有所帮助. 这篇博客主要讲运输层TCP和UDP的东西,I ...
- 巧用std::shared_ptr全局对象释放单例内存
巧用std::shared_ptr 单例的使用相对比较广泛,但是需要在程序退出前调用它的析构函数对数据进行释放,常规做法是在main函数末尾进行释放工作, 但是这样相对比较繁琐,因此便有了利用全局变量 ...
- 递归加载Treeview
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- 服务器配置+wordpress建站(小白)
一. 安装好centos7.2系统后,登录centos系统输入如下命令: yum install -y wget && wget -O install.sh http://downlo ...
- Ubuntu16.04下ZeroC ICE的安装与使用示例(Qt C++ 和 Java)
项目需求:在Ubuntu16.04系统下安装并使用ICEgrid 3.7进行c++和Java Springboot开发环境的通信,下面逐一介绍各个步骤的详解: 一:Ice Lib的安装 参考官网地址: ...