1. 基础语法
1.1 基本数据类型
-
支持
int float bool complex
四种数字类型; -
bool
类型为True False
,首字母大写; -
bool
是int
的子类,True==1
和False==0
都会返回True
; -
字符串可以用单引号或双引号括起来
'string1' "string2"
,其中使用\
表示转义字符; -
原始字符串(
raw string
)通过r
或R
前缀声明:str = r'haha\n'
,原始字符串中转义字符失效; -
字符串可以左闭右开进行切片(
slice
):str[ start:end:step ]
,但不能改变:str[0] = 'a'
语句将导致错误; -
字符串索引:从左往右是
0
开始,从右往左是-1
开始; -
列表
List
类型用方括号声明:list = [ 'abcd', 123, 23.4, 3+3j ]
;一个list
中可以包含多种数据类型;List
的元素是可变的; -
元组
Tuple
采用圆括号声明:tuple = ('abcd', 12, 23.4)
,和List
类似,但元素整体不可变,不过元素本身可以是可变的,如以List
作为元素; -
集合
Set
采用大括号声明:set = {val1, val2, val3}
,但空集合要使用set()
函数创建:emptySet = set()
; -
集合可以进行运算:
a = { 'a', 'b', 'c' }; b = { 'a', 'c', 'd' } a | b # 并集 a - b # 差集 a & b # 交集 a ^ b # 不同时存在的元素集合
-
字典
Dictionary
采用大括号进行声明,存储无序的键(key
)值(value
)对:dict = { 'name': 'Tom', 'friend': 'Jerry', 'age': 10}
;创建空字典采用{}
,所以集合不能用{}
创建空集;字典的键必须是不可变类型,且不能重复,所以int
也可以作为键; -
字典基础函数:
keys、values、items、clear、pop
分别用来获取所有键、获取所有值、获取键和值、清空字典、删除某个键值对; -
各基础数据类型的构造函数:
a = 1; b = 1.0; c = 'haha'; d = 3+4j; list = ['a', 1, 2, 3] set = {'a', 'b', 3, 4} dict = {1:1, 2:2, 3:3} tuple = ('a', 'b', 'c', 1, 2, 3, True)
1.2 运算符
- 乘方运算符:
**
- 浮点数除法:
/
- 整数除法:
//
- 字符串、列表复制:
2 * str
,将str
复制2次 - 逻辑运算符:
and 或 not
- 包含运算符:
in 或 not in
- 判断2个标识符引用自同一个对象:
is 或 is not
1.2 逻辑控制语句
-
while
循环,条件成立时循环执行while
语句块,条件不成立时执行一次else
语句块。注意while
和else
的语句后都有冒号:
while expr : <statements> else: <statements>
-
for
循环,与while
类似:b = [1, 2, 3, 4] for x in range(len(b)): <statements> else: <statements>
-
可以通过
break
直接跳出循环,也可通过continue
跳过本次循环; -
pass
语句不执行任何功能,仅作为占位符使用;
1.3 推导式
推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
字典、列表、元组、集合都可以用推导式语法来创建新对象。
基本推导式语法为:表达式 for 变量 in 列表 if 条件
,如
py # 从names中,挑选长度>3的元素,并将其转为大写 new_names = [name.upper()for name in names if len(name)>3]
其中:
- 表达式指明了元素的创建语法;
- 变量是从源数据对象中获取的元素、键、值等;
- 将推导式采用
() [] {}
括起来就可以创建元组、列表、集合/字典,最后二者的区分靠表达式,字典的表达式需要提供为key_expr : value_expr
;
1.4 迭代器与生成器
对序列类型,可以使用迭代器进行遍历,基本方法为:iter(list)
创建迭代器,next(iter)
获取下一个元素:
a = [1, 2, 3, 4, 5, 6]
for x in iter(a): # 效果与 for x in a: 一致
print(x)
创建一个迭代器需要在类中实现两个方法 __iter__()
与 __next__()
:
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration # 表明迭代结束
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
在python
中,使用了yield
语句的函数被称为生成器,
1.5 常用函数
-
print(a, b, c, d)
打印内容;end
参数指定分隔符,默认分隔符为\n
; -
type(a)
获取变量的数据类型,如a = 1;type(a)
结果为<class 'int'>
;不会认为子类是一种父类类型; -
len(x)
获取长度; -
range(start, end, step)
生成整数序列;range(len(x))
生成x
的索引序列; -
isinstance(a, int)
判断a
是不是int
的一个实例;会认为子类是一种父类类型;# 由于bool是int的子类,所以有以下结果 a = True type(a) == int # False isinstance(a, int) # True
-
数据类型强制转换:
# 4种基本数据类型 int(x); float(x); str(x); complex(x); # 列表,元组,集合,字典 list(x); tuple(x); set(x); dict(x); chr(x) # 整数转字符 ord(x) # 字符转整数 hex(x) # 整数转16进制字符串 oct(x) # 整数转8进制字符串
-
lambda
函数:只能写一行的匿名函数# x 为一个lambda函数,abc为传入参数,: 后面的表达式为返回值 x = lambda a, b=2, c=3 : a+b*2+c*3
-
dir(moduleName)
返回模块中定义的所有名称;顺便一提:模块就是源文件,import module
就是提供源文件的文件名,不用带py
后缀;
1.6 文件处理
- 通过
f = open(fileName, mode)
读取文件,mode
常用的为:只读r
,只写w
,追加a
; f.read()
读取内容,f.write()
写入内容,f.close()
关闭文件,f.readlines()
读取多行;- 为防止打开后运行出错等,导致忘记关闭文件,可以使用
with
,来保证文件的关闭:
with open('1.txt', 'r') as f:
# 处理代码
1.7 异常处理
关键字有:try except else finally
抛出异常关键字:raise Exception()
,只能抛出Exception
或其子类的异常对象。
2. 常见问题解决
-
VsCode
中Ctrl+Alt+N
运行Python
文件,print
输出中文为乱码?添加环境变量:变量名 =
PYTHONIOENCODING
, 变量值 =UTF-8
-
pip
安装软件很慢,可以使用国内镜像源,如清华pypi源,使用办法:# 需要使用 pip 10.0.0 以上版本,如果版本过低,可以 # pip install pip -U pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple