内容大纲

  一:  函数的运行

  二:  闭包

  三:  迭代器

  四:  生成器

  五:  列表生成器

  六:  列表推导式

  七:  生成器表达式 

  八:  匿名函数

一:  函数的运行

  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. 117. Populating Next Right Pointers in Each Node II (Tree; WFS)

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  2. Qt Thread

    Threading Classes (Qt help manual key words) These Qt Core classes provide threading support to appl ...

  3. Brophp Nginx 虚拟主机的配置

    默认情况下,Nginx 不支持 pathinfo 配置,通过查看了 Thinkphp Nginx 的配置情况,对虚拟主机配置修改如下: server {     listen 80;     list ...

  4. jquery相对定位(包含find的使用 find相当于后代选择器)$("选择器1","选择器2")

  5. stl源码分析de练习

    // StlTest1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <vector> #include & ...

  6. struts,hibernate,spring配置时问题汇总及解决办法

    1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 缺少asm-3.3.jar 2.java.lang.NoClassDe ...

  7. idea中处理异常的快捷键

    alt+Enter

  8. C# Redis Server分布式缓存编程(二)(转)

    出处;http://www.cnblogs.com/davidgu/p/3263485.html 在Redis编程中, 实体和集合类型则更加有趣和实用 namespace Zeus.Cache.Red ...

  9. CLOB 和 BLOB

    An SQL CLOB is a built-in type that stores a Character Large Object as a column value in a row of a ...

  10. [c# 20问] 1. 何时使用class与struct

    POINTS struct为可以包含数据和函数的值类型 struct为值类型所以不需要堆(heap)而是在栈(stack)上分配空间 struct将数据直接存在struct中,而class只存引用类型 ...