python元组使⽤什么符号表⽰⽅括号_Python的精髓居然是⽅
括号、花括号和圆括号!...
和其他编程语⾔相⽐,什么才是Python独⼀⽆⼆的特⾊呢?很多程序员会说,缩进。的确,缩进是Python语⾔的标志性特点,但这只是外在的、形式上的。从语⾔特性层⾯讲,Python的特点是什么呢?我尝试着搜索了⼀下,最具代表性的答案分别是语法简洁、简单易学、代码⾼效、功能强⼤等四项。仔细品味这四项,我还是觉得,这是Python语⾔表现出来的使⽤效果或⽤户感受,仍然不是语⾔特性层⾯的特⾊。
换个说法,究竟是Python的哪些语⾔特性使得⼈们普遍认为Python具有语法简洁、简单易学、代码⾼效、功能强⼤的特点呢?我个⼈认为,这要归功于列表(list)、字典(dict)、元组(tuple)和集合(t)这“四⼤⾦刚”。尽管整型(int)、浮点型(float)和字符串(str)也很重要,但这三种对象相对于其他编程语⾔来说,差异并不像“四⼤⾦刚”那样明显。可以毫不夸张地说,列表、字典、元组和集合代表了Python 语⾔的核⼼和基础,同时也是Python的精髓所在。学会使⽤列表、字典、元组和集合,就意味着掌握了Python这门编程语⾔。
如果认可这个观点,那么,Python的精髓就从列表、字典、元组和集合等“四⼤⾦刚”,演变成由⽅括号、花括号和圆括号组成的“括号族”。
关于除夕的诗句1. ⽅括号
⽅括号⼏乎是所有编程语⾔的第⼀符号。这⾥的第⼀,并不是指使⽤频率,⽽是指这个符号展现出的编程语⾔的内涵和创造⼒。事实上,就符号的使⽤频率⽽⾔,⽅括号也可能排在⾸位——只是我的直觉,并没有统计数据⽀持。
1.1 创建列表
对于初学者来说,创建列表最常⽤的⽅法就是⽤⼀对⽅括号。
>>> a = []
>>> a
[]
>>> b = [3.14, Fal, 'x', None]
>>> b
[3.14, Fal, 'x', None]
即便是⽼鸟,也会⼤量使⽤⽅括号创建列表,尤其是使⽤推导式创建列表的情况下。
>>> c = [i**2 for i in range(5)]
>>> c
[0, 1, 4, 9, 16]
但我⼀直觉得,⽅括号就像⼝语或俚语,太过随便。我更喜欢使⽤严谨的list()来创建列表。使⽤list()创建列表,是list类的实例化的标准⽅法,可以体会list类的构造函数如何适应不同类型的参数。
>>> a = list()
>>> a
[]
>>> b = list((3.14, Fal, 'x', None))
>>> b
[3.14, Fal, 'x', None]
>>> c = list({1,2,3})
>>> c
[1, 2, 3]
>>> d = list({'x':1,'y':2,'z':3})
>>> d
['x', 'y', 'z']
>>> e = list(range(5))
>>> e
[0, 1, 2, 3, 4]
>>> f = list('*'*i for i in range(5))
>>> f
['', '*', '**', '***', '****']
1.2 列表的索引
⽅括号可以创建列表,但⽅括号并不等同于列表,因为⽅括号还⽤来索引。
>>> [3.14, Fal, 'x', None][2]
'x'
>>> [3.14, Fal, 'x', None][-2]
'x'
>>> [3.14, Fal, 'x', None][1:]
[Fal, 'x', None]
>>> [3.14, Fal, 'x', None][:-1]
[3.14, Fal, 'x']
扇贝的家常做法
>>> [3.14, Fal, 'x', None][::2]
挟天子以令诸侯的意思[3.14, 'x']
>>> [3.14, Fal, 'x', None][::-1]
[None, 'x', Fal, 3.14]
列表的索引⾮常灵活,尤其是引⼊了负数索引,⽤-1表⽰最后⼀个元素或逆序,实属喜⼤普奔。上⾯的操作,属于常⽤索引⽅式,如果能读懂下⾯的代码,说明你已经具备了⾜够深的功⼒。
>>> a = [3.14, Fal, 'x', None]
>>> a[2:2] = [1,2,3]
>>> a
[3.14, Fal, 1, 2, 3, 'x', None]
1.3 列表的⽅法
对于列表对象的⽅法如果能信⼿拈来,那就是Python⾼⼿了。
中国十大咖啡品牌
>>> a = [3.14, Fal, 'x', None]
>>> a.index('x')
2
>>> a.append([1,2,3])
>>> a
[3.14, Fal, 'x', None, [1, 2, 3]]
>>> a[-1].inrt(1, 'ok')
>>> a
[3.14, Fal, 'x', None, [1, 'ok', 2, 3]]
>>> a.remove(Fal)
>>> a
[3.14, 'x', None, [1, 'ok', 2, 3]]
>>> a.pop(1)
'x'
>>> a
[3.14, None, [1, 'ok', 2, 3]]
>>> a.pop()
[1, 'ok', 2, 3]
>>> a
[3.14, None]
2. 花括号
花括号代表字典对象,⼤多数初学者都这样认为。然⽽,这是错误的,⾄少是⽚⾯的。下⾯的代码中,a和b都是⽤花括号创造出来的对象,却⼀个是字典,⼀个是集合。
>>> a = {}
>>> a
{}
>>> b = {'x','y','z'}
>>> b
{'y', 'z', 'x'}
>>> type(a)
>>> type(b)
原来,Python⽤花括号表⽰字典和集合两种对象:花括号内是空的,或者是键值对的,表⽰字典;花括号内是⽆重复元素的,表⽰集合。为了不引起误会,我习惯⽤dict()来⽣成字典,⽤t()来⽣成集合。
>>> dict()
{}
>>> dict({'x':1, 'y':2, 'z':3})
{'x': 1, 'y': 2, 'z': 3}
>>> dict((('x',1), ('y',2), ('z',3)))
{'x': 1, 'y': 2, 'z': 3}
和煦的微风>>> dict.fromkeys('xyz')
{'x': None, 'y': None, 'z': None}
>>> dict.fromkeys('abc', 0)
{'a': 0, 'b': 0, 'c': 0}
>>> t((3,4,5))
{3, 4, 5}
>>> t({'x':1, 'y':2, 'z':3})
{'y', 'z', 'x'}
>>> t([3,3,4,4,5,5])
{3, 4, 5}
编码实践中,虽然在某些情况下集合是⽆可替代的,但集合的使⽤频率是“四⼤⾦刚”中最低的,我们这⾥不展开讨论,只说说字典的使⽤技巧。
2.1 判断⼀个键是否存在于字典中
Py2时代,dict对象曾经有has_key()的⽅法,⽤来判断是否包含某个键。py3舍弃了这个⽅法,判断⼀个键是否存在于字典中,只能使⽤in 这样的⽅法了。梅岭关
>>> a = dict({'x':1, 'y':2, 'z':3})
>>> 'x' in a
True
>>> 'v' in a
Fal
2.2 向字典中添加⼀个新键或更新键值
很多⼈喜欢⽤对字典的⼀个键赋值的⽅法,实现向字典中添加⼀个新键或更新键值。
>>> a = dict()
>>> a['name'] = 'xufive'
>>> a
{'name': 'xufive'}
我不推荐这样的⽅式,使⽤update()才更有仪式感,还可以⼀次添加或修改多个键。
>>> a = dict()
>>> a.update({'name':'xufive', 'gender':'男'})
>>> a
{'name': 'xufive', 'gender': '男'}
2.3 从字典中获取⼀个键值
a['age']是最常⽤的⽅式,但是也还会遇到键不存在的异常。下⾯的⽅法值得推荐。
>>> a.get('age', 18)
18
2.4 获取字典的全部键、全部值、全部键值对
dict类提供了keys()、values()和items()等三个⽅法分别返回字典的全部键、全部值和全部键值对。需要注意的是,返回结果并⾮列表,⽽是迭代器。如果你需要列表形式的返回结果,请使⽤list()转换。
>>> a = dict()
>>> a.update({'name':'xufive', 'gender':'男'})
卜算子咏梅苏轼>>> list(a.keys())
['name', 'gender']
>>> list(a.values())
['xufive', '男']
>>> list(a.items())
[('name', 'xufive'), ('gender', '男')]
2.5 遍历字典
腐竹用热水泡还是冷水泡遍历字典的时候,很多同学或写成遍历字典的keys()。其实,不需要这么⿇烦,可以像下⾯这样直接遍历。
>>> a = dict([('name', 'xufive'), ('gender', '男')])
>>> for key in a:
print(key, a[key])
name xufive
gender 男
3. 圆括号
圆括号代表元组对象,这么说应该没有问题吧?的确,听起来没有问题,但在元组的使⽤上,我相信每个初学者都会跌进同⼀个深坑⾄少⼀次。
3.1 必⼊之浅坑
元组不⽤于列表的最显著的特点,就是⽆法更新元素的值。忘记或者忽略这⼀点,就会⼊坑。
>>> a = (3, 4)
>>> a[0] = 5
Traceback (most recent call last):
File "", line 1, in
a[0] = 5
TypeError: 'tuple' object does not support item assignment
3.2 必⼊之深坑
使⽤了多年Python之后,我曾经写出的最糟糕的bug,就是下⾯这⼀段代码。
>>> import threading
>>> def do_something(name):