迭代器

迭代器对象:有__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行依次取值

with open('text.txt','rb',) as f:
    res = f.__next__()  # 第一行内容
    print(res)
    res = f.__next__() # 第二行内容
    print(res)

生成器

定义生成器的两种方式:

# generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,
没有更多的元素时,抛出StopIteration的错误。
# 2.定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,
而是一个generator


在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列:

import sys

def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成

while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()
执行结果  0 1 1 2 3 5 8 13 21 34 55
 

# 枚举

就是给可迭代器对象及迭代器对象添加迭代索引

s = 'abn'
for v in enumerate(s):
    print(v)

# 结果
'''
(0, 'a')
(1, 'b')
(2, 'n')
'''

# send的工作原理

# 1.send发生信息给当前停止的yield# 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止
persons = ['张三', '李四', '王五', '赵六', '钱七']

def order(persons):
    for i in range(len(persons)):
        if i == 0:
            print('%s在面试' % persons[0])
        else:
            print('%s叫%s在面试' % (name, persons[i]))
        print('%s面试完毕' % persons[i])
        name = yield persons[i]

obj = order(persons)
for i in range(len(persons)):
    if i == 0:
        p = obj.__next__()
    else:
        p = obj.send(p)
    print('=============================')

'''
张三在面试
张三面试完毕
=============================
张三叫李四在面试
李四面试完毕
=============================
李四叫王五在面试
王五面试完毕
=============================
王五叫赵六在面试
赵六面试完毕
=============================
赵六叫钱七在面试
钱七面试完毕
=============================
'''

常用内置函数

lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。

a = lambda x,y,z:(x+8)*y-z
print(a(5,6,8))  

# 1.与类型相关的
# list() str() ord() chr() bool() int() ...

print(ord('A'))
print(chr(97))

# 2.进制转化
print(bin(10)) # 1010
print(oct(10)) # 12
print(hex(10)) # a

print(0b1111) # 15
print(0o10) # 8
print(0x11) # 17

# 3.常用操作类的
# range() len() iter() next() enumerate() id() type() print() input() open()

# 4.原义字符串
print(r'a\nb')
print(ascii('a\nb'))
print(repr('a\nb'))

# 5.数学相关运算
# abs() sum() max() min() pow() sorted()
print(abs(-1))
print(pow(2, 3)) # 2**3
print(pow(2, 3, 3)) # 2**3%3

递归

# 递归:
# 函数直接或间接调用本身,都称之为递归
# 回溯:找寻答案的过程
# 递推:推出结果的过程

# 前提条件:
# 1.递归必须有出口
# 2.递归回溯递推的条件一定有规律

# 递归

def get_age(count):
    if count == 1:
        return 58
    age = get_age(count-1)-2
    return age
age = get_age(3)
print(age)

'''
递归 函数直接或间接调用自身的都是递归
递归有两个特点  一个是递推  一个是回溯  起始步骤是递推 当递推满足函数第一个return时  递推走完  开始回溯 就是从递推结束的参数往回到原始值
此题中  count最初是3  第一次走完 count为2  第二次走完count为1 此时return 58 递推走完了
开始回溯 回溯第一次走完count为2  再走一次count为3 此时递归结束  此次过程中有两次是分别是58-2 和56-2   故最终结果是54
'''

