Python语法精髓
# # Python语法精髓
以下所有实例出自python3官方文档:https://docs.python.org/3/tutorial/index.html
# # List
list是一种有序的数据集合
squares = [1, 4, 9, 16, 25]
# 取值
squares[0] # indexing returns the item // 1
squares[-1] # 25
# 拷贝新数组
squares[-3:] # slicing returns a new list // [9, 16, 25]
squares[:] # returns a shallow copy of the list: // [1, 4, 9, 16, 25]
# 连接
squares + [36, 49, 64, 81, 100] # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
squares[0] = 2 # 修改值
squares.append(5)
len(squares)
for fruit in squares:
# 数组特性
squares.pop()/append(var)/reverse()/sort()/insert(index, var)
# 其他
squares.remove(var)/count(var)/index(var)
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# replace some values
letters[2:5] = ['C', 'D', 'E']
# now remove them
letters[2:5] = []
# clear the list by replacing all the elements with an empty list
letters[:] = []
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# # if表达式
- if statement:
if condition: statement
if condition:
block
2
3
4
- if expression (introduced in Python 2.5)
# 类似js三元表达式的变种
expression_if_true if condition else expression_if_false
2
3
x = a if b else 0 // 等价于 x = (a if b else 0),等价于js:x = b ? a : 0
2
# # 返回多参数(元祖)
# When writing tuples, the parenthesis can be omitted most of the times.
# point = 2, 3
def foo (a):
x=a
y=a*2
return x,y # 作为元祖返回,可带括号或不带
x,y = foo(50)
2
3
4
5
6
7
8
9
# # 字符串格式化
Python uses C-style string formatting to create new, formatted strings. The "%" operator is used to format a set of variables enclosed in a "tuple" (a fixed size list), together with a format string, which contains normal text together with "argument specifiers", special symbols like "%s" and "%d".
name = "John"
age = 23
print("%s is %d years old." % (name, age))
2
3
4
# # 多行语句
- 可以使用斜杠( \)将一行的语句分为多行显示.
total = item_one + \
item_two + \
item_three
2
3
4
- 字符串支持多行显示,使用三个引号
"""..."""
或'''...'''
print("""
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
""")
2
3
4
5
6
字符串可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ )。三引号可以由多行组成,常用于文档字符串。
# # for ... in
for ... in适用于list/dict/set。
dict:
- items():返回元祖list
- keys():返回key list
- values():返回value list
>>> for item in {'color': 'blue', 'fruit': 'apple'}:
... print(item)
...
('color', 'blue')
('fruit', 'apple')
# >>> 等价for key, value in a_dict.items():
2
3
4
5
6
7
8
# # 推导式
推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。共有三种推导式,在Python2和3中都有支持:
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
# # 1. list
基本格式:variable = [out_exp_res for out_exp in input_list if out_exp == 2]
# map:
>>> squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# filter
[x for x in vec if x >= 0]
# 复杂表达式
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
# [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
# 等价于
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# # 2. dict
基本格式:{ key_expr: value_expr for value in collection if condition }
>>> objects = ['blue', 'apple', 'dog']
>>> categories = ['color', 'fruit', 'pet']
>>> a_dict = {key: value for key, value in zip(categories, objects)}
>>> a_dict
{'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
# Turning Keys Into Values
>>> a_dict = {'one': 1, 'two': 2, 'thee': 3, 'four': 4}
>>> new_dict = {value: key for key, value in a_dict.items()}
>>> new_dict
{1: 'one', 2: 'two', 3: 'thee', 4: 'four'}
# filter
>>> a_dict = {'one': 1, 'two': 2, 'thee': 3, 'four': 4}
>>> new_dict = {k: v for k, v in a_dict.items() if v <= 2}
>>> new_dict
{'one': 1, 'two': 2}
# 以下等价于sum(incomes.values())
>>> incomes = {'apple': 5600.00, 'orange': 3500.00, 'banana': 5000.00}
>>> total_income = sum([value for value in incomes.values()])
>>> total_income
14100.0
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# # 3. set
基本格式:{ expr for value in collection if condition }
squared = {x**2 for x in [1, 1, 2]}
# Output: set([1, 4])
2
3
# # 4. 区别
- list和set output都是key表达式,但list使用[],set使用{}
- dict和set 都是使用{},但dict output是key:value表达式,set output是key表达式