Python笔记
安装python
官网
基础语法
设置编码方式
注释
单行注释:
多行注释: 三个单引号
'''
多行注释
'''
输出语句
语法
print()
默认以\n结尾
可以自定义结尾
print(’’, end=’’)
print()
print(1)
print('字符串')
print("字符串")
print(3+1)
fp = open('C:/Users/WZF/PycharmProjects/pythonProject/test.txt','a+')
print('hello word',file=fp)
fp.close()
print('hello', 'word', '!')
保留关键字
import keyword
print(keyword.kwlist)
输出:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
变量
变量命名规则
规则
- 只能使用字母、数字、下划线_
- 不能以数字开头
- 不能使用保留字
- 严格区分大小写
变量定义
变量的组成
- 标识: 对象所存储的地址,可以通过id(obj)来获取
- 类型: 对象的数据类型,可以通过type(obj)来获取
- 值: 对象所存储的具体数据,使用print(obj)可以将值进行打印输出
name='wzf'
print('标识',id(name))
print('类型',type(name))
print('值',name)
变量中实际储存的是id 内存分析图↓
数据类型
int 整数
float 浮点型
- python中浮点数储存为float类型,不是十分准确
- 例:1.1+2.2 => 3.30000000000003
- 解决方法:
- 引入decimal模块
- from decimal import Decimal
- Decimal(‘1.1’)+Decimal(‘2.2’)
bool 布尔类型
- 真True(代表1)
- 假False(代表0)
- 可以转为整数
str 字符串
-
单引号 '单行字符串'
'''
多行字符串
'''
-
双引号 "单行字符串"
"""
多行字符串
"""
类型转换
隐式类型的转换
-
int + bool => int
-
int + float => float
-
float + bool => float
显示类型转换
bool()
bool(0)
>>> False
bool(1)
>>> True
bool(3)
>>> True
bool('')
>>> False
bool(' ')
>>> True
bool([])
>>> False
bool({})
int()
int(False)
>>> 0
int(True)
>>> 1
int(0.6)
>>> 0
int('123')
>>> 123
int("123")
>>> 123
float()
float(5)
>>> 5.0
float(False)
>>> 0.0
float(True)
>>> 1.0
float('123')
>>> 123.0
str()
str(123)
>>> '123'
算术运算符
运算法 | 名称 | 例子 | 说明 |
---|
+ | 加 | a + b | 求和 | - | 减 | a - b | 求差(-a => 对A取反 a=3 -a => -3) | * | 乘 | a * b | 乘积 | / | 除 | a / b | 相除 | % | 模运算 | a % b | 取余 | ** | 幂运算 | a ** b | a 的 b次幂 | // | 地板除法 | a // b | 求小于a与b的商的最大整数 |
比较运算符
运算符 | 名称 | 例子 | 说明 |
---|
== | 等于 | a == b | 比较是否相等 相等为True 反之为False | is | 比较地址 | a is b | 比较地址是否相等 相等为True 反之为False | != | 不等于 | a != b | 比较是否不相等 不相等为True 反之为False | > | 大于 | a > b | (字符串之间的比较是比较unicode编码的大小) (列表之间的比较是逐一比较其中元素的大小) | < | 小于 | a < b | | >= | 大于等于 | a >= b | | <= | 小于等于 | a <= b | |
逻辑运算符
运算符 | 名称 | 例子 | 说明 |
---|
not | 逻辑非 | not a | | and | 逻辑与 | a and b | | or | 逻辑或 | a or b | |
位运算
运算符 | 名称 | 例子 | 说明 |
---|
~ | 按位取反 | ~x | 将x的值按位取反 | & | 按位取与 | x & y | 将x的值按位取与 | | | 按位取或 | x | y | 将x的值按位取或 | ^ | 按位取异或 | x ^ y | 将x的值按位取异或 | >> | 右移 | x >> a | 将x的值右移a位,高位用符号位补位 | << | 左移 | x << a | 将x的值左移a位,低位用0补位 |
赋值运算符
运算符 | 例子 | 说明 |
---|
+= | a += b | a = a + b | -= | a -= b | a = a - b | *= | a *= b | a = a * b | /= | a /= b | a = a / b | %= | a % b | a = a% b | **= | a ** = b | a = a** b | //= | a // = b | a = a // b | &= | a &= b | a = a & b | |= | a |= b | a = a | b | ^= | a ^= b | a = a ^ b | <<= | a <<=b | a = a << b | >>= | a >>= b | a = a >> b |
运算符的优先级
优先级 | 运算符 | 说明 |
---|
1 | () | 小括号 | 2 | ** | 幂 | 3 | ~ | 按位取反 | 4 | + , - | 正负号 | 5 | * , / , % , // | 乘 ,除 ,取余 ,地板除法 | 6 | + , - | 加 , 减 | 7 | << , >> | 位移 | 8 | & | 按位取与 | 9 | ^ | 位异或 | 10 | | | 按位取或 | 11 | < , <= , > , >= , <> , != , == | 比较 | 12 | not | 逻辑非 | 13 | and , or | 逻辑与 ,逻辑或 |
分支语句
if
if 条件:
语句组1
else:
语句组2
if 条件1:
语句组1
elif 条件2:
语句组2
else:
语句组
获取用户输入
text = input('提示语句')
num = int(input('提示语句'))
分支表达式(三元运算)
语法结构
x if 条件语句 else y
print('大于') if a > b else print('小于')
pass 语句
语句什么都不做,只是一个占位符,用在语法上需要语句的地方
作用
在搭建语法结构的时候起占位符的作用,适合在构建逻辑时使用,专注构建逻辑,后续再补充具体内容
a=20
if a > 20:
pass
elif a < 20:
pass
else:
pass
循环语句
While
while 条件语句
for in循环
特点
- in表达从(字符串,序列等)中依次取值,又称为遍历
- for-in遍历的对象必须是可迭代对象(比如字符串(一个一个遍历),序列)
语法结构
for 自定义的变量 in 可迭代对象:
循环体
for item in b:
print(item)
如果不需要item可以写成_
for _ in b:
print('test');
执行图
列表
列表的创建
方法一
使用方括号[]创建
lst = ['a','b','c',90,True]
方法二
使用内置函数list
lst = list(['a','b',100])
列表特点
- 按输入顺序存放
- 索引从0开始一一映射,负数索引访问0
- 数据可重复
- 任意数据类型
- 根据需要动态分配和回收内存
获取列表索引
.index()
如果有多个值则返回从左往右第一个值
注意: 当找不到值时会报异常
.index()
lst = ['hello', 'word', 1
print(lst.index('hello'))
.index('要查找的字符串',起始位置,结束位置)
print(lst.index('hello',0, 2))
列表切片
语法
-
列表名[start : stop] -
列表名[start : stop : step]
- step为正数
- 从第一个开始到stop
列表名[: stop : step] - 从start开始到最后一个元素
列表名[start :: step] - 整个列表 列表名
[::step] - step为负数
- 从末尾开始到stop
列表名[: stop : step] - 从start开始到0
列表名[start::setp]
lst = ['hello', 'word', 100, 'a', 'b', 'c']
print(lst[0:3])
print(lst[0:6:2])
print(lst[0::2])
print(lst[::])
print(lst[:3:-1])
print(lst[3::-1])
列表元素增删改查操作
列表查询
语法
判断指定元素在列表中是否存在
列表元素的遍历
for 迭代变量 in 列表名
添加
语法
方法 | 描述 |
---|
append() | 在列表的末尾添加一个元素,当元素为列表时,整个列表视为一个一个元素(一个整体) | extend() | 在列表的末尾至少添加一个元素 | insert() | 在列表的任意位置添加一个元素 | 切片 | 在列表的任意位置至少添加一个元素 | + | 两个列表相加元素合并 | * n | 列表元素翻n倍 |
lst = ['hello', 'word', 100, 'a', 'b', 'c']
lst.append('d')
print(lst)
lst.insert(1, 'test')
print(lst)
lst.extend(['e', 'f', 'g'])
print(lst)
lst = lst + ['h']
print(lst)
lst = lst * 2
print(lst)
lst.append(['i', 'j', 'k'])
print(lst)
lst[1:] = ['aaa']
print(lst)
删除操作
方法 | 操作 |
---|
remove() | 一次删除一个元素,重复元素只删除第一个,元素不存在抛出ValueError异常 | pop() | 删除一个指定索引位置上的元素,指定索引不存在抛出IndexError,不指定索引,删除列表中的最后一个元素 | 切片 | 一次至少删除一个元素 | clear() | 清空列表 | del | 删除列表 |
lst1 = ['a', 'b', 'c', 'd', 'e', 'e', 'f']
print(lst1)
lst1.remove('b')
print(lst1)
lst1.pop(0)
print(lst1)
lst1[1:3] = []
lst1.clear()
print(lst1)
del lst1
del lst1
修改操作
方法 | 操作 |
---|
直接赋值 | lst[index]=item | 切片修改 | lst[1:]=[] |
lst2 = ['a', 'b', 'c', 'd', 'e', 'e', 'f']
print(lst2)
lst2[0] = 'a1'
print(lst2)
lst2[1:3] = ['new Item']
print(lst2)
排序
方法 | 操作 |
---|
.sort() | 默认升序排序,可通过reverse=True来标识降序排序 | sorted(lst) | 默认升序排序,产生一个新的列表,愿列表不变,可以通过rever se=True来降序排序 |
列表生成式
语法
[列表元素的表达式 for 自定义变量 in 可迭代对象 ]
lst3 = [i for i in range(1, 10)]
print(lst3)
lst4 = [i * i for i in range(1, 10)]
print(lst4)
lst5 = [i * 2 for i in range(1, 6)]
print(lst5)
其他语法
list(range(1,10))
字典
概念
- 是Python内置的数据结构之一,与列表一样是一个可变序列
- 以键值对的方式存储数据,字典是一个无序的序列
字典的创建
语法
例
dictionary = {'key1': 100, 0: 80, 'test': 90}
print(dictionary)
dictionary1 = dict(key1=1, key2=2, kry3=3)
print(dictionary1)
字典元素的获取
语法
[key]
- 如果字典中不存在指定的key,会抛出keyError异常
.get(key)
- 如果字典中不存在指定的key,返回None,也可以通过参数设置默认的value,以便指定的key不存在是返回
.get(key,defalut)
dictionary = {'key1': 100, 0: 80, 'test': 90}
print(dictionary)
value1 = dictionary['key1']
print(value1)
value2 = dictionary.get('key2')
print(value2)
value3 = dictionary.get('key4', '无')
print(value3)
字典的常用操作
key的判断
操作 | 例子 | 说明 |
---|
in | ‘key1’in dictionary | 判断键是否存在于字典中,存在返回True,反之返回False | not in | ‘key1’not in dictionary | 判断减是否不存在于字典中,不存在返回True,反之返回Flase |
字典元素的删除
del dictionary['key1']
字典元素的新增
dictionary['newKey'] = newValue
获取字典视图
操作 | 例子 | 说明 |
---|
keys() | keys=dictionary.keys() | 获取字典中的所有key,返回一个dict_keys类型,可以通过list函数转换成列表 | values() | values = dictionary.values() | 获取字典中的所有value | items() | items = dictionary.items() | 获取字典中所有key,value对 |
dictionary = {'key1': 100, 0: 80, 'test': 90}
keys = dictionary.keys()
print(keys)
print(list(keys))
values = dictionary.values()
print(values)
print(list(values))
items = dictionary.items()
print(items)
print(list(items))
字典的遍历
for item in dictionary:
print(item)
字典生成式
keys = ['key1', 'key2', 'key3']
values = [100, 90, 80]
d = {k: v for k, v in zip(keys, values)}
print(d)
字典的特点
- 所有的元素都是一个key-value键值对,key不允许重复,value可以重复
- 字典中的元素是无序的
- 字典中的key必须是不可变对象
- 字典也可以根据需要动态的伸缩
- 字典会浪费较大的内存,是一种使用空间换时间的数据结构
元组
定义
python内置的数据结构之一,是一个不可变序列
- 不可变序列: 字符串,元祖
- 没有增删改查,修改后内存地址发生改变,生成了全新对象
- 可变序列:列表,字典
元祖的创建方式
直接使用小括号
t = ('a', 'b', 'c')
print(t)
print(type(t))
**注意:**只包含一个元组的元素也需要使用逗号和小括号
t=(10,)
c = ('a')
print(c)
print(type(c))
c = ('a',)
print(c)
print(type(c))
省略小括号写法
t = 'a', 'b', 'c'
print(t)
print(type(t))
**注意:**只包含一个元组的元素也需要使用逗号
t=10,
使用内置函数tuple()
t = tuple(('a', 'b', 'c'))
print(t)
print(type(t))
空元组
t=()
t=tuple()
注意
- 元祖中存储的是对象的引用
- 如果元祖中对象本身是不可变对象,则不能再引用其他对象
- 如果元祖中的对象是可变对象,则可变对象的引用不允许改变,但数据可改变
元祖中的列表或者字典或者集合中的元素可变
t = 'a', 'b', 'c', [1]
print(t)
t[3].append(2)
print(t)
元祖的遍历
使用索引访问元组
缺点:需要知道一共有多少索引
t=('a','b','c')
print(t[0])
print(t[1])
print(y[2])
使用for in访问元组
t=('a','b','c')
for i in t:
print(i)
集合
定义
-
是Python语言提供的内置数据结构 -
与列表,字典一样都属于可变类型的序列 -
集合是没有value的字典
特点
集合的创建
通过{}来创建
s = {2, 3, 4, 5, 6, 7, 8, 7, 7}
print(s)
通过set()来创建
s1 = set([2, 3, 4, 5, 6, 7, 8])
print(s1)
s2 = set((1, 2, 3))
print(s2)
s3 = set('abcfawfsda')
print(s3)
s4 = set({1, 2, 3, 4})
print(s4)
定义空集合
s5 = set()
print(s5)
**注意:**使用{}为空字典类型
集合的相关操作
集合元素的判断操作
in 或者 not in
集合元素的添加操作
方法 | 例 | 描述 |
---|
.add() | .add(20) | 一次添加一个元素 | .update(集合或元组) | .add({20,30,40}) 或 .add((50,60,70)) | 一次至少添加一个元素 |
集合的删除操作
方法 | 例 | 描述 |
---|
.remove() | .remove(10) | 一次删除一个指定元素,如果指定的元素不存在抛出KeyError | .discard() | .discard(10) | 一次删除一个指定元素,如果指定的元素不存在不抛出异常 | .pop() | .pop() | 一次只删除一个随机元素 | .clear() | .clear() | 清空集合 |
集合之间的关系
运算 | 功能 | 例 | 描述 |
---|
== / != | 判断是否相等 / 不相等 | A==B / a!=b | 元素都相同就相等 | .issubset() | 判断一个A集合是否是B集合的子集 | A.issubset(B) | 是子集则为True 反之为False | .issuperset() | 判断一个A集合是否是B集合的超集 | A.issuperset(B) | 是超集则为True 反之为False | .isdisjoint() | 判断两个集合是否有交集 | A.isdisjoint(B) | 有交集则为True反之为False |
集合的数学操作
运算 | 运算符号 | 功能 | 例 | 韦恩图 |
---|
.intersection() | & | 求A集合和B集合的交集 | A.intersection(B) / A & B | | .union() | | | 求A集合和B集合的并集 | A.union(B) / A | B | | .difference() | - | 求A集合和B集合的差集 | A.difference(B) / A - B | | .symmetric_difference | ^ | 求A集合和B集合的对称差集 | A.symmetric_difference(B) /A ^ B | |
集合生成式
语法
{集合元素的表达式 for 自定义变量 in 可迭代对象}
l = {i for i in range(1, 10)}
print(l)
列表、字典、元祖、集合总结
名称 | 数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
---|
列表list | [1, 2, 3, 4] | 可变 | 可重复 | 有序 | [] | 元祖tuple | (1, 2, 3, 4) | 不可变 | 可重复 | 有序 | () | 字典dict | {key1 : value1, key2 : value2} | 可变 | key不可重复/value可重复 | 无序 | {key:value} | 集合set | {1, 2, 3, 4} | 可变 | 不可重复 | 无序 | {} |
字符串
定义
字符串是基本数据类型,是不可变的字符序列
字符串驻留机制
定义
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的 变量
驻留机制的几种情况**(交互模式,控制台中)**
- 字符串的长度为0或1是
- 符合标识符的字符串
- 字符串只在编译时进行驻留,而非运行时
- 图中ab+c的操作是在编译时计算
- .join([])的运算是在运行时计算,所以不会驻留
- [-5,256]之间的整数数字
- sys中的intern方法强制2个字符串指向同一个对象
**注意:**PyCharm对字符串进行了优化处理
s1 = "abc"
s2 = "abc"
print(s1 is s2)
a = 'abc'
b = 'ab' + 'c'
c = ''.join(['ab', 'c'])
print(c)
print(a is b)
print(a is c)
s1 = "abc%"
s2 = "abc%"
print(s1 is s2)
print(id(s1),id(s2))
a = -100
b = -100
print(a is b)
优缺点
- 优点:
- 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
- 缺点
- 在需要进行字符串拼接时建议使用 str类型的join方法,而非+ ,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高
字符串的查询操作
方法名称 | 作用 |
---|
index() | 查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError | rindex() | 查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError | find() | 查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1 | rfind() | 查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1 |
字符串的大小写转换操作
常用函数
range()
作用
生成一个序列
特点
不管range对象表示的整数序列有多长,所有的range对象占用的内存空间都是相同的,因为仅仅需要存储start end 和 step ,只有当用到range对象时,才会去计算序列中的相关元素
可以通过in 与not in 判断整数序列中是否存在指定的整数
用法
range(10)
b = range(10)
print(b)
print(list(b))
range(1,10)
b = range(1, 10)
print(b)
print(list(b))
- range(start , end , step)
range(1,10,2)
b = range(1, 10, 2)
print(b)
print(list(b))
|