认识 Python
Python 的几个核心特点:
- 动态强类型
- 通用型语言
- 解释型语言
- 风格优雅、语法简单、语义明确

数据类型


可以通过 dir() 查看模块包含的属性和方法,通过 help() 查看函数的使用说明:
import math
dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
help(math.sin)
Help on built-in function sin in module math:
sin(x, /)
Return the sine of x (measured in radians).

以下值在布尔上下文中都会被视为假值:None, 0, '', (), [], {}。

控制流

字符串
字符串支持切片和丰富的内建方法:
a = "ilovepython"
print(a[1:3]) # 从下标 1 开始,截取长度为 len 的子串
print(a[-1:]) # 取最后一个字符
print(a[-2:-1]) # 倒数第二个字符
print(a[0:-1:1]) # 去掉最后一个字符
print(a[::-1]) # 倒序输出:nohtypevoli
# 常用内建方法
print(a.replace("i", ")")) # )lovepython
print(a.split("o")) # ['il', 'vepyth', 'n']
print("*".join(["hello", "world"])) # hello*world
# a.join(b):将列表 b 的各元素用 a 连接成一个字符串

f-string 格式化:
print(f"my name is {a}")
# my name is ilovepython

列表

列表拷贝


列表推导式

一个利用列表推导式做凯撒解密的例子:
s = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
print("".join([chr((ord(ch) - ord('a') + 2) % 26 + ord('a')) if ch >= 'a' and ch <= 'z' else ch for ch in s]))
元组

遍历
enumerate 可以指定下标起点:

while 循环

字典(dict)


字典的常见操作:
d["b"] # 键不存在时抛出异常
d.get("a") # 键不存在时返回 None,更安全
d.keys() # ["a", "b", 1]
d.values() # ["avalue", "bvalue", "1value"]
d.items() # [("a", "avalue"), ("b", "bvalue"), (1, "1value")]
d.pop("a") # 删除键 a 对应的键值对
d.update(d1) # 用 d1 合并 / 更新当前字典
集合(set)



文件

推荐使用 with open() as f 语法,可以自动关闭文件,无需手动调用 close()。
CSV 文件


JSON



自定义 JSON 序列化
对于自定义对象,默认无法直接序列化:

dump 时通过 default 参数指定编码函数:

load 时通过 object_hook 参数指定解码函数:

函数

参数传递


可变参数



函数式编程

例如,使用匿名函数作为 filter 的过滤条件:

其他常见用法:

常用模块
os, time, datetime, collections, itertools



