新手Python第四天(生成器)

Python 生成器

  生成器和生成表达式 

  a=[i*2 for i in range(10)]#生成表达式
  b=(i*2 for i in range(10))#生成器

  生成器的特点:优点(不占用内存空间,生成速度快),缺点(不能切片,只能保存当前值,前值不能获取)

Python 创建生成器

#1.生成器
b=(i*2 for i in range(10))
#2.函数生成器
def func(x):
    count=0
    while count<x:
        yield count  #保存当前函数的中断状态(断点)
        count += 1
f=func(10)
View Code

Python 生成器的方法

print(f.__next__())#调用下一个元素
print(f.send(1))#发送一个元素
View Code

Python 生成器的循环

for i in (i*2 for i in range(10)):
    print(i)
View Code

Python yield

def func1(name):
    print('%s准备吃东西了'%(name))
    while True:
        food=yield    #yield卡住跳出函数,send发送数据后继续执行函数
        print('%s被%s吃掉了'%(food,name))
def func2(food):
    f = func1('小明') #创建顾客
    f2= func1('小李')
    f.__next__()       #启动客户,到yield跳出程序
    f2.__next__()
    for i in range(10):
        f.send(food)   #唤醒yield程序并传递food,继续执行print
        f2.send(food)
func2('')
View Code

 Python 迭代器

  可迭代对象和迭代器

  可迭代对象:可以用for循环的对象都是可迭代对象,如列表元组字典字符串
  迭代器:内部有__next__()方法的对象都是迭代器,如生成器,但迭代器不是生成器

Python 迭代器的转换

#可迭代对象变成迭代器
iter([1,2,3])

 Python 迭代器和迭代对象的判断

from collections import Iterable
from collections import Iterator
print(isinstance([1,2,3,4],Iterable))#判断是不是可迭代对象
print(isinstance(iter([1,2,3,4]),Iterator))#判断是不是迭代器
View Code

Python 迭代器的方法

print(iter([1,2,3]).__next__()) #调用下一个

Python 迭代器循环

for i in iter([1,2,3,4]):
    print(i)
#while循环不建议使用,迭代器是无穷尽的无法计算最后一个值,只有用try去判断
View Code

Python 内置函数(判断)

print(bool(1))#布尔值判断
print(all([0,1,1]))#全部为真才为真
print(any([0,1,1]))#有一个为真才为真
print(callable([]))#是不是一个方法,是不是可以调用
View Code

Python 内置函数(转换)

for i in enumerate(['a','b','c']):#获取下标和内容
    print(i)
print(bin(11))#十进制转二进制
print(oct(11))#十进制转八进制
print(hex(15))#十进制转十六进制
bytes('a',encoding='utf-8')#转化成二进制格式
tuple()  # 列表变成元组
frozenset([1,2,3,4])#不可变集合,和元组一样
chr(99)#返回ascii对应的字符
float()#转化浮点
repr(range(10))#把对象转化成字符串
print(type(ascii([1,2,3])))#变成一个字符串的形式,没什么用
a=bytearray('abcd',encoding='utf-8')
a[0]=99#字符串和二进制格式不可以修改,但这个可以修改
print(a)
View Code

Python 内置函数(计算)

print(pow(2,5))#次方
print(abs(-1))#计算绝对值
print(divmod(5,2))#返回商和余数
print(sum([1,2,3,4]))#对一个列表求和
round(1.2222,2)#保留小数点后几位
print(max([1,2,3]))#返回最大值
print(min([1,2,3]))#返回最小值
for i in filter(lambda n:n<5,range(10)):#过滤
    print(i)
for i in map(lambda n:n<5,range(10)):#返回前面的结果
    print(i)
View Code

Python 内置函数(查看)

help()#帮助
print()#打印
print('{name}'.format(name='22'))#格式化输出
type('a')#查看数据类型
print(dir({}))#查看内置方法
vars()#返回一个对象所有的属性名
globals()#打印全局变量的key和value
def func1():
    a=1
    print(locals())#打印全部的局部变量
func1()
View Code

Python 内置函数(列表和迭代器)

reversed([1,2,3])#翻转
print(sorted([2,1,3,4]))#排序
print(sorted({2:22,1:33,}.items()))#key排序
print(sorted({2:22,1:33,}.items(),key=lambda x:x[1]))#value排序
zip([1,2,3,4],['a','b','c','d'])#拉链
range(10)#从0取到10不包括10的一个迭代器
next()#迭代器使用的next方法
list=[1,2,3,4,5,6,7,8,9,10]
print(list[slice(2,5)])#对一个类表切片 没啥用
View Code

Python 内置函数(其他)

#eval()#执行简单的代码块
#exec()#执行多段代码块
__import__('auth')#字符串导入一个模块
#exit()#退出
#hash()#加密
code='''for i in range(10)'''
#compile()#编译 没啥用
complex()#复数用不到
import functools
print(functools.reduce(lambda a,b:a+b,range(10)))#求和
#super
#memoryview
#property
#credits()
#copyright()
#delattr()
View Code

 Python json写文件(跨平台)

import json
data={'user':'admin','password':'000000'}
f_json=open('json.text','w')
#写入json文件
json.dump(data,f_json)
#f_json.write(json.dumps(data))
f_json.close()
View Code

Python json读取文件

import json
f_json=open('json.text','r')
#json读文件
load_json=json.load(f_json)
#load_json=json.loads(f_json.read())
f_json.close()
View Code

Python pickle写文件(限定python)

import pickle
data={'user':'admin','password':'000000'}
f_pickle=open('pickle.text','wb')
#写入文件
pickle.dump(data,f_pickle)
#f_pickle.write(pickle.dumps(data))
f_pickle.close()
View Code

Python pickle读取文件

import pickle
f_pickle=open('pickle.text','rb')
#读取文件
data_load_pickle=pickle.load(f_pickle)
#data_load_pickle=pickle.loads
f_pickle.close()
View Code

python学习途径

友情推荐:  猿人学Python【https://www.yuanrenxue.com/】 由一群工作十余年的老程序员结合实际工作经验所写的Python教程。
原文地址:https://www.cnblogs.com/gm332211/p/8268860.html