fluent python 1

1 用*来获取不确定数量的参数

用*来获取不确定数量的参数

>>> a, b, *c = range(5)
>>> a, b, c
(0, 1, [2, 3, 4])

2 用*运算符来把一个可迭代对象的参数拆开作为函数的参数

用*运算符来把一个可迭代对象的参数拆开作为函数的参数

>>> divmod(20, 8)
(2, 4)
>>> t = (20, 8)
>>> divmod(*t)
(2, 4)

3 具名元组

定义和使用具名元组需要两个参数,一个是类名,一个是类的各个字段的名字,另一个是由多个字符串组成的可迭代对象,或者由空格分隔开的字段名组成的字符串

>>> from collections import namedtuple
>>> # 字符串的可迭代
>>> Card = namedtuple('Card', ['rank', 'suit'])
>>> # 空格分隔的字符串
>>> City = namedtuple('City', "name country population coordinates")
>>> tokyo = City("tokyo", "JP", 36.93, (35.69, 139.69))
>>> tokyo.country
'JP'
>>> tokyo.coordinates
(35.69, 139.69)
>>> tokyo[0]
'tokyo'
>>> City._fields
('name', 'country', 'population', 'coordinates')

4 直接交换变量

python 交换变量,无需中间变量

>>> a, b = (1, 2)
>>> b, a = a, b
>>> a, b
(2, 1)

5 对对象进行切片

s[a:b:c]在a与b之间每隔c取值,c可以是负值

>>> s = "hello, world!"
>>> s[::3]
'hl r!'
>>> s[::-1]
'!dlrow ,olleh'

6 对序列使用+和*

对序列使用+和*对会创建新序列,而不修改原来的序列

>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> a
[1, 2, 3]

7 bisect来管理有序序列

bisect(haystack, needle)返回插入的位置, insort(seq, item)进行插入操作

>>> import bisect
>>> import random
>>> a = [1, 48, 12, 34, 4, 8]
>>> a = sorted(a)
>>> a
[1, 4, 8, 12, 34, 48]
>>> bisect.bisect(a, 5)
2
>>> bisect.insort(a, 5)
>>> a
[1, 4, 5, 8, 12, 34, 48]

你可能感兴趣的:(fluent python 1)