python之迭代器 生成器 枚举 常用内置函数 递归的更多相关文章

  1. Python基础(二)——常用内置函数

    1. 常用内置函数 (1)isinstance(object, classinfo) 用于判断一个对象是否为某一类型. object  是实例对象 classinfo 是基本类型如 int, floa ...

  2. python第十八课——常用内置函数

    常用内置函数:round(): print(round(3.14),round(3.99)) print(round(3145.926,-2),round(413.575,2)) abs(): pri ...

  3. python学习笔记-day4笔记 常用内置函数与装饰器

    1.常用的python函数 abs             求绝对值 all               判断迭代器中所有的数据是否为真或者可迭代数据为空,返回真,否则返回假 any          ...

  4. python生成器对象&常见内置函数

    内容概要 异常捕获(补充) for循环本质 生成器 yield 和 return优缺点 笔试题 常用内置函数 内容详细 一.异常捕获补充 try: print(name) except NameErr ...

  5. python中常用内置函数和关键词

    Python 常用内置函数如下: Python 解释器内置了很多函数和类型,您可以在任何时候使用它们.以下按字母表顺序列出它们. 1. abs()函数 返回数字的绝对值. print( abs(-45 ...

  6. Python的常用内置函数介绍

    Python的常用内置函数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.取绝对值(abs) #!/usr/bin/env python #_*_coding:utf-8_ ...

  7. 12.Python略有小成(生成器,推导式,内置函数,闭包)

    Python(生成器,推导式,内置函数,闭包) 一.生成器初始 生成器的本质就是迭代器,python社区中认为生成器与迭代器是一种 生成器与迭代器的唯一区别,生成器是我们自己用python代码构建成的 ...

  8. Python函数04/生成器/推导式/内置函数

    Python函数04/生成器/推导式/内置函数 目录 Python函数04/生成器/推导式/内置函数 内容大纲 1.生成器 2.推导式 3.内置函数(一) 4.今日总结 5.今日练习 内容大纲 1.生 ...

  9. python序列(七)序列操作的常用内置函数

    1.len(列表):返回:列表中的元素个数,同样适用于元组.字典.集合.字符串等. max(列表).min(列表):返回列表中的最大或最小元素同样适用于元组.字典.集合.range对象等. sum(列 ...

随机推荐

  1. 估计量|估计值|置信度|置信水平|非正态的小样本|t分布|大样本抽样分布|总体方差|

    5 估计量和估计值是什么? 估计量不是估计出来的量,是用于估计的量. 估计量:用于估计总体参数的随机变量,一般为样本统计量.如样本均值.样本比例.样本方差等.例如:样本均值就是总体均值的一个估计量. ...

  2. Qt QThread必须要了解的几个函数

    概述 如果想对Qt中的QThread有个更加深刻的了解,必须要知道这几个重要的函数,现在就一一介绍下. 函数介绍 属性 返回值 函数体 功能 static QThread * QThread::cur ...

  3. DOCKER中centos7的中文支持

    直接编写看下能否改变成识别中文字体 写到你的~/.bashrc里吧,然后重启终端(我写的是英文的啊,改成你要的) export LC_ALL=en_US.UTF-8 export LANGUAGE=e ...

  4. 2015-09-14-初级vector

    标准库vector类型 #include<vector> using std::vector; vector为一个类模板. vector的初始化 vector<T> v1; v ...

  5. js-dom运动我有废话要说

    今天整个图片上传剪切的功能 我终于不负众望不卑不亢 毫无意外的没写上 写点新得 留给N年后爱看不看的自己 咋整呢 百度之 demo一下,我就知道 屁不多放 切入正题 在js运动时候要注意布局 布局写不 ...

  6. PHP PSR-2 代码风格规范

    代码风格规范 本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合 ...

  7. github常用命令汇总

    创立版本库 mkdir Baiducd Baidugit init SSHssh-keygen -t -rsa -C "TaylorApril947939@gmail"(在gith ...

  8. python 前端素材提供

    小图标素材:http://fontawesome.dashgame.com/

  9. 地理位置(Geolocation)API 简介

    一.开篇简述 Geolocation API(地理位置应用程序接口)提供了一个可以准确知道浏览器用户当前位置的方法.且目前看来浏览器的支持情况还算不错(因为新版本的IE支持了该API),这使得在不久之 ...

  10. python爬虫练手项目快递单号查询

    import requests def main(): try: num = input('请输入快递单号:') url = 'http://www.kuaidi100.com/autonumber/ ...