总结day11 ----函数的学习(2)
内容大纲
一: 函数的运行
二: 闭包
三: 迭代器
四: 生成器
五: 列表生成器
六: 列表推导式
七: 生成器表达式
八: 匿名函数
一: 函数的运行
1:函数名是一个特殊变量
def func():
# print(666)
# print(func)
2:函数名可以当做变量进行赋值
# f1 = 2
# f2 = f1
# f3 = f2
# print(f3) # def func():
# print(666)
# func1 = func
# f2 = func1
# f3 = f2
# # print(f3)
# f3()
3:函数名可以当做容器类的元素
# def func1():
# print('in func1')
#
#
# def func2():
# print('in func2')
#
#
# def func3():
# print('in func3')
#
# l1 = [func1, func2, func3]
# for i in l1:
# i()
4:函数名可以当做函数的参数
# def func(x):
# # print(x)
# x()
# print('in func')
#
# def func1():
# print('in func1')
#
# func(func1)
5:函数名可以当做返回值
def func(x): # x ---> func1
return x # func1 def func1():
print('in func1') # ret = func(func1) # func1
# ret()
func(func1)()
二:闭包
>1
1:内层函数对外层函数(非全局)变量的引用
2:闭包只存在内部函数中
3:函数都要逐层返回,最终返回给最外层
>2
# def func(n):
# n = name
# def inner():
# print(n)
# return inner
# name = '太白'
# f = func(name)
# print(f.__closure__[0].cell_contents)
>3
# def func(step):
# num = 1
# num += step
# print(num)
# j = 0
# while j < 5:
# func(3)
# j += 1 # 闭包:解释器执行程序时,如果遇到函数,随着函数的结束而关闭临时名称空间,但是!!!
# 如果遇到闭包,有一个机制:那么闭包的空间不会随着函数的结束而关闭。
三:迭代器
>1 可迭代带对象
# 内部含有__iter__方法的就是可迭代对象,遵循可迭代协议。
>2 迭代器
# 迭代器:内部含有'__iter__'并且含有'__next__'方法的就是迭代器,遵循迭代器协议。
>迭代器的作用
# 1,节省内存.
# 2,惰性机制.
# 3, 一条路走到黑,不走回头路.
四:生成器
>1
# 生成器本质就是迭代器,生成器是自己用python代码写的迭代器。
# 生产衣服 # def cloth():
# for i in range(5001):
# print('我写的代码没有bug 衣服%s号' % i)
# cloth()
#
# def cloth2():
# for i in range(5001):
# yield '有志青年 衣服%s号' % i #用的时候才调用
#
# genor = cloth2()
# for i in range(100):
# print(next(genor))
#
# for i in range(50):
# print(next(genor))
> send next
1: send , 有返回值,返回给上一个迭代器. 如果为开头则报错
#
# def func():
# count = yield 666
# print(count)
# num = yield '三包春药'
# print(num)
# yield '太白金星'
# n1 = yield '小虎'
# print(n1)
# genor = func()
# print(next(genor))
# print(next(genor))
# send不仅能对应yield取值,而且可以给上一个yield发送一个值
# print(genor.send(None))
# print(genor.send('alex'))
# print(genor.send('111'))
# print(genor.send('111'))
# print(genor.send('111'))
# 第一次取值能否用send传参? 不能
# 最后一个yield 永远也得不到send的传的值
2:yeild from 把列表变成迭代器
# def func():
# lst = ['明亮', '容先', '王子', '万赵']
# yield from lst
# genor = func()
print(genor.__next__())
五:列表推导式
# 列表推导式:用一行代码构建简单,较复杂的列表。
# 减少代码量,装逼。
#三种:
# 1,循环模式。 [变量(加工后的变量) for 变量 in iterable ]
# print([i for i in range(1,101)])
# 构建一个列表:['python1期', 'python2期',....'python25期']
# l1 = ['python%s期' %i for i in range(1,26)]
# print(l1) # 2 ,三元模式(循环模式)
# 构建一个列表:列表里面的元素是1~20,但是能被3整除元素替换成*。
# ret = '*' if 3>2 else 1
# print(ret)
# print(['*' if i % 3 == 0 else i for i in range(1,21)]) # 3,筛选模式 [变量(加工后的变量) for 变量 in iterable if 条件]
# 三十以内所有的偶数留到列表中
# print([i for i in range(1,31) if i % 2 == 0])
六: 匿名函数
func2 = lambda x,y: x + y
print(func2(3,4)) # 写一个匿名函数:需要三个数字参数,返回值为三个数相乘
总结day11 ----函数的学习(2)的更多相关文章
- Hive自定义函数的学习笔记(1)
前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...
- (转载)prepare函数的学习,我要学习php第二天
(转载)http://www.boyuan78.com/htm/company/2012_1030_60.html prepare函数的学习,我要学习php第二天 $mysqli = new mysq ...
- QT QObject::connect函数的学习
从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: static bool connect(const QObject *sender, cons ...
- Matlab中常见的神经网络训练函数和学习函数
一.训练函数 1.traingd Name:Gradient descent backpropagation (梯度下降反向传播算法 ) Description:triangd is a networ ...
- python函数基础学习
函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定 义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...
- day11——函数名的使用、f格式化、迭代器、递归
day11 函数名的第一类对象及使用 1.可以当作值被赋值给变量 def func(): print(1) print(func) a = func a() 2.当作元素存放在容器中 def func ...
- R语言函数化学习笔记6
R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...
- R语言函数化学习笔记3
R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...
- day11 函数
day11 函数 一.函数基础 """ 1 什么是函数 函数是盛放代码的容器:把实现某一功能的代码放到一个函数内就制造一个工具 2 为何要用函数 没有用函数之前程序的问题 ...
随机推荐
- 05-SSH综合案例:环境搭建之配置文件的引入
1.3 第三步导入相应配置文件 Struts框架中: * web.xml * 核心过滤器: <filter> <filter-name>struts2</filter-n ...
- vmware虚拟机开机报附件中的错误的解决办法
Virtualized Inter VT-x/EPT is incompatible with this virtual machine configuration 在没有虚拟化msg.inter.h ...
- 使用mybatis开发Dao的原始方法,实现根据用户id查询一个用户信息 、根据用户名称模糊查询用户信息列表 、添加用户信息等功能
1.需求 将下边的功能实现Dao: 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户信息 2. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类 3.User.xml映 ...
- 主线程不能直接调用webservice方法
@Overrideprotected void onCreate(Bundle savedInstanceState){//StrictMode.setThreadPolicy(new StrictM ...
- MyEclipse文件查找技巧
只为成功找方法,不为失败找借口! MyEclipse使用总结——MyEclipse文件查找技巧 一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字 ...
- 关于jFinal开发中遇到的中文乱码问题解决办法
关于jFinal开发中遇到的中文乱码问题解决办法 设置tomcat的编码,修改 <Connector port="8080" protocol="HTTP/1.1& ...
- 两段 PHP 代码比较优劣
// 代码一 public function getPCA($level = false) { $results = array(); $where = $level ? " where f ...
- Apps: Help > Diagnostics > Custom Code > Personalize 查看LOV中的查询语句
Apps Menu Path: Help > Diagnostics > Custom Code > Personalize 查看LOV中的查询语句 一直有实施顾问询问我XXFo ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- 【转】如何避免OOM总结
原文地址:http://www.csdn.net/article/2015-09-18/2825737/3 减小对象的内存占用 避免OOM的第一步就是要尽量减少新分配出来的对象占用内存的大小,尽量使用 ...