python基础教程三(元组和字符串格式化)

1. 元组

与列表一样,元组也是序列,唯一的差别在于元组是不可修改的,元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。

>>1,231,23

如何表示只包含一个值的元组呢,这点有点特殊:虽然只有一个值,也必须在他后面加上逗号。

>>43
43
>>42,
(42)

函数tuple的工作原理和list很像:它将一个序列作为参数,并将其转换为元组。如果参数已经是元组,就返回它

>>tuple[1,2,3](1,2,3)
>>tuple("abc")
('a','b','c')

2. 字符串格式化

前面说过,字符串属于序列,但是字符串是不可改变的,因此所有的元素赋值,和切片赋值都是非法的

1. 设置字符串的格式:精简版

如果你是个python新手,不会用到所有的选项,因此这里介绍精简版
主要的解决方案是使用字符串格式设置运算符-百分号。这个运算符的行为类似于c语言中的经典函数printf:在%左边指定一个字符串(格式字符串),并在右边指定要设置其格式的值。指定要设置其格式的值时。可使用单个值(如字符串或数字),可使用元组(如果要设置多个格式),还可以使用字典,其中最常见的是元组。

 >>example='%s'
 >>a='let me see'
 print(example %a)
 let me see
>>example='%s %s'
>>a=("abs",def)
>>print(example%a)
abs def

上述格式字符串中的’%s’ 称为转换说明符,和c语言printf里面的一样,指出了要将值插入什么地方。s意味着将值视为字符串进行格式设置。如果指定的值不是字符串,将使用str将其转换为字符串.其他说明符将导致其他形式转换.例如,%.3f将值的格式为包含3位小数的浮点数。

编写新代码时,应选择使用字符串方法format,它融合并强化了早期方法的有点。使用这种方法是,每个替换字段都用花括号括起,其中可能包含名称,可能包含有关如何对相应的值进行转换和格式设置的信息。
再最简单的情况下,替换字段没有名称或索引用作名称。

>>"{},{},{}".format("1","2",“3)1,23‘
“{0},{1},{2}.format(“1”,“2”,“3”)
‘1,23’
索引无需像上面这样按顺序排列
>>'{0},{0},{0}'.format("1","2","3")
1,1,1

命名字段的工作原理与你的预期的完全相同

>>from marh import pi
>>"{name} is approximately {value:.2f}".format(vaue=pi,name='π')
π is approximately 3.14

关键字参数的排列顺序无关紧要。在这里,我还指定了格式说明符.2f,并使用冒号将其与字段名隔开.它意味着要使用包含2位的小数浮点数格式.
最后,如果变量与替换字段同名,可以使用一种简写。在这种情况下,可使用f字符串-在字符串前面加上f。

>>from math import e
 f'e is equal {e}'
 'e is equal 2.718281828459045'

2. 设置字符串格式: 完整版

字符串格式设置的内容很多,即便是这里的完全版也无法探索所有细节,而只是介绍主要的组成部分。基本思想是对字符串的调用方法format,字符串包含有关如何设置格式的信息,而这些信息是使用一种微型格式指定语言指定的。每个值都被插入字符串中,替换花括号括起的替换字段.要在最终结果中包含花括号,可在格式字符串中使用俩个花括号来指定.

>>"{{test}}".format()
'{test}'

在字符串中,最激动人心的部分为替换字段.替换字段由如下部分组成,其中每个部分都是可选的
字段名:索引或者标识符,指出要设置那个值的格式并使用结果来替换该字段.

转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(表示repr),s(表示str)和a(表示ascii)。如果你设置了转换标志,将不使用对象本身的设置格式,而是使用指定的函数将对象转换为字符串.

格式说明符:跟在冒号后面的表达式(这种表达式是使用微型格式指定语言表示的).格式说明符让我们能够详细指定最终的格式,包括格式类型(如字符串,浮点数或十六进制数),字段宽度和数的精度如何显示符号和千位符,各种对齐方式,和填充方式.

