与列表一样,元组也是序列,唯一的差别在于元组是不可修改的,元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。
>>1,2,3
(1,2,3)
如何表示只包含一个值的元组呢,这点有点特殊:虽然只有一个值,也必须在他后面加上逗号。
>>43
43
>>42,
(42)
函数tuple的工作原理和list很像:它将一个序列作为参数,并将其转换为元组。如果参数已经是元组,就返回它
>>tuple([1,2,3])
(1,2,3)
>>tuple("abc")
('a','b','c')
前面说过,字符串属于序列,但是字符串是不可改变的,因此所有的元素赋值,和切片赋值都是非法的
如果你是个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,2,3‘
“{0},{1},{2}”.format(“1”,“2”,“3”)
‘1,2,3’
索引无需像上面这样按顺序排列
>>'{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'
字符串格式设置的内容很多,即便是这里的完全版也无法探索所有细节,而只是介绍主要的组成部分。基本思想是对字符串的调用方法format,字符串包含有关如何设置格式的信息,而这些信息是使用一种微型格式指定语言指定的。每个值都被插入字符串中,替换花括号括起的替换字段.要在最终结果中包含花括号,可在格式字符串中使用俩个花括号来指定.
>>"{{test}}".format()
'{test}'
在字符串中,最激动人心的部分为替换字段.替换字段由如下部分组成,其中每个部分都是可选的
字段名:索引或者标识符,指出要设置那个值的格式并使用结果来替换该字段.
转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(表示repr),s(表示str)和a(表示ascii)。如果你设置了转换标志,将不使用对象本身的设置格式,而是使用指定的函数将对象转换为字符串.
格式说明符:跟在冒号后面的表达式(这种表达式是使用微型格式指定语言表示的).格式说明符让我们能够详细指定最终的格式,包括格式类型(如字符串,浮点数或十六进制数),字段宽度和数的精度如何显示符号和千位符,各种对齐方式,和填充方式.
索引或标识符,指出要设置那个值的格式并使用结果来替换该字段
上面已有不重复例子了
注意:不能同时使用手工编号和自动编号,因为这样很快会变得混乱不堪。
指定要在字段中包含的值后,就可以添加有关如何设置其格式的指令了。首先,可以提供一个转换标志.
>>print("{pi!a} {pi!s} {pi!r}".format(pi='π'))
'\u03c0‘’ π ‘’π'
上述三个标志指定分别用str,repr和asii进行转换,函数str通常创建外观普通的字符版本(这里没有对字符串做任何处理) 函数repr创建一个原味字符串(就是包含双引号且如果字符串内部有转义字符也原味输出不转义),函数ascii如果字符是在asc范围内的和repr基本相同,如果不在那输出一个unicode编码字符串,转换标志一般很少用(了解即可)
你可以指定转换的值是哪种类型。例如你可能提供一个整数,但将其小数进行处理,为此可格式说明使用字符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设置格式,在后面加上个%) |
宽度是使用整数指定的,例如
>>'{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'
有很多用于设置数字格式的机制,比如便于打印整齐的表格。在大多数情况下,只需要指定宽度和精度,但包含负数后,原本漂亮的输出可能不在漂亮。另外,正如你已看到,字符串和输的默认对齐方式不同。在一栏中同时包含字符串和数是,你可能想修改默认对齐方式,在指定宽度和精度的数前面,可添加一个标志,这个标志可以是零,加号,减号或空格,其中零表示使用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
五星重点总结:
冒号之前的是索引或者字段名称,告诉你输出的是哪个变量,冒号之后按顺序填充字符,对齐方式或者=说明符,之后是正负号说明符,之后变量宽度,之后是小数点精度,最后是格式说明符