# 2021年12月10日,第四周11
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import time
def func1(args):
args = args * args
return args
def day12_case1():
# 列表生成式
list_str1 = [i * 2 for i in range(10)] # 列表生成式
list_str2 = [func1(i) for i in range(10)] # 列表生成式,可传入函数
# list_str2的生成方式等同于下面list_str3的生成方式
list_str3 = []
for i in range(10):
list_str3.append(i * i)
print(list_str1)
print(list_str2)
print(list_str3)
return 0
def day12_case2():
# 生成器,只有在调用的时候才会生成一个数据,调用一次生成一个数据,因为只记录一个数据所以节省内存
# 生成器只能前进生成,不可后退生成
# python3有__next__()方法,python2为next()
list_generator1 = [i * 2 for i in range(100000)] # 列表生成式缺点,占用内存大,可以该机制制作内存占用软件
list_generator = (i * 2 for i in range(100)) # 生成器
for i in range(10): # 生成器通过__next__()取值
print(list_generator.__next__())
for i in list_generator: # 生成器通过for循环直接取值
print(i)
return list_generator, list_generator1
def fib1(max_num=100):
# 斐波拉契数列
a, b, c = 0, 1, 1
d = []
while b < max_num:
d.append(b)
a = b
b = c
c = a + b
return d
def fib(max_num=100):
# 斐波拉契数列
a, b = 0, 1
while b < max_num:
c = yield b # 可以把yield b看做“return b pause”,遇到yield 函数会暂停运行,需要next才能继续运行
a, b = b, a + b # 运算顺序,从右往左,先运算a+b=n,然后a=b,b=n
# 另外一种理解方式
# c = (b,a+b)
# a = c[0],b=c[1]
if c != None:
print(c)
return 0
def day12_case3():
# 生成器
print(fib1(1000))
print(fib)
list_generator = fib() # 生成器0
list_generator1 = fib() # 生成器1
print(list_generator)
# print(list_generator.close()) # 关闭生成器
print("斐波拉契数列生成器0")
print("生成器0获取一个数据方法1:", list_generator.__next__()) # 生成器获取一个数据方法1
print("生成器0获取一个数据方法2:", next(list_generator)) # 生成器获取一个数据方法2
# 生成器获取一个数据数据方法3,yield会给yield传一个值
print("生成器0获取一个数据方法3:", list_generator.send("我是最靓的boy/girl,我传进去生成器0一个参数了"))
for i in list_generator: # 斐波拉契数列生成器0
print(i, end=',')
try: # 捕捉StopIteration异常并进行处理
list_generator.__next__()
except StopIteration:
print("\n超出长度了")
print("\n斐波拉契数列生成器1")
for i in list_generator1: # 斐波拉契数列生成器1
print(i, end=',')
pass
def day12_case4():
# 数据精度
# 看博客https://www.cnblogs.com/wupeiqi/p/13041139.html
from decimal import *
print("0.1 + 0.2结果为:",0.1 + 0.2) # 结果为0.30000000000000004
print("Decimal(0.1 + 0.2)结果为:",Decimal(0.1 + 0.2)) # 结果为0.3000000000000000444089209850062616169452667236328125
print("0.1 + 0.2结果为(保留1位小数):%.1f" % (0.1 + 0.2)) # 结果为0.3
if __name__ == '__main__':
# day12_case1()
# day12_case2()
day12_case3()
day12_case4()
pass
|