内容大纲

  一:  函数的运行

  二:  闭包

  三:  迭代器

  四:  生成器

  五:  列表生成器

  六:  列表推导式

  七:  生成器表达式 

  八:  匿名函数

一:  函数的运行

  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)的更多相关文章

  1. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

  2. (转载)prepare函数的学习,我要学习php第二天

    (转载)http://www.boyuan78.com/htm/company/2012_1030_60.html prepare函数的学习,我要学习php第二天 $mysqli = new mysq ...

  3. QT QObject::connect函数的学习

      从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: static bool connect(const QObject *sender, cons ...

  4. Matlab中常见的神经网络训练函数和学习函数

    一.训练函数 1.traingd Name:Gradient descent backpropagation (梯度下降反向传播算法 ) Description:triangd is a networ ...

  5. python函数基础学习

    函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定  义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...

  6. day11——函数名的使用、f格式化、迭代器、递归

    day11 函数名的第一类对象及使用 1.可以当作值被赋值给变量 def func(): print(1) print(func) a = func a() 2.当作元素存放在容器中 def func ...

  7. R语言函数化学习笔记6

    R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...

  8. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...

  9. day11 函数

    day11 函数 一.函数基础 """ 1 什么是函数 函数是盛放代码的容器:把实现某一功能的代码放到一个函数内就制造一个工具 2 为何要用函数 没有用函数之前程序的问题 ...

随机推荐

  1. 使用rem的原理,62.5%,根据屏幕宽度等比压缩网页

    一.前言 我们在编写网页时,往往需要兼顾网页在不同屏宽情况下的显示 而有时为了省事,没时间写新的页面,也为了兼容考虑,这就需要使用等比压缩了 等比压缩的核心是rem 二.正文 (一).rem的使用   ...

  2. C++ IDE环境

    --------siwuxie095                     IDE:集成开发环境,包括:编辑器.编译器.调试器.图形用户界面工具 以及其他的一些小工具                 ...

  3. Eigen库和STL容器冲突问题

    博客参考:https://blog.csdn.net/huajun998/article/details/54311561 在程序中想使用类似于如下的容器 std::vector<Eigne:: ...

  4. Golang基本结构之练习(day2)

    笔记: . 任何一个代码文件隶属于一个包 . import 关键字,引用其他包: import(“fmt”) import(“os”) 通常习惯写成: import ( “fmt” “os” ) . ...

  5. task:scheduled cron 合法

    http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html task:scheduled o ...

  6. Hello_Depth_Perception 任务二:Project Tango采集深度感知数据

    Java API Depth Perception Tutorial深度感知教程 Configuration 配置信息 In order to use depth perception, your T ...

  7. PYTHON 和R的对比

    为了鼓励新工具的出现,机器学习和数据分析领域似乎已经成了“开源”的天下.Python 和 R 语言都具有健全的生态系统,其中包括了很多开源工具和资源库,从而能够帮助任何水平层级的数据科学家展示其分析工 ...

  8. solr特点二:Facet(1)

    一.   Facet 简介 Facet 是 solr 的高级搜索功能之一 , 可以给用户提供更友好的搜索体验 . 在搜索关键字的同时 , 能够按照 Facet 的字段进行分组并统计 . 二.   Fa ...

  9. centos7怎能开机设置文本界面

    rm -f /etc/systemd/system/default.target 设置命令行级别方法:ln -sf /lib/systemd/system/runlevel3.target /etc/ ...

  10. DotNetBar.MetroTilePanel 样式、加载数据、获取数据

    描述下:MetroTilePanel包含子集ItemContainer  子集下面又包含子集MetroTileItem  目前我用到的就是这三层 因为需求所以整个模块全部由代码实现 1.ItemCon ...