【廖雪峰Python教程】
参考资料[廖雪峰教程](Python教程 - 廖雪峰的官方网站 (liaoxuefeng.com))
一、Python 基础
- 输入和输出
-
input()
-
可以显示一个字符串来提示用户
-
name = input('please enter your name: ') print('hello,', name)
-
易错:
input()
返回的数据类型是str
,str
不能直接和整数比较,若想比较必须先把str
转换成整数,例如int()。
-
-
print()
-
接受多个字符串,用逗号“,”隔开,就可以连成一串输出(遇到逗号“,”会输出一个空格)
-
>>> print('The quick brown fox', 'jumps over', 'the lazy dog') The quick brown fox jumps over the lazy dog
-
- 数据类型和变量
-
转义字符
\
可以转义很多字符,比如\n
表示换行,\t
表示制表符,字符\
本身也要转义,所以\\
表示的字符就是\
- 用
r''
表示''
内部的字符串默认不转义
- 用
-
用
'''可换行的内容'''
的格式表示多行内容- 出现
...
是提示符,提示你可以接着上一行输入
- 出现
-
空值是Python里一个特殊的值,用
None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。 -
Python程序是大小写敏感的,在Python中,通常用全部大写的变量名表示常量
-
//
除法取整数,%
取余数
- 字符串和编码
-
字符串有个
replace()
方法:a = ‘abc’,a.replace(‘a’, ‘A’)-
>>> b 'Abc' >>> a 'abc'
-
对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
-
- 使用list和tuple
-
list是一种有序的集合,可以随时添加和删除其中的元素。
-
list元素也可以是另一个list,比如:
-
s = ['python', 'java', ['asp', 'php'], 'scheme']
-
要拿到
'php'
可以s[2][1]
,s
可以看成是一个二维数组
-
-
tuple和list非常类似,但是tuple一旦初始化就不能修改。注意:但是tuple中的元素如果有列表X,那么X中的元素仍然可以改变,只要保证tuple对应的元素列表仍然指向x即可。
-
tuple元组的定义方式
-
t = () #空元组 t = (1,) #只含一个元素,注意:此时必须加逗号,不然有歧义会被认定为数值1加了圆括号 t = ('a', 'b', ['A', 'B']) #定义多个元素
-
- 条件判断
-
当语句以冒号
:
结尾时,缩进的语句视为代码块-
age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid')
-
- 模式匹配
-
用
if ... elif ... elif ... else ...
判断时,会写很长一串代码,可读性较差,可以使用match
语句。-
可以且仅能在最后加一个
case _
表示“任意值” -
match score: case 'A': print('score is A.') case 'B': print('score is B.') case 'C': print('score is C.') case _: # _表示匹配到其他任何情况 print('score is ???.')
-
-
可以匹配多个值、匹配一定范围,并且把匹配后的值绑定到变量
-
age = 9 match age: case x if x < 10: # 表示当age < 10成立时匹配,且赋值给变量x print(f'< 10 years old: {x}') case 10: # 仅匹配单个值 print('10 years old.') case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18: # 能匹配多个值,用|分隔。 print('11~18 years old.') case 19: print('19 years old.') case _: print('not sure.')
-
- 循环
-
左闭右开range函数
range(101)
就可以生成0-100的整数序列- range(2, 7)输出: 2, 3, 4, 5, 6
- range(1, 10, 2)输出: 1, 3, 5, 7, 9
- numbers = list(range(5))输出: [0, 1, 2, 3, 4]
-
for循环
-
while循环
- 只要条件满足,就不断循环,条件不满足时退出循环
break
语句可以提前结束循环continue
语句可以跳过本轮循环,循环内剩下的语句不再执行,直接开始下一次循环while b
表示当b
的值非零(不为假)时,循环将一直执行,直到b=0退出循环。
-
程序陷入“死循环”时,可以用
Ctrl+C
退出程序 -
循环相关用法:
- 元组解包(tuple unpacking)
- Python 中一种常见的交换变量值的写法,例如:a, b = b, a % b
- 等号两边分开看且分别对应,即为一组a,b 一组(b, a % b)。具体步骤:
- 计算
a % b
,得到余数。 - 创建一个包含两个元素的元组
(b, a % b)
。 - 将元组中的值按顺序分别赋给左侧的变量
a
和b
。
- 计算
- 即,余数给b,再把之前的b给a。这个等于号相当于两步赋值同时发生,避免了将余数给b后,需要前一步的b赋值给a时b已经改变的尴尬。
- 等号两边分开看且分别对应,即为一组a,b 一组(b, a % b)。具体步骤:
- Python 中一种常见的交换变量值的写法,例如:a, b = b, a % b
- 元组解包(tuple unpacking)
- 使用dict(字典,在其他语言中也称为map)和set
-
❗字典方法使用前提:dict的key必须是不可变对象。
- 在Python中,字符串、整数等都是不可变的,而list是可变的,就不能作为key
- 通过key计算位置的算法称为哈希算法(Hash)。
-
注意:返回
None
的时候Python的交互环境不显示结果。 -
dict内部存放的顺序和key放入的顺序是没有关系的。键值对是固定的。
-
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
-
操作
- 删除一个key,对应的value也会从dict中删除: d.pop(‘Bob’)
-
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
-
set和dict类似,也是一组key的集合,但不存储value。
-
由于key不能重复,所以,在set中,没有重复的key。
-
要创建一个set,需要提供一个list作为输入集合(重复元素在set中自动被过滤):
>>> s = set([1, 2, 3]) >>> s {1, 2, 3}
-
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
-
>>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s1 & s2 #交集 {2, 3} >>> s1 | s2 # 并集 {1, 2, 3, 4}
-
-
操作
- 添加:s.add(4)
- 删除:s.remove(4)
-
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
💡对比
- 需要注意的是,
list
、tuple
、dict
和set
是不同的数据类型,它们之间不能直接进行转换。如果需要将它们之间进行转换,需要使用相应的转换函数,如list()
、tuple()
、dict()
和set()
。
数据类型 | 属性 | 表示方法 | 示例 | 操作 | 特殊 |
---|---|---|---|---|---|
list (列表) | 有序的可变序列 | [] 和, | L=[1,2,3] | 索引、切片、添加、删除、修改 | |
tuple (元组) | 有序的不可变序列 | [] 和, | t=(1,2,3) | 索引、切片等操作 不支持添加、删除、修改 | 存储不可变的数据,如坐标、颜色等。 |
dict (字典) | 无序的键值对集合 | {} 每个键值对之间用 : 键值对之间用 , | d={'张三':1, ’王五':2, '赵六':3} | 通过键来访问值,也支持添加、删除、修改 | 存储具有映射关系的数据,如姓名和电话号码的对应关系。 |
set (集合) | 无序的元素集合 | {} 和, | s={1,2,3} | 支持添加、删除、交集、并集、差集 | 通常用于去重、交集、并集等操作。 |