前言
以下内容以知识点为主,无过多需要理解的内容,故本章节采用知识速查的方式进行编辑。
Python 语法基础
Python 赋值
Python 中的变量不需要声明,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
a = 10 # 赋值即用
print(a)
a = 'Hello World!' # 随时指向不用的类型的对象
print(a)
注意: 变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型,因此可以认为变量的类型不固定
Python 赋值-查看对象类型和内存地址
Python 中使用type() 函数查看对象类型。
# 赋值即创建
a = 'Hello World!'
b = 10
print(type(a)) # out:<class 'str'>
print(type(b)) # out:<class 'int'>
Python 中使用id() 函数查看对象地址。
# 变量名称不同,但指向同一个对象,对象地址一样
a = 10
b = 10
print(id(a)) # out:140726450316360
print(id(b)) # out:140726450316360
# 变量名称相同,但先后指向不同对象,对象地址不一样
a = 10
print(id(a)) # out:140726450316360
a = 1
print(id(a)) # out:140726450316072
Python 标识符
简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它 的主要作用就是作为变量、函数、类、模块以及其他对象的名称。
Python标识符要求:
- 标识符是由字母(~ ~A-Z和 a-z)、下划线和数字组成,但第一个字符不能是数字;
- 标识符中不能包含空格、@、% 以及 $ 等特殊字符;
- 标识符不能和 Python 中的保留字相同;
- 标识符对大小写敏感。
# 合法标识符
UserID
name
mode12
user_age
# 不合法标识符
try #try是保留字
4word #不能以数字开头
$money #不能包含特殊字符
@money #不能包含特殊字符
# 大小写敏感:Name与name为两个不同的标识符
Python 保留字
保留字是 Python 语言中一些已经被赋予特定意义的单词,要求开发者在开发程序时,不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。
下面为关键字相关的代码。
import keyword # 导入keyword模块
keyword.kwlist # 输出当前版本Python的所有保留字
keyword.iskeyword('is') # 判断'is'是否为Python的保留字
Python 注释
注释是为了增强代码的可读性,Python中的注释有单行注释和多行注释。
# 这是单行注释,用#
print("Hello, World!") #也可以写在这里
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello, World!")
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("Hello, World!")
Python 数据类型
数字类型(Number)
Python 数字类型用于存储数值的,不可变(指的是内存中的对象内容不可变)。这里的数字类型类似于字面量。
# 定义数字类型
var1 = 123
var2 = 1.23
print(var1,var2)
数字类型(Number)细分
数字类型可以进一步细分为整型、布尔型、浮点型、复数
数字类型细分 | 定义 | 样例 | |
---|---|---|---|
int | 整型 | 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用。分为:二进制、八进制、十进制、十六进制。 | 123, 789 |
bool | 布尔 | 布尔类型是一种特殊的整数类型,仅用来表示两种可能的值:真(True)和假(False)。 | True, False 或 1,0 |
float | 浮点型 | 浮点型由整数部分与小数部分组成,分为:一般表示,指数表示。 | 1.23, 1.23e2 |
complex | 复数 | 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。 | -.6545+1.2j, 4.6j |
数字类型(Number)操作
操作类型 | 操作符 | 说明 |
---|---|---|
算术运算 | x + y | 加法 |
x - y | 减法 | |
x * y | 乘法 | |
x / y | 除法 | |
-x | 负数 | |
abs(x) | 取绝对值 | |
x // y | 除后取整(地板除) | |
x % y | 除后取余 | |
divmod(x,y) | 返回一个包含商和余数额元组 | |
pow(x,y) | 返回x的y次方 | |
x ** y | 返回x的y次方 | |
round(x[,n]) | 方法返回浮点数x的四舍五入 | |
不同数字类型间转换 | int(x) | 转换成整数,注意转化可能会损失进度 |
bool(x) | 转换成布尔型 | |
float(x) | 转换成浮点数 | |
complex(x,y) | 创建一个复数(x, y均为整型或浮点型) | |
c.conjugate() | 返回复数的共轭复数(c为复数变量) |
说明:数字类型除以上基础操作,还有包括数学函数、随机数函数、三角函数等
字符串类型(String)
字符串即一串字符组成,不可变,使用引号包围:
- 单引号
- 双引号
- 三引号(允许字符串跨多行、包含换行符、制表符以及其他特殊字符)
创建字符串很简单,只要为变量分配一个值即可
# 这是单引号
string1='I am Python!'
print(string1)
# 这是双引号
string2="Hello World!"
print(string2)
# 这是三引号
string3='''LiLei:How are you?
HanMeimei:Fine,thank you,and you?'''
print(string3)
字符串类型(String)操作
Python 字符串类型基础操作:
操作类型 | 操作符 | 说明 |
---|---|---|
切片与合并 | string1[0] | 字符串切片,即字符串片段选择。 |
string1[2:4] | ||
string1[:-1] | ||
string1+string2 | 字符串合并 | |
分割与组合 | string1.split(" ") | 字符串分割。 |
'~'.join(string1) | 将序列中的元素以指定的字符连接生成一个新的字符串 | |
剔除与替换 | string1.strip(" ") | 移除字符串头尾指定的字符或字符序列(默认为空格或换行符) |
string1.lstrip(" ") | 移除字符串头(左)指定的字符或字符序列(默认为空格或换行符) | |
string1.rstrip(" ") | 移除字符串尾(右)指定的字符或字符序列(默认为空格或换行符) | |
string1.replace('Python','Java') | 字符串指定字符或字符序列替换 | |
Unicode码互转 | ord('A') | 字符转Unicode码 |
chr(65) | Unicode码转字符 | |
大小写互转 | string1.lower() | 转成小写字符串 |
string1.upper() | 转成大写字符串 |
字符串类型(String)转义字符
在需要在字符中使用特殊字符时,Python 用反斜杠 \ 转义字符。
#转义字符:换行
print('LiLei:How are you?\nHanMeimei:Fine,thank you,and you?')
'''
out:
LiLei:How are you?
HanMeimei:Fine,thank you,and you?
'''
#转义字符:横向制表符
print('LiLei:How are you?\tHanMeimei:Fine,thank you,and you?')
'''
out:
LiLei:How are you? HanMeimei:Fine,thank you,and you?
'''
#转义字符:将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。
print('LiLei:How are you?\rabcde')
'''
out:
abcde:How are you?
'''
列表类型(List)
列表是一个有序的,可修改的(增删改),元素以逗号分隔,以中括号[ ]包围的序列
列表的特点:
- 用来储存多个数据的数据结构
- 储存的数据是有序的,可使用位置索引
- 列表长度和元素都是可变的
- 可储存不同类型的数据
列表类型(List)操作
Python 列表类型基础操作
操作类型 | 操作符 | 说明 |
---|---|---|
索引 | list1[0] | list[index],index从0开始 |
list1[-1] | index为负时从右往左索引 | |
切片 | list1[1:4] | list[start,stop],截取列表中位置start-stop的片段,生成新的列表。 |
list1[2:] | 当start为空时从0开始,当stop为空时取至最后一个。 | |
更新(增删改) | list1.append("广东肇庆") | 在list在增加元素"广东肇庆" |
del list1[2] | 删除list中索引为2的元素 | |
list1[2] = 2023 | 更改list中索引为2的元素的取值为2023 | |
检查成员 | 'Baidu' in list1 | 判断元素是否在列表内 |
'Baidu' not in list2 | 判断元素是否不在列表内 | |
合并、嵌套、重复 | list1 + list2 | 两个列表的元素合并为一个列表 |
[list,list] | 两个列表分别作为新列表的元素 | |
list*3 | 列表元素重复N次作为新列表元素 |
元组类型(Tuple)
元组是一个有序的,不可修改的,元素以逗号分隔,以小括号( )包围的序列。
# 定义元组
tup1 = ('Google', 'Baidu', 1997, 2000)
print(tup1)
# 定义元组,只包含一个元素时,需要在元素后面添加逗号,否则括号会被当成运算符
tup2 = ('Google')
print(type(tup2)) # out: <class 'str'>
# 定义元组
tup3 = ('Google',)
print(type(tup3)) # out: <class 'tuple'>
元组类型(Tuple)操作
元组同样支持索引和切片、合并操作,但不能增删改。
# 元组索引
tup1[0]
# 元组切片
tup1[1:]
# 元组合并
tup1+tup3
拓展:如果元组不能修改,以下元组重复赋值,会报错吗?
tup = ('Google', 'Baidu', 1997, 2000)
tup = (1, 2, 3, 4)
编者注:以上代码不会报错,实际上元组并没有发生改变。对于Python来说,变量更像是给一块内存取名字,而这个名字正是变量。而在这个实例当中,元组就是那一块内存。tup这个名字从一块内存指向了另一块内存,而内存本身是没有发生变化的。若==('Google', 'Baidu', 1997, 2000)==没有被分配其他的变量名,则会被丢弃(Python中的垃圾收集器会负责处理不再引用的对象的内存释放)。
字典类型(Dictionary)
字典是一种可变容器模型,且可以键值对形式,存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 { } 中 。
# 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中
dic = {'name': 'Baidu', 'likes': 123, 'url': 'www.baidu.com'}
print(dict)
字典类型(Dictionary)操作
字典内容按键访问,支持增加键对、删除键对,改变值
两个重要的点需要记住:
- 创建时如果同一个键被赋值两次,以最后一个为准
- 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
# 字典按键访问,如果用字典里没有的键访问数据,就会报错
dic['name']
# 向字典添加新内容的方法是增加新的键/值对
dic['country']='china'
print(dic)
# 修改已有键/值对
dic['name']='百度'
print(dic)
# 删除已有键/值对
del dic['country']
print(dic)
字典类型(Dictionary)操作方法汇总
字典常用方法如下
序号 | 方法 | 描述 |
---|---|---|
1 | radiansdict.clear() | 删除字典内所有元素 |
2 | radiansdict.copy() | 返回一个字典的浅复制 |
3 | radiansdict.fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | radiansdict.get(key, default=None) | 返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
5 | key in dict | 如果键在字典dict里返回true,否则返回false |
6 | radiansdict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
7 | radiansdict.keys() | 返回一个键迭代器,可以使用 list() 来转换为列表 |
8 | radiansdict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | radiansdict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
10 | radiansdict.values() | 返回一个迭代器,可以使用 list() 来转换为列表 |
11 | pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则, 返回default值。 |
12 | popitem() | 随机返回并删除字典中的最后一对键和值。 |
# 定义字典
dic = {'name': 'Baidu', 'likes': 123, 'url': 'www.Baidu.com'}
print(dic)
# 如果键在字典dict里返回true,否则返回false
'name' in dic
##获取字典键值对
dic = {'name': 'Baidu', 'likes': 123, 'url': 'www.Baidu.com'}
for keys,value in dic.items():
print(keys,value)
##获取字典键
for keys in dic.keys():
print(keys)
##获取字典值
for values in dic.values():
print(values)
## 清空字典
dic.clear()
print(dic)
集合类型(Set)
集合是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合。
# 定义集合set,结果说明无序的不重复元素序列
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)
拓展:定义为空的集合是什么类型?
# 以下定义空的数据类型,是什么类型?
basket = {}
type(basket) # out: <class 'dict'>
集合类型(Set)操作方法汇总
集合常用方法如下:
序号 | 方法 | 描述 |
---|---|---|
1 | add() | 为集合添加元素,将字符串当做整体追加在集合中 |
2 | update() | 给集合添加元素,将字符串中的拆分成字符进行追加 |
3 | clear() | 移除集合中的所有元素 |
4 | copy() | 拷贝一个集合 |
5 | difference() | 返回多个集合的差集 |
6 | difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
7 | discard() | 删除集合中指定的元素 |
8 | intersection() | 取两个集合的相同元素生成新的集合,原来的两个集合不变。 |
9 | intersection_update() | 取两个集合的相同元素,覆盖原来被函数操作的集合。 |
10 | isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
11 | issubset() | 判断指定集合是否为该方法参数集合的子集。 |
12 | issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
13 | pop() | 随机移除元素 |
14 | remove() | 移除指定元素 |
15 | symmetric_difference() | 返回两个集合中不重复的元素集合。 |
16 | symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
17 | union() | 返回两个集合的并集 |
# 集合添加元素,add把新增的元素整个加进元组
x='cat'
basket.add(x)
print(basket)
# 集合添加元素,update把新增的元素拆成单个字符后再加进元组
y='ddd'
basket.update(y)
print(basket)
# 集合移除元素:remove
basket.remove('cat')
print(basket)
# 随机删除集合中的一个元素
basket.pop()
print(basket)
# intersection()函数取两个集合的相同元素生成新的集合。原来的两个集合不变。
set1 = {1,2,3,40,50,60}
set2 = {40,50,60,7,8,9}
set_new = set1.intersection(set2)
print(set1) # out: {1, 2, 3, 50, 40, 60}
print(set2) # out: {50, 7, 40, 8, 60, 9}
print(set_new) # out: {40, 50, 60}
# intersection_update()函数取两个集合的相同元素,覆盖原来被函数操作的集合。
set1 = {1,2,3,40,50,60}
set2 = {40,50,60,7,8,9}
set_new = set1.intersection_update(set2)
print(set1) # out: {40, 50, 60}
print(set2) # out: {50, 7, 40, 8, 60, 9}
print(set_new) # out: None
Range类型
range类型,一段不可变的数字序列,经常被用作for里面来指定循环次数
创建range对象语法:range(start,stop,step)
其中start是开始值(包含,默认为0)、stop是结束数值(不包含)、step是步长(默认是1)
序号 | range对象 | 序列 |
---|---|---|
1 | range(4) | 0,1,2,3 |
2 | range(1,4) | 1,2,3 |
3 | range(1,4,2) | 1,3 |
4 | range(4,1,-1) | 4,3,2 |
Range类型操作
range类型同样支持索引和切片操作,但不能增删改、合并等修改元素操作。
序号 | 切片 | 结果 |
---|---|---|
1 | x[1:3] | range(1,3) |
2 | x[-3:-1] | range(7,9) |
3 | x[:4] | (0,4) |
4 | x[6:] | (6,10) |
5 | x[1:6:2] | range(1,6,2) |
6 | x[-8 : -1 : 3] | range(2,9,3) |
7 | x[6:1:-2] | range(6,1,-2) |
8 | x[-1:-8:-3] | range(9,2,-3) |
数据类型转换
对数据内置的类型进行转换,数据类型的转换,只需将数据类型作为函数名即可。
序号 | 方法 | 描述 |
---|---|---|
1 | int(x [,base]) | 将x转换为一个整数 |
2 | float(x) | 将x转换到一个浮点数 |
3 | complex(real [,imag]) | 创建一个复数 |
4 | str(x) | 将对象 x 转换为字符串 |
5 | repr(x) | 将对象 x 转换为表达式字符串 |
6 | eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
7 | tuple(s) | 将序列 s 转换为一个元组 |
8 | list(s) | 将序列 s 转换为一个列表 |
9 | set(s) | 转换为可变集合 |
10 | dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
11 | frozenset(s) | 转换为不可变集合 |
12 | chr(x) | 将一个整数转换为一个字符 |
13 | ord(x) | 将一个字符转换为它的整数值 |
14 | hex(x) | 将一个整数转换为一个十六进制字符串 |
15 | oct(x) | 将一个整数转换为一个八进制字符串 |
## 整型转字符串
intx = 123
strx = str(intx)
print(type(strx))
## 字符串整型转
strx = '123'
intx = int(intx)
print(type(intx))
# eval(str),用来计算在字符串中的有效Python表达式,并返回一个对象
s = "1+2"
eval(s)
## 函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式。
strx = 'abc'
eval(repr(strx))
## dict()创建一个字典。d 必须是一个 (key, value)元组序列。
d = [('name','Baidu'), ('likes',123), ('url', 'www.Baidu.com')]
dict(d)
## 定义列表l,使用dict转换为字典
l = [("姓名","张三"),("学号","2018088947"),("年级","2018"),("年龄",19),("性别","男"),("生源地","中国重庆")]
dict(l)
评论区