分支条件
if
for
while
数据结构
元组(Tuple)
元组(tuple)是一种序列(sequence)结构,而且是一种不可变序列。
创建元组
1
2
3
4
5
6
7
8
9
10
11
12
13
res = ()
res = tuple()
res = tuple([])
res = (1,)
res = 1, 2, 3, 4, 5, "a", "b", "c", "d", "e"
res = (1, 2, 3, 4, 5, "a", "b", "c", "d", "e")
res = tuple([1, 2, 3, 4, 5, "a", "b", "c", "d", "e"])
访问元组
1
2
3
4
5
6
item = res[0]
item = res[0:5]
# 拆包操作
item1, item2, item3, item4, item5, *item6 = res
遍历元组
1
2
3
4
5
for item in res:
print(item)
for i, item in enumerate(res):
print("{0} - {1}".format(i, item))
列表(List)
列表(List)也是一种序列结构,与元组不同,列表具有可变性,可以追加、插入、删除和替换列表中的元素。
创建列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
res = []
res = list()
res = list([])
res = [1]
res = [1, 2, 3, 4, 5, "a", "b", "c", "d", "e"]
res = list((1, 2, 3, 4, 5, "a", "b", "c", "d", "e"))
res = list([1, 2, 3, 4, 5, "a", "b", "c", "d", "e"])
res = [0] * 10
访问列表
1
2
3
4
5
6
item = res[0]
item = res[0:5]
# 拆包操作
item1, item2, item3, item4, item5, *item6 = res
操作列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 追加元素
res.append(6)
res.extend([7, 8])
res += ["f", "g", "h"]
# 插入元素
res.insert(13, 10)
# 替换元素
res[13] = 9
# 删除元素
res.remove(9) # 按照元素删除
res.pop(12) # 按照索引删除,并返回该索引上元素的值
res.pop() # 如果没有索引则删除最大索引的元素
遍历列表
1
2
3
4
5
for item in res:
print(item)
for i, item in enumerate(res):
print("{0} - {1}".format(i, item))
列表推导式
1
new_list = [x**2 for x in range(10) if x > 1 if x < 5]
集合(Set)
集合(set)是一种可迭代的、无序的、不能包含重复元素的数据结构。
创建集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 可变集合
res = {}
res = set()
res = {1, 2, 3, 4, 5}
res = set((1, 2, 3, 4, 5))
res = set([1, 2, 3, 4, 5])
# 不可变集合
res = frozenset()
res = frozenset((1, 2, 3, 4, 5))
res = frozenset([1, 2, 3, 4, 5])
res = frozenset({1, 2, 3, 4, 5})
操作集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 添加元素
res.add("a")
# 删除元素
res.remove("a") # 如果元素不存在会报错
res.discard("a") # 如果元素不存在不会报错
res.pop() # 随机删除一个元素并返回元素值
# 清除集合
res.clear()
遍历集合
1
2
3
4
5
for item in res:
print(item)
for i, item in enumerate(res):
print("{0} - {1}".format(i, item))
集合推导式
1
new_set = {x % 2 for x in range(10) if x > 1 if x < 8}
字典(Dictionary)
字典(dict)是可迭代的,可变的数据结构,通过键来访问元素。
创建字典
1
2
3
4
5
6
7
8
9
10
11
12
13
res = dict()
res = {1: "a"}
res = dict(((1, "a"),))
res = dict([(1, "a")])
res = dict({1: "a"})
res = dict(zip([1, 2, 3], ["a", "b", "c"]))
res = dict(a = 1, b = 2, c = 3)
访问字典
1
2
3
4
5
6
7
8
9
10
11
res["a"]
res.get("a")
res.get("a", "DEFAULT_VALUE")
res.keys()
res.values()
res.items()
操作字典
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 增加键值对
res["d"] = 5
# 修改键值对
res["d"] = 4
# 删除键值对
del res["d"]
res.pop("d")
res.pop("d", "DEFAULT_VALUE")
res.popitem()
遍历字典
1
2
3
4
5
6
7
8
for key, value in res.items():
print("{0} - {1}".format(key, value))
for key in res.keys():
print(key)
for value in res.values():
print(value)
字典推导式
1
2
3
res = {1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
new_dict = {k*2: v*2 for k, v in res.items() if k < 4}
函数
可变参数
1
2
3
4
5
6
7
8
def fun(*args, **kwargs):
for arg in args:
print("One of *args is {arg}".format(arg=arg))
print()
for key, value in kwargs.items():
print("One of **kwargs is {key} - {value}".format(key=key, value=value))
fun("arg1", "arg2", "arg3", "arg4", "arg5", key1="value1", key2="value2", key3="value3", key4="value4", key5="value5")
常用模块
datetime
datetime 模块中提供了以下几个类:
datetime: 包含日期和时间
date: 包含日期
time: 包含时间
timedelta: 计算时间跨度
tzinfo: 时区信息
1
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
31
32
import datetime
datetime.datetime(2019, 11, 4, 23, 59, 59, 1000)
datetime.datetime.today()
datetime.datetime.now()
datetime.datetime.utcnow()
datetime.datetime.fromtimestamp(1572883199.001)
datetime.datetime.utcfromtimestamp(1572883199.001)
datetime.date(2019, 11, 4)
datetime.time(23, 59, 59, 1000)
# 日期时间计算
dt = datetime.datetime(2019, 11, 4, 23, 59, 59, 1000)
delta = datetime.timedelta(weeks=1,days=1)
dt += delta
# 日期格式化
dt = datetime.datetime.today()
dt.strftime('%Y-%m-%d %H:%M:%S.%f')
datetime.datetime.strptime(dt_str,'%Y-%m-%d %H:%M:%S.%f')
logging
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import logging
import logging.config
# 配置文件设置
logging.config.fileConfig("log.conf")
# 如果有了配置文件则不需要以下配置
logging.basicConfig(level=logging.ERROR,
filename='logging.log'
)
logger = logging.getLogger(__name__)
logger.debug("This is DEBUG log.")
logger.info("This is INFO log.")
logger.warning("This is WARNING log.")
logger.error("This is ERROR log.")
logger.critical("This is CRITICAL log.")
配置文件设置
1
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
31
32
[loggers] # 配置日志器
keys=root,simpleExample # 日志器包含了 root 和 simpleExample
[logger_root] # 配置根日志器
level=DEBUG
handlers=consoleHandler # 日志器对应的处理器
[logger_simpleExample] # 配置 simpleExample 日志器
level=DEBUG
handlers=fileHandler # 日志器对应的处理器
qualname=logger1 # 日志器名字
[handlers] # 配置处理器
keys=consoleHandler,fileHandler # 包含了两个处理器
[handler_consoleHandler] # 配置 consoleHandler 日志器
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_fileHandler] # 配置 fileHandler 日志器
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('test.log','a')
[formatters] # 配置格式化器
keys=simpleFormatter # 日志器包含 simpleFormatter
[formatter_simpleFormatter] # 配置 simpleFormatter 格式化器
format=%(asctime)s-%(levelname)s-%(message)s