面向过程
面向过程的思想编程
基于该思想写程序就好比 设计一条条的流水线
优点:
可以把复杂的问题流水化,进而简单
缺点:
扩展性差,牵一发而动全身
应用场景:
框架的设计的思想就是过程的思想
不要装逼,能简单就简单
服务器的脚本
函数的编写
生成式
生成式
列表生成式 : 在不影响可读性的前提下,尽量简写
给列表L 加5个数字?
L =[]
for i in range(5):
L.append(i)
print(L)
如何简写
L =[ i for i in range(5)]
print(L)
L =[ 111 for i in range(5)]
print(L)
L =[ len('hello') for i in range(5)] 不懂
print(L)
L =[ i**2 for i in range(5) if i > 2]
print(L)
需求 取出一个列表的中的元素,已sb 结尾的,放到一个新的列表内
old_list = [ 'yellow_sb','uuuuu_sb','aaa_sb','kkkk_sb','aaa','lll']
print(old_list)
new_list = [ name for name in old_list if name.endswith('_sb')]
print(new_list)
集合生成式 : 在不影响可读性的前提下,尽量简写
res = { i for i in range(5)}
print(res)
字典生成式 : 在不影响可读性的前提下,尽量简写
res = {f'k{i}':i**2 for i in range(5)}
print(res)
生成器表达式
res = (i for i in range(5))
# 不能运行
print(res.__iter__().__next__())
print(res.__iter__().__next__())
print(res.__iter__().__next__())
print(res.__iter__().__next__())
为什么需要使用生成器,在计算大范围的数学运算的时候,需要做N个数字声明,然后一个一个的计算,容易造成内存溢出。
但是使用 yield函数 或者是生成器 ,就不会发生这个问题,使用函数的iter功能赋值给一个对象,然后使用对象的next的功能
就能解决这个大数量运算的问题
需求 1 +20万 的和
numb = (i for i in range(200000))
res = sum(numb) # sum 函数参数就是要一个生成器
print(res)
问题 统计一个文件的字符的个数
需求拆分 文件有可能很小,有可能很大,那就要分成2种情况,全部读到内存,还是一行一行的读到内存
方法一 全部读到内存
with open('log.txt','r',encoding='utf-8') as f:
data = f.read()
res = len(data)
print(res)
方法二 一行一行的读
with open('log.txt','r',encoding='utf-8') as f:
res =0
for line in f:
res += len(line)
print(res)
方法二 一行一行的读 简化代码
with open('log.txt','r',encoding='utf-8') as f:
# res= sum( (len(line )for line in f)) # 简化代码 ,可以去掉一对括号
res = sum(len(line) for line in f) # 语法简洁
print(res)