day19三大神器和scv文件

day19三大神器和scv文件

1迭代器

1什么是迭代器(iter)

迭代器是容器型数据类型

特点:无法通过打印迭代器查看元素,也无法统计个数

需要使用时候必须从迭代器中取出,并且取出以后元素从迭代器中消失

2创建迭代器-将其他序列转换成迭代器

l1=iter('hello')        #
l2=iter([1,3,5,7,9])    #

3不管什么方式获得了迭代器的元素,被获取的元素一定会消失

print(next(l1))             #h
print(next(l1))             #e
print(next(l1))             #l
for i in l2:
    print(i)

2生成器

生成器是一种容器,但是这个保存的不是多个数据,而是容器的算法

同时具有迭代器保存数据的特点

1,打印看不到内容

2,不支持len操作

3,元素取一个少一个

2创建生成器

调用一个带有yield关键字的函数就可以得到一个生成器对象

只要有,就创建生成器对象,不管yield在哪里

3控制生成器产生数据的个数和值

生成器产生的个数和值,由执行函数体的时候遇到几次yield,以及每次遇到yield的值来决定

# def func2():
#     yield 100
#     yield 200
#     yield 300
# print(list(func2()))        #[100, 200, 300]
#练习:创建python学号的生成器,python001-python999学号

方法1

def xuehao(subject):
    num = 0
    while num<1000:
        num+=1
        yield f'{subject}{num:0>3}'

g5=xuehao('python')
print(next(g5))
print(next(g5))
print(list(g5))

方法2

def study_id(subject):
    for x in range(1, 1000):
        yield f'{subject}{x:0>3}'


g3 = study_id('python')
g4 = study_id('java')
print(next(g3))
print(next(g3))
print(next(g4))
print(next(g3))
print(next(g4))

4生成器创建数据的原理

调用函数创建生成器的时候不会执行函数体,在通过生成器对象获取生成器对象的时候才执行函数体

而且每次执行到yield就停止,并且记录停止的位置,下次再获取元素的时候从上次结束的时候开始

3装饰器

1装饰器是用来给函数添加功能的

存在的问题:

1如果多个函数需要添加同样的功能,需要修改多个函数的代码,并且添加相同的代码

2如果想要取消添加的功能,又要重新修改多个函数

import time
def func1():
    start=time.time()
    print('hello world')
    end=time.time()
    print(f'执行时间{end-start}')
func1()
#2)使用装饰器
#写一个装饰器
def count_time(f):
    def new_f(*args,**kwargs):
        start=time.time()
        result=f(*args,**kwargs)
        end=time.time()
        print(f'时间{end-start}')
        return result
    return new_f
#使用装饰器
@count_time
def func2(a,b):
    # start=time.time()
    print(a*b)
    # end=time.time()
func2(10000,20000)

装饰器的套路

def 装饰器名(f):

​ def new_f(*args,**kwargs)

​ result=f(*args,**kwargs)

​ 实现新增的功能

​ return

​ return new_f

4.csv文件

让数据以表格的方式存储(更简单的表格文件)

1.csv文件操作

1)方法1:读取文件内容得到一个迭代器,迭代器中的元素是每一行对应的列表

a:创建reader对象csv.reader(文件对象)-创建文件相应的reader,并且获取文件内容

f=open('2018年北京积分落户数据.csv',encoding='utf-8',newline='')
reader=csv.reader(f)
#b通过reader对象获取文件内容(本质是迭代器)
print(next(reader)) #['id', 'name', 'birthday', 'company', 'score']
print(next(reader))		#['1', '杨效丰', '1972-12', '北京利德华福电气技术有限公司', '122.59']
print(next(reader))		#['2', '纪丰伟', '1974-12', '北京航天数据股份有限公司', '121.25']
#2)方法2:得到文件内容得到一个迭代器,迭代器中的元素是每一行内容对应的字典
reader2=csv.DictReader(f)
for i in reader2:
    print(dict(i))

2.csv文件的写操作

1,方法1-以列表为单位写入一行数据
#a.创建writer对象,csv.writer(文件对象)
#writer对象.writerow(列表)--一次写入一行数据
#writer对象.writerows(列表)--一次写入多行数据
f2=open('file/student.csv','w',encoding='utf-8',newline='')
writer1=csv.writer(f2)
writer1.writerow(['学号','姓名','年龄'])
writer1.writerows([['01','张三','18'],
                   ['02','lisi','20']])
#2)方法2-以字典为单位写入一行数据
#a.创建DictWriter对象:csv.DictWriter(文件对象,字典键)
writer2=csv.DictWriter(
    open('file/dogs.csv','w',encoding='utf-8',newline=''),
    ['狗名','年龄','品种','价格']
)
# b.将字典的键作为文件内容写入文件的第一行
writer2.writeheader()

# c.写入数据
# writer对象.writerow(字典)  -  一次写入一行数据
# writer对象.writerows(元素是字典的列表)   -  同时写入多行数据
writer2.writerow({'狗名': '旺财', '年龄': 3, '品种': '哈巴狗', '价格': 500})
writer2.writerows([
    {'狗名': '猜猜', '年龄': 2, '品种': '哈士奇', '价格': 1500},
    {'狗名': '土豆', '年龄': 1, '品种': '土狗', '价格': 50},
    {'狗名': '妞妞', '年龄': 3, '品种': '金毛', '价格': 2500}
])

你可能感兴趣的:(python,开发语言)