总结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 为何要用函数 没有用函数之前程序的问题 ...
随机推荐
- unity3d 移动与旋转 1
移动与旋转 1 player角色随asdw按键左右上下移动并旋转 public void Update() { // Reset player rotation to look in the same ...
- C# Action
Action<T> Delegate Encapsulates a method that has a single parameter and does not return a val ...
- UNITY WWW使用代码
string detailURL = "https://www.xxx.xxx."; using (var w = new WWW(detailURL)) { yield retu ...
- Mac 安装Django
首先 我电脑上的python 是 安装Django 是需要通过 pip 来安装的 最新办的python3.4 应该内置了pip 因此这里 需要下载安装pip pip是常用的Python包管理 ...
- Python爬虫利器一之Requests库的用法
前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...
- Java 设计模式系列(九)组合模式
Java 设计模式系列(九)组合模式 将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象的使用具有一致性. 一.组合模式结构 Component: 抽象 ...
- SVN下的文件被locked不能update和commit
一次早上开机svn更新代码,提示某一个文件夹被locked,提示clean up,但是clearn up也不行,get lock不行,release lock不行 根据网上搜的,.svn(隐藏文件夹) ...
- Linux系统下安装ncurses库
ncurses库是一个Linux系统下的图形支持的函数库,字符终端处理库,包括面板和菜单. 今天在安装ncurses库的时候遇到了一些问题,现将遇到的问题所叙如下: 首先说明:本次安装采用的是源码包的 ...
- linux计划任务(一)
一次性计划任务 at /etc/init.d/atd [root@localhost ~]# at : at> /bin/ls /etc |wc -l > /tmp/yimiao_demo ...
- div模拟键盘输入
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...