python学习笔记9
一、新的格式化输出方法
# 基本使用方法
name = 'Lieve'
age = 18
msg = f'我叫{name},今年{age}'
print(msg) # 我叫Lieve,今年18
# 其他用法
dict_1 = {'name':'Lieve','age':18}
msg_1 = f'我叫{dict_1["name"]},今年{dict_1["age"]}'
print(msg_1) # 我叫Lieve,今年18
n = 10
print(f'{n}的平方:{n**2}') # 10的平方:100
二、迭代器
-
可迭代对象:首先关于python中的对象,python中一切皆对象(一个实实在在存在的值)。在python中内部含有“_iter_”方法的对象称为可迭代对象(str,list,tuple,dict,range,文件句柄)
-
获取一个对象的所有方法
# 使用dir方法去获取一个对象的所有方法 # 内部有__iter__方法的对象是可迭代对象 s1 = 'abcde' print(dir(s1)) # 将s1所有的方法以列表的形式返回
-
迭代器:内部含有“__iter_”方法并且含有“__next__”方法的对象。
li_1 = [1,2,3,4,5] # 创建一个可迭代对象 # 将可迭代对象转化成迭代器 li = iter(li_1) # 或者li=li_1.__iter__() print(next(li)) # 1 print(next(li)) # 2 print(next(li)) # 3 print(next(li)) # 4 print(next(li)) # 5
三、生成器
-
生成器:生成器的本质就是迭代器。生成器是我们自己用python代码人工构建的数据结构,而迭代器都是由解释器提供或者转化得来的。
-
获取生成器的方式:
-
生成器函数:
# 在函数中加入yield就是一个生成器函数 def func_1(): for i in range(3): yield i ret = func_1() print(type(ret)) # <class 'generator'> print(next(ret)) # 0 print(next(ret)) # 1 print(next(ret)) # 2 print(next(ret)) # StopIteration """ return:函数中只存在一个return结束函数,并且给函数的执行者返回值 yield:只要函数中有yield那么它就是生成器而不再是函数 生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next """
# yield from def func_2(): li_1 = [1,2,3,4,5] yield from li_1 # 相当于yield 1 # yield 2 # yield 3 # yield 4 # yield 5
-
生成器表达式:
# 列表推导式 # 循环模式 li_1 = [i for i in range(10)] print(li_1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 它跟一下列表生成结果一模一样 li_2 = [] for i in range(10): li_2.append(i) print(li_2) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 筛选模式 li_3 = [x for i in li_1 if x%2==0] print(li_3) # [0, 2, 4, 6, 8]
# 生成器表达式 # 在代码写法上与列表推导式的写法几乎一模一样 li_1 = [i for i in range(10)] # 列表推导式 ret = (i for i in range(10)) # 生成器表达式 print(li_1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(ret) # <generator object <genexpr> at 0x000001D4D311C0C8>
-
python内部提供的一些生成器
-
四、内置函数(python提供了68个常用的内置函数)
-
匿名函数lambda
# 也叫一句话函数 # 格式 lambda 参数:表达式(返回值) func_1 = lambda a,b:a + b print(func_1(1,2)) # 3
-
reversed
# 将一个可迭代对象转换成迭代器,反向取值 # 原列表不会变化 li = [i for i in range(3)] obj = reversed(li) for i in range(4): print(next(obj)) """ 2 1 0 StopIteration """
-
zip
# 拉链方法 l1 = [1,2,3,4,5] tu1 = ('a','b','c','d') s1 = 'ABC' obj = zip(l1,tu1,s1) print(obj) # <zip object at 0x000001D4D3127888> for i in obj: print(i) """ (1, 'a', 'A') (2, 'b', 'B') (3, 'c', 'C') """
-
min、max
# 求最大最小值 li_1 = [33,2,-9,17,-98,23,0] print(min(li_1)) # -98 print(max(li_1)) # 33 # 以绝对值方式对列表取最值 print(min(li_1,key=abs)) # 0 print(max(li_1,key=abs)) # -98 # 它会自动地将可迭代对象中的每个元素按照顺序传入key对应的函数中 # 然后用返回值进行比较大小
-
sorted
# 排序形成新对象,默认从低到高 li_1 = [1,4,53,-9,78] li_2 = sorted(li_1) print(li_2) # [-9, 1, 4, 53, 78] li_3 = sorted(li_1,key=lambda x:-x) print(li_3) # [78, 53, 4, 1, -9]
-
filter
# 列表推导式的筛选模式 li = [2,3,4,1,6,7,8] # 返回列表 print([i for i in li if i>3]) # [4, 6, 7, 8] # 返回迭代器 ret = filter(lambda x:x>3,li) print(ret) # <filter object at 0x000001D4D31238C8> print(list(ret)) # [4, 6, 7, 8]
-
map
# 列表推导式的循环模式 li = ['1','2','3','4'] ret = map(int,[i for i in li]) print(ret) # <map object at 0x000001D4D311A608> print(list(ret)) # [1, 2, 3, 4]