Python迭代器与格式化

三元运算

对if…else判断的简写

>>> age = 18
>>> res = "You are so young!" if age < 18 else "You are so eld!"
### 如果满足条件就返回前面的内容,不满足就返回后面的内容
>>> print(res)
You are so eld!

正则表达式

>>> test_list = [1,2,3,4,5]
>>> result_list = [i*i for i in test_list] 
>>> print(result_list)
[1, 4, 9, 16, 25]

>>> result_list = [i**i for i in test_list if i < 3]  ##还可以为正则表达式添加一个判断条件
>>> print(result_list)
[1, 4]

迭代器和可迭代对象

迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法。其中__iter__()方法返回迭代器对象本身;next()方法返回容器的下一个元素,在结尾时引发StopIteration异常

#############for循环的本质#############
>>> test_list = [1,2,3,4]
>>> iter_list = test_list.__iter__()   ##通过这种方法把iter_list变为迭代器
>>> print(type(iter_list))
<class 'list_iterator'>        
>>> print(iter_list.__next__())     ##用__next__()方法实现
1
>>> next(iter_list)           ##用next()方法实现
2
>>> next(iter_list)
3
>>> next(iter_list)
4
>>> next(iter_list)
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>   
    next(iter_list)
StopIteration   ##当遍历完之后就会报错

可迭代对象可以分为,

第一类是集合数据类型

第二类是generator,包括生成器和带yield的函数

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)

>>> people = ("People_%s" %i for i in range(10))  ##写在()里的就叫做正则表达式
>>> next(people)
'People_0'
>>> next(people)
'People_1'
>>> next(people)
'People_2'
>>> next(people)
'People_3'
>>> next(people)
'People_4'
>>> next(people)
'People_5'
>>> next(people)
'People_6'
>>> next(people)
'People_7'
>>> next(people)
'People_8'
>>> next(people)
'People_9'
>>> next(people)
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    next(people)
StopIteration

格式化

%[(name)][flags][width].[precision]typecode方式

  • (name) 为命名
  • flags 可以有 +,-,' '或 0.+ 表示右对齐.- 表示左对齐。' ' 为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0 表示使用 0 填充
  • width 表示显示宽度
  • precision 表示小数点后精度
常用类型码 作用
%s 字符串 (采用str()的显示)
%d 十进制整数
%i 十进制整数
%f 浮点数
%% 字符“%”
>>> print("%.2f" %2.13414)
2.13
>>> print("I like to %s" %"read")
I like to read

format(self, *args, **kwargs)

数字 格式 输出 描述
3.1415926 3.14 保留小数点后两位
3.1415926 +3.14 带符号保留小数点后两位
-1 -1.00 带符号保留小数点后两位
2.71828 3 不带小数
5 05 数字补零 (填充左边, 宽度为2)
5 5xxx 数字补x (填充右边, 宽度为4)
10 10xx 数字补x (填充右边, 宽度为4)
1000000 1,000,000 以逗号分隔的数字格式
0.25 25.00% 百分比格式
1000000000 1.00e+09 指数记法
13 13 右对齐 (默认, 宽度为10)
13 13 左对齐 (宽度为10)
13 13 中间对齐 (宽度为10)
>>> print("I am {name} and {age} years old, from {hometown}".format(name = "Hermaeus", age = 19, hometown = "meishan"))
I am Hermaeus and 19 years old, from meishan

>>> print("I an {0} and {1} years old, from {2}".format( "Hermaeus",19, "meishan"))	  
I an Hermaeus and 19 years old, from meishan

>>> print("I am {name}, {age} years old!".format(**{"name":"Hermaeus","age":19}))	  
I am Hermaeus, 19 years old!
posted @ 2019-03-30 19:02  Mingle_Yuan  阅读(369)  评论(0编辑  收藏  举报