目录
1.生成器:
有两种方式:
生成器函数(Generator Function):生成器函数是一种特殊的函数,使用关键字yield
来将值生成出来。当函数中执行到yield
语句时,函数会返回一个值,并将其状态冻结在当前位置,以便下次调用时从冻结的位置继续执行。每次调用生成器函数,都会生成一个新的值,直到生成器函数执行完毕。
def fibonacci_generator():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
fib = fibonacci_generator()
print(next(fib)) # 输出: 0
print(next(fib)) # 输出: 1
print(next(fib)) # 输出: 1
print(next(fib)) # 输出: 2
# ...
生成器表达式(Generator Expression):生成器表达式类似于列表推导式,用于快速创建生成器对象。与列表推导式不同的是,生成器表达式使用圆括号来包裹,并使用惰性计算的方式生成值。
odd_generator = (x for x in range(1, 10) if x % 2 != 0)
for i in odd_generator:
print(i)
2.迭代器:
-
__iter__()
:返回迭代器对象本身。这个方法在迭代器初始化时被调用。 -
__next__()
:返回迭代器中的下一个元素。如果没有更多的元素可迭代,它会引发StopIteration
异常。
class MyIterator:
def __init__(self, max_num):
self.max_num = max_num
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current < self.max_num:
num = self.current
self.current += 1
return num
else:
raise StopIteration
# 创建一个迭代器对象
my_iterator = MyIterator(5)
# 使用for循环遍历迭代器中的元素
for num in my_iterator:
print(num)
# 输出:0 1 2 3 4
3.生成器和迭代器的区别:
1.语法和定义方式:生成器使用特定的语法(如yield关键字)来定义生成数据的算法,使得生成器的定义更加简洁和直观。而迭代器则需要实现特定的方法(如iter_0和_next__0)来支持选代操作。
2.内部状态的保存:生成器具有内部状态,因此在每次生成数据时,它们会自动保存生成的位置和内部变量的值。这意味着生成器可以在下次请求生成时从暂停的位置继续生成数据。而迭代器通常需要手动管理状态,例如使用变量来记录当前位置。
3.内存占用:生成器以惰性方式逐个生成数据项,并且只在需要时才生成数据。这使得生成器在处理大规模数据集或无限序列时非常高效,因为它们不需要一次性加载所有数据到内存中。相比之下,迭代器可能需要提前加载所有数据到内存中,因此可能占用更多的内存空间。
4.可选代性:生成器可以被视为可迭代对象,因为它们可以使用for循环进行遍历,或者可以通过调用iter0函数来获取迭代器。而迭代器本身是可迭代对象,因此可以直接使用for循环进行遍历。
4.对Execl文件进行读取:
# coding=gb2312
import pandas as pd
ff = pd.read_excel("文件名.xlsx")
dict_n = {}
fen = []
name = []
data = []
for i, j in ff.iterrows():
# isinstance判断一个对象是不是字符串
if isinstance(j[1], str):
continue
else:
fen.append(j[1])
name.append(j[0])
data.append([j[0], j[1]])
print(name)
5.使用匿名函数和进行取值:
# 前三名,使用匿名函数和高阶函数,切片进行取值
qian = sorted(data, key=lambda x: x[1], reverse=True)[:3]
print(qian)
# 后三名
nnn = sorted(data, key=lambda x: x[1], reverse=True)[-3:]
print(nnn)
6.将数据写入csv文件中:
# 向文件写入前三名
import csv
# 成绩排名信息
rankings = qian
# 构建文件名
filename = f"文件名.csv"
# 写入CSV文件
with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(rankings) # 写入数据
print(f"{filename}")
7.找到计算机自带字体格式:
'C:/Windows/Fonts/simhei.ttf'
8.python中__init__魔法方法:
# 对象初始化时执行
class Test:
def __init__(self,name,age):
self.name = name
self.age = age
print("名字:"+self.name)
print("年龄:"+self.age)
if __name__ == '__main__':
a = Test("张三","12")
9.python中__new__魔法方法:
# 为该对象分配内存空间
class Test:
def __new__(cls, *args, **kwargs):
obj = object.__new__(cls)
print(obj)
return obj
def __init__(self):
print(self)
if __name__ == '__main__':
a = Test()
10.python中__del__魔法方法:
# 对象被删除的时候调用该方法
class Test:
def __init__(self):
print("初始化对象")
def __del__(self):
print("对象被删除")
if __name__ == '__main__':
a = Test()
print("end")