Python 语言简介
变量
变量类型
- int: 二进制 (0b100); 八进制 (0o100); 十六进制 (0x100); 十进制 (100)
- float: 数学写法 (123.456); 科学计数法 (1.23456e2)
- str: ‘’; “”
- bool: True; False
变量命名
- 惯例 1:受保护的变量通常用单个下划线开头
- 惯例 2:私有的变量通常用两个下划线开头
操作变量方法
- type(a): 检查类型
<class 'int'>
- iint(): 将一个数值或字符串转换成整数,可以指定进制
- float(): 将一个字符串转换成浮点数
- str(): 将指定的对象转换成字符串形式,可以指定编码方式
- chr(): 将整数转换成对应的字符串
- ord(): 将字符串转换成对应的整数
运算符
运算符 | 描述 |
---|---|
[] 、[:] |
索引、切片 |
** |
幂 |
~ 、+ 、- |
按位取反、正号、负号 |
* 、/ 、% 、// |
乘、除、模、整除 |
+ 、- |
加、减 |
>> 、<< |
右移、左移 |
& |
按位与 |
^ 、丨 |
按位异或、按位或 |
<= 、< 、> 、>= |
小于等于、小于、大于、大于等于 |
== 、!= |
等于、不等于 |
is 、is not |
身份运算符 |
in 、not in |
成员运算符 |
not 、or 、and |
逻辑运算符 |
= 、+= 、-= 、*= 、/= 、%= 、//= 、**= 、&= 、丨= 、^= 、>>= 、<<= |
赋值运算符 |
- 算数运算符
- 赋值运算法
- 海象运算符
Python 3.8 中引入了一个新的赋值运算符
:=
, 将运算符右侧的值赋值给左边的变量,与赋值运算符不同的是,运算符右侧的值也是整个表达式的值1
2print((a := 10)) # 10
print(a) # 10
- 海象运算符
- 比较运算符
- 逻辑运算符
格式化
%s
格式1
print('%.1f千米 = %.1f米' % (m, n))
%s
, 表示str
类型变量;%d
, 表示int
类型变量;%f
, 表示float
类型变量。.1
表示一位小数
f-string
格式1
2
3
4
5
6
7
8
9print(f'{m:.1f}千米 = {n:.1f}米')
print(f'The number {number:0>5d} is padded with zeros.') # 左填充零,宽度为 5
name = "Charlie"
message = f"""
Hello, {name}!
Welcome to our website.
"""
print(message)- 指定格式:
:.xf
表示保留x
位小数;:.x%
表示百分比格式;:.xe
表示科学计数法;:,
表示逗号隔开 - 填充和对齐:
0>5d
, 左填充零,宽度为 5;<5d
, 左对齐,宽度为 5;^5d
, 居中对齐,宽度为 5 - 多行f-string: 使用三引号 (‘’’ 或 “””) 定义字符串
- 指定格式:
分支
if / elif / else
match / case
1 | match code: |
循环
for-in
1 | for _ in range(10): |
- range(start, end, step): 区间
[start, end)
, step 步长
while
列表
创建列表
1 | # 直接定义 |
列表运算
1 | baseList1 = [1, 2, 3] |
列表方法
- append(): 添加到最后一个
- remove(): 删除元素,多个元素只会删除第一个匹配到的元素
- pop(): 默认删除列表中的最后一个元素,也可以给一个位置,删除指定位置的元素,并返回
- del 关键字: 删除位置元素
- clear(): 清空
- index(ele, start, end): 查找元素索引,可选 start end,查找的起始结束位置
- count(): 统计元素在列表中出现的次数
- sort(cmp=None, key=None, reverse=False): 排序
- reverse(): 反转
列表生成式
列表生成式创建简单,性能也会优于循环操作。Python 解释器的字节码指令中有专门针对生成式的指令 (
LIST_APPEND
指令);而for循环是通过方法调用 (LOAD_METHOD
和CALL_METHOD
指令)的方式为列表添加元素,方法调用本身就是一个相对比较耗时的操作
1 | # 创建一个取值范围在 1 到 99 且能被 3 或者 5 整除的数字构成的列表 |
元组
元组是不可变类型,其他方法基本和 list 一致
- 定义一元组需要加一个逗号,避免和 () 字面量冲突
1 | a = () |
打包和解包
解包操作要求元素个数和变量个数严格对应,否则会报错
*
变量解包余下的值,此变量会输出一个列表
解包语法对所有可序列的都成立,比如列表、range()、字符串等
1 | # 打包操作 |
变量交换
对于两个或三个变量,交换操作直接使用
ROT_TWO
、ROT_THREE
指令实现;对于多个变量交换,需要借助打包解包的方式实现
1 | a, b = b, a |
tuple vs list
- tuple 不可变,更适合多线程环境,减少并发访问变量的同步开销
不可变类型的创建花销明显优于可变类型。可以使用
timeit
模块进行测试1
2
3
4import timeit
print('%.3f 秒' % timeit.timeit('[1, 2, 3, 4, 5, 6, 7, 8, 9]', number=10000000)) # 0.740 秒
print('%.3f 秒' % timeit.timeit('(1, 2, 3, 4, 5, 6, 7, 8, 9)', number=10000000)) # 0.118 秒- 相互转换: list(),tuple()
字符串
字符串表示
\
: 转义r
、R
: 原始字符串- 进制及 Unicode 编码
1 | s1 = 'hello, world!' |
字符串运算
+
、*
: 拼接、重复in
、not in
: 包含[]
、[:]
: 切片ord()
: 获取字符编码进行比较
字符串方法
大小写
- capitalize(): 首字母大写
- title(): 每个单词首字母大写
- upper(): 大写
- lower(): 小写
查找
- find(str, start=0): 查找,返回索引,失败返回 -1
- index(str, start=0): 查找,返回索引,失败报错
- rfind(): 逆向查找
- rindex(): 逆向查找
性质判断
- startswith()
- endswith()
- isdigit(): 完全由数字构成
- isalpha(): 完全由字母构成
- isalnum(): 由字母和数字构成
格式化
- center(width, fillchar): 居中
- ljust(width, fillchar): 左对齐
- rjust(width, fillchar): 右对齐
- zfill(width): 左侧填充零,保留正负号的位置。print(‘-33’.zfill(5)) # -0033
修剪
- strip(char): 修剪左右两端指定字符,默认空格
- lstrip()
- rstrip()
集合
集合运算
1 | set1 = {1, 2, 3, 4, 5, 6, 7} |
集合方法
- add()
- discard(): 删除
- remove(): 删除,不存在报错
- pop(): 随机删除一个元素并返回
- clear()
- isdisjoint(): 判断两个集合是否有相同元素
frozenset
简单理解为不可变的 set,拥有相同的方法
字典
创建字典
1 | # dict 构造器 |
字典方法
- get(key, defaut=None): 获取,获取不到则返回默认值
- keys(): 键列表
- values(): 值列表
- items(): 键值元组列表
- update()、
|
: 合并字典 - pop(): 删除,返回键对应的值,键不存在报错
- popitem(): 删除,返回键值的元组
- clear()
函数
参数
强制位置参数:
/
之前的参数只能按照参数位置来接收参数; 关键字参数:*
之后的参数只能通过 “参数名=参数值” 的方式来传递和接收参数
1 | def func(a, b, /, c, *, d): |
可变参数:
*args
表示 args 可以接收0个或任意多个参数,args 会组装成一个元组;*kwargs
表示 kwargs可以接收0个或任意多个关键字参数,kwargs 会组装成一个字典
1 | def func(*args, **kwargs): |
内置函数
函数应用
高阶函数
Lambda函数
偏函数
固定函数的某些参数,生成一个新的函数。使用
functools
模块的partial
函数来创建偏函数
1 | import functools |
装饰器
1 | import random |
带参数的装饰器,
lru_cache
装饰器缓存函数执行结果
1 | from functools import lru_cache |
class
__init__
1 | class Point: |
__slots__
限制类添加动态属性
1 | class Student: |
staticmethod
声明静态方法
1 | class Person(obj): |
classmethod
声明类方法,第一个参数为类对象本身
1 | class Person(obj): |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Nanyin の 小屋!
评论