1. 替换字段名

索引或标识符,指出要设置那个值的格式并使用结果来替换该字段
上面已有不重复例子了
注意:不能同时使用手工编号和自动编号,因为这样很快会变得混乱不堪。

2. 基本转换

指定要在字段中包含的值后,就可以添加有关如何设置其格式的指令了。首先,可以提供一个转换标志.

1. 转换标志
>>print("{pi!a} {pi!s} {pi!r}".format(pi='π'))
'\u03c0‘’  π  ‘’π'

上述三个标志指定分别用str,repr和asii进行转换,函数str通常创建外观普通的字符版本(这里没有对字符串做任何处理) 函数repr创建一个原味字符串(就是包含双引号且如果字符串内部有转义字符也原味输出不转义),函数ascii如果字符是在asc范围内的和repr基本相同,如果不在那输出一个unicode编码字符串,转换标志一般很少用(了解即可)

2. 格式转换

你可以指定转换的值是哪种类型。例如你可能提供一个整数,但将其小数进行处理,为此可格式说明使用字符f(表示定点数)

>>'the number is {num}'.format(num=42)
'the number is 42'
>>'the number is {num:f}'.format(num=42)
'the number is 42.000000'

你也可以将其作为二进制数进行处理

>>> 'the number is {num:b}'.format(num=42)
'the number is 101010'

这样的类型说明符有多个,常用的清单见下表

b 将整数表示为二进制数
c 将整数解读为unicode码点
d 将整数视为十进制数进行处理,这是整数默认使用的说明符
f 将小数表示为定点数
e 使用科学表示法表示小数
s 保持字符串的格式不变,这是默认用于字符串的说明符
o 将整数表示为八进制数
x 将整数表示为十六进制数并使用小写字母
X 与x相同,但使用大写字母
% 将数表示为百分比值(乘以100,按说明符f设置格式,在后面加上个%)
3. 宽度,精度和千分位符

宽度是使用整数指定的,例如

>>'{num:10}'.format(num=3)
'         3'
'{name:10}'.format(name='bob')
'bob       '

精度也是使用整数指定的,但需要再它前面加上一个表示小数点的句点。

>>'{:.2f}'.format(134.343423213)
'134.34'

最后,可使用逗号来指出你要的千位分隔符.

>>'{:,}'.format(10**30)
'1,000,000,000,000,000,000,000,000,000,000'
4. 符号,对齐和用0填充

有很多用于设置数字格式的机制,比如便于打印整齐的表格。在大多数情况下,只需要指定宽度和精度,但包含负数后,原本漂亮的输出可能不在漂亮。另外,正如你已看到,字符串和输的默认对齐方式不同。在一栏中同时包含字符串和数是,你可能想修改默认对齐方式,在指定宽度和精度的数前面,可添加一个标志,这个标志可以是零,加号,减号或空格,其中零表示使用0来填充数字.

>>'{:010.2f}'.format(3.143432)
'0000003.14'

要指定左对齐,右对齐和居中,可分别使用<,>,^

>> print('{0:<10.2f}\n{0:>10.2f}\n{0:^10.2f}'.format(3.143432))
3.14
      3.14
   3.14

可以使用填充字符来扩充对齐说明符,这样使用的指定的字符而不是默认的空格来填充

>>'{:0>10.2f}'.format(11.24)
'0000011.24'0填充

还有更具体的说明符=,它指定将填充字符放在符号和数字之间(设置这个将无法设置对齐方式)

如果要给正数加上符号,可使用说明符+(将其放在对齐说明符的后面)

>>print('{:>+10}'.format(32))
       +32

五星重点总结:
冒号之前的是索引或者字段名称,告诉你输出的是哪个变量,冒号之后按顺序填充字符,对齐方式或者=说明符,之后是正负号说明符,之后变量宽度,之后是小数点精度,最后是格式说明符

你可能感兴趣的:(python基础教程(第三版),python,开发语言)