当前位置:   article > 正文

一篇贼全的Python基础学习笔记_python学习笔记

python学习笔记

目录

一、基础语法

1.Print()函数 

2.变量的定义和使用

3.整数类型 

4.浮点类型

5.布尔类型

6.字符串类型

7.数据类型转换

8.注释

9.input()函数

10.算术运算符

11.赋值运算符

12.比较运算符

13.布尔运算符

14.逻辑运算符

15.运算符的优先级

16.对象的布尔值

二、结构

1.分支结构

2.range函数创建列表

3.for-in循环

4.找水仙花数

5.else语句

6.嵌套循环

7.打印九九乘法表

三、列表

1.创建列表的两种方式 

2.列表的特点

3.列表的查询操作 

4.列表的切片操作

5.列表元素的判断以及遍历

6.列表的添加操作

7.列表的删除操作

8.列表的修改操作

9.列表的排序操作

10.列表生成式

四、字典

1.字典的创建

2.字典的增 删 改操作

3.获取字典视图

4.字典元素的遍历

5.字典的特点

6.字典生成式

五、元组

1.元组的创建方式

2.遍历元组

六、集合

1.集合的创建

2.集合的相关操作 

3.集合间的关系

4.集合的数据操作

5.集合生成式

列表、字典、元组、集合总结

七、字符串的驻留机制

字符串的常用操作

字符串的查询操作:

字符串的大小写转换操作:

字符串内容对齐操作: 

字符串劈分操作: 

 字符串判断的相关方法:

字符串操作的其他方法: 

 字符串的切片操作:

 格式化字符串:

字符串的编码转换:

函数的创建和调用

可变的位置参数和关键字参数

函数总结: 

递归函数

bug修复例子 

异常处理机制:

Python常见的异常类型

traceback模块:使用该模块打印异常信息

定义Python中的类

创建对象

动态绑定属性和方法

封装的实现

继承

object类

多态

特殊属性

特殊方法

new与init创建对象过程

类的浅拷贝与深拷贝

模块的导入

常用内容模块

第三方功能包

编码格式

文件读写操作

with语句

os模块的常用函数


一、基础语法

1.Print()函数 

1.将数据输出到文件中

  1. fp=open('D:/text.txt','a+')
  2. print('helloworld',file=fp)
  3. fp.close()

 (1)所指定的盘符存在

 (2)使用file = fp

2.不进行换行输出(输出内容在一行当中)

print('hello','world','Python')

3.转义字符

  1. print('hello\nworld')
  2. print('hello\tworld')#制表符
  3. print('helloooo\tworld')
  4. print('hello\rworld')#\r后面覆盖前面
  5. print('hello\bworld')#\b退格
  6. print('http:\\www.baidu.com')
  7. print('老师说\'大家好\'')
  8. #原字符,不希望字符串中的转义字符起作用,就使用原字符,就是在字符串之前加上r或R
  9. print(r'hello\nworld')
  10. #最后一个字符不能是反斜杠

 4.输出二进制字符

print(chr(0b100111001011000))#输出乘

5.输出十进制的字符

print(ord('乘'))#输出十进制的乘

6.显示python中的所有文件 

print(dir(__builtins__))

2.变量的定义和使用

1.变量的标识

  1. name='月亮'
  2. print(id(name))#输出结果为2369314240720

2.变量的类型

  1. name='月亮'
  2. print(type(name))#输出结果为<class 'str'>

3.变量的名称

  1. name='月亮'
  2. print(name)#输出结果为月亮

4.多次赋值之后,变量名会指向新的空间

  1. name='大月亮'
  2. print(name)#输出结果为大月亮
  3. name='小月亮'
  4. print(name)#输出结果为小月亮

5.删除变量 

  1. x=1
  2. del x

3.整数类型 

整数可以表示为二进制,十进制,八进制,十六进制 

  1. print('十进制',118)#十进制输出结果为118
  2. print('二进制',0b10101111)#二进制以0b开头,输出结果为175
  3. print('八进制',0o176)#八进制以0o开头,输出结果为126
  4. print('十六进制',0x1EAF)#十六进制以0x开头,输出结果为7855

4.浮点类型

 浮点数存储存在不精确性,使用浮点数进行计算时可能会出现小数位数不确定的情况

  1. n1=1.1
  2. n2=2.2
  3. print(n1+n2)#输出结果为3.3000000000000003
  4. #正确输出结果应为3.3

为解决这种情况导入模块decimal

  1. from decimal import Decimal
  2. print(Decimal('1.1')+Decimal('2.2'))#输出结果为3.3

5.布尔类型

 布尔类型可用于计算

  1. f1=True
  2. f2=False
  3. print(f1,type(f1))
  4. print(f2,type(f2))
  5. #布尔类型可以直接用于计算
  6. print(1+f1)#True表示1
  7. print(1+f2)#False表示0

6.字符串类型

关于定义时引号对于字符串的影响,三引号可用于多行定义

7.数据类型转换

类型不同的字符串合并方法 

  1. name='张三'
  2. age=20
  3. print(type(name),type(age))#说明name和age类型不同
  4. print('我叫'+name+',今年'+str(age)+'岁')#当将str类型与int类型进行连接时,报错,解决方案

 float、bool、int都可直接转化为string类型。

int()将其他类型转化为int类型

  1. s1='128'
  2. f1=98.7
  3. s2='76.77'
  4. ff=True
  5. s3='hello'
  6. print(type(s1),type(f1),type(s2),type(ff),type(s3))
  7. print(int(s1),type(int(s1)))#将str转成int类型,字符串为数字串
  8. print(int(f1),type(int(f1)))#将float转成int类型,截取整数部分,舍掉小数部分
  9. #print(int(s2),type(int(s2)))#将str转成int类型,报错,因为字符串为小数串
  10. print(int(ff),type(int(ff)))#输出结果为1
  11. #print(int(s3),type(int(ff)))#将str转成int类型时,字符串必须为数字串(整数),非数字串不允许转换

float()将其他类型转成float类型

  1. s1='128.98'
  2. s2='76'
  3. ff=True
  4. s3='hello'
  5. i=98
  6. print(type(s1),type(s2),type(ff),type(s3),type(i))
  7. print(float(s1),type(float(s1)))
  8. print(float(s2),type(float(s2)))
  9. #print(float(ff),type(float(ff)))#字符串中的数据如果是非数字串,则不允许转换
  10. print(float(i),type(float(i)))

8.注释

中文编码声明注释在文件开头加上注释,用以指定源码文件的编码格式。

  1. #coding:gbk
  2. #coding:utf-8

 单行注释和多行注释

  1. #单行注释
  2. print('hello')
  3. #多行注释
  4. '''我是
  5. 多行
  6. 注释'''

9.input()函数

input()函数的基本使用 

 如果引号里放中文字符报错就可以在模板第一行添加utf-8编码

  1. # -*-coding:utf-8-*-
  2. present=input('大圣想要什么礼物呢?')#输入定海神针
  3. print(present,type(present))#输出结果为定海神针 <class 'str'>

类型转换

  1. a=int(input('请输入一个加数:'))
  2. b=int(input('请输入另一个加数:'))
  3. print(a+b)

10.算术运算符

  1. print(11/2)#除法运算,结果为5.5
  2. print(11//2)#整除运算,结果为5
  3. print(11%2)#取余运算,结果为1
  4. print(2**2)#幂运算,表示2的2次方,结果为4

11.赋值运算符

链式赋值id相同

  1. #链式赋值
  2. a=b=c=20
  3. print(a,id(a))
  4. print(b,id(b))
  5. print(c,id(c))
  6. '''
  7. 输出结果
  8. 20 140734397925632
  9. 20 140734397925632
  10. 20 140734397925632'''

解包赋值

  1. #解包赋值
  2. a,b,c=20,30,40
  3. print(a,b,c)#左右数量不同会报错
  4. #交换两个变量
  5. print('交换之前:',a,b)
  6. a,b=b,a
  7. print('交换之后:',a,b)
  8. '''
  9. 输出结果
  10. 交换之前: 20 30
  11. 交换之后: 30 20
  12. '''

12.比较运算符

 比较value(值)是否相等用==,比较标识是否相等用is和is not

  1. a=10
  2. b=10
  3. print(a==b)#True
  4. print(a is b)#True
  5. print(a is not b)#False
  1. lst1=[11,22,33,44]
  2. lst2=[11,22,33,44]
  3. print(lst1==lst2)#True
  4. print(lst1 is lst2)#False
  5. print(lst1 is not lst2)#True

13.布尔运算符

  1. a,b=1,2
  2. print(a==1 and b==2)#True
  3. print(a==1 or b==2)#True
  4. f=True
  5. print(not f)#False
  6. s='helloworld'
  7. print('w' in s)#判断w在不在helloworld中,输出True
  8. print('k' in s)#False
  9. print('w' not in s)#False
  10. print('k' not in s)#True

14.逻辑运算符

  1. print(4&8)#按位与&,同为1时结果为1,结果为0
  2. print(4|8)#按位或|,同为0才为0,结果为12
  3. print(4<<1)#左移1位,高位溢出截断,低位补0相当于乘于2,结果为8
  4. print(4<<2)#左移2位,结果为16
  5. print(4>>1)#向右移动1位,相当于除2,结果为2

15.运算符的优先级

算术运算>位运算>比较运算>布尔运算>赋值运算

16.对象的布尔值

  1. print(bool(False))#False
  2. print(bool(0))#False
  3. print(bool(0.0))#False
  4. print(print(''))#False
  5. print(bool(""))#False
  6. print(bool([]))#False空列表
  7. print(bool(list()))#False空列表
  8. print(bool(()))#False空元组
  9. print(bool(tuple()))#False空元组
  10. print(bool({}))#空字典
  11. print(bool(dict()))#空字典
  12. print(bool(set()))#空集合

以上对象布尔值为False其他均为True

二、结构

1.分支结构

  1. money=1000
  2. s=int(input('请输入取款金额:'))#取款金额
  3. if money>=s:
  4. money=money-s
  5. print('取款成功,余额为:',money)

多分支结构

  1. score=int(input('请输入一个成绩:'))
  2. if score>=90 and score<=100:
  3. print('A级')
  4. elif score>=80 and score<=89:
  5. print('B级')
  6. elif score>=70 and score<=79:
  7. print('C级')
  8. elif score>=60 and score<=69:
  9. print('D级')
  10. elif score>=0 and score<=59:
  11. print('E级')
  12. else:
  13. print("对不起,您的输入有误")

 python独特的写法

  1. score=int(input('请输入一个成绩:'))
  2. if 90<=score<=100:
  3. print('A级')
  4. elif 80<=score<=89:
  5. print('B级')
  6. elif 70<=score<=79:
  7. print('C级')
  8. elif 60<=score<=69:
  9. print('D级')
  10. elif 0<=score<=59:
  11. print('E级')
  12. else:
  13. print("对不起,您的输入有误")

 if-else的简写

  1. num_a=int(input())
  2. num_b=int(input())
  3. print(str(num_a)+'大于等于'+str(num_b) if num_a>=num_b else str

 pass可用于占坑

2.range函数创建列表

  1. #range的三种创建方式
  2. r=range(10)#默认从0开始,默认相差1
  3. print(r)#range(0,10)
  4. print(list(r))#可用该方法查看range对象中的整数序列
  5. r=range(1,10)#指定了起始值,从1开始不包含10
  6. print(list(r))
  7. r=range(1,10,2)#指定了起始值结束值和单位差
  8. print(list(r))

 不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,才会去计算序列中的相关元素。

in和not in 判断整数序列中是否存在指定的整数。

  1. a=0
  2. sum=0
  3. while a<=100:
  4. if not bool(a%2):
  5. sum+=a
  6. a+=1
  7. print('1-100的偶数和',sum)

3.for-in循环

  1. for item in 'Python':
  2. print(item)
  3. for i in range(10):
  4. print(i)
  5. for _ in range(5):
  6. print('人生苦短')

4.找水仙花数

  1. for item in range(100,1000):
  2. ge=item%10
  3. shi=item//10%10
  4. bai=item//100
  5. #print(bai,shi,ge)
  6. #判断
  7. if ge**3+shi**3+bai**3==item:
  8. print(item)

5.else语句

 else可与if搭配,也能与for、while语句搭配,与for语句和while语句搭配时,若程序没有执行break语句,则执行else语句

  1. # -*-coding:utf-8-*-
  2. for item in range(3):
  3. pewd=input('请输入密码:')
  4. if pewd=='8888':
  5. print('密码正确')
  6. break
  7. else:
  8. print('密码不正确')
  9. else:
  10. print('对不起,三次密码均输入错误')
  1. # -*-coding:utf-8-*-
  2. a=0
  3. while a<3:
  4. pewd=input('请输入密码:')
  5. if pewd=='8888':
  6. print('密码正确')
  7. break
  8. else:
  9. print('密码不正确')
  10. a+=1
  11. else:
  12. print('对不起,三次密码均输入错误')

6.嵌套循环

不换行输出小技巧 

  1. # -*-coding:utf-8-*-
  2. for i in range(1,4):
  3. for j in range(1,5):
  4. print('*',end='\t') #不换行输出
  5. print()#换行

7.打印九九乘法表

  1. # -*-coding:utf-8-*-
  2. for i in range(1,10):
  3. for j in range(1,i+1):
  4. print(i,'*',j,'=',i*j,end='\t') #不换行输出
  5. print()#换行

三、列表

1.创建列表的两种方式 

  1. # -*-coding:utf-8-*-
  2. #创建列表的第一种方式,使用[]
  3. lst=['hello','world',98]
  4. #创建列表的第二种方式,使用内置函数list()
  5. lst2=list(['hello','worl

2.列表的特点

1.列表元素按顺序有序排序

2.索引映射唯一一个数据(正序索引从0开始递增,逆序索引从-1开始递减)

3.列表可用存储重复数据

4.任意数据类型混存

5.根据需要动态分配和回收内存

3.列表的查询操作 

根据元素查索引

  1. # -*-coding:utf-8-*-
  2. lst=['hello','world',98,'hello']
  3. print(lst.index('hello'))#查找元素索引
  4. print(lst.index('hello',0,3))#设置start和stop

 根据索引查元素

  1. # -*-coding:utf-8-*-
  2. lst=['hello','world',98,'hello']
  3. print(lst[2])#98
  4. print(lst[-3])#'world'

4.列表的切片操作

  1. # -*-coding:utf-8-*-
  2. lst=[10,20,30,40,50,60,70,80]
  3. print('切的片段:',lst[1:6:1])
  4. #start=1,stop=6,step=1
  5. print(lst[1:6:])
  6. print(lst[1:6:2])
  7. #step也可为负数
  8. print(lst[-1:-6:-1])

5.列表元素的判断以及遍历

  1. # -*-coding:utf-8-*-
  2. lst=[10,20,'python','hello']
  3. print(10 in lst)#True
  4. print(100 not in lst)#True
  5. for item in lst:
  6. print(item)

6.列表的添加操作

  1. # -*-coding:utf-8-*-
  2. #列表元素的增加操作
  3. lst=[10,20,30]
  4. print('添加元素之前',lst,id(lst))
  5. lst.append(100)#在列表末尾添加一个元素
  6. print('添加元素之后',lst,id(lst))
  7. lst2=['hello','world']
  8. lst.append(lst2)#将list2作为一个元素添加到lst的末尾
  9. print(lst)
  10. lst.extend(lst2)#在lst尾部一次性添加多个元素
  11. print(lst)
  12. #在任意位置上添加一个元素
  13. lst.insert(1,90)
  14. print(lst)
  15. lst3=[True,False,'hello']
  16. #在任意个位置上添加N个元素,切片操作
  17. lst[1:]=lst3
  18. print(lst)

输出结果: 

添加元素之前 [10, 20, 30] 1603301146880
添加元素之后 [10, 20, 30, 100] 1603301146880
[10, 20, 30, 100, ['hello', 'world']]
[10, 20, 30, 100, ['hello', 'world'], 'hello', 'world']
[10, 90, 20, 30, 100, ['hello', 'world'], 'hello', 'world']
[10, True, False, 'hello']

7.列表的删除操作

  1. # -*-coding:utf-8-*-
  2. #列表元素的删除操作
  3. lst=[10,20,30,40,50,60,30]
  4. lst.remove(30)#从列表中移除一个元素,如果有重复元素,只移除第一个元素
  5. print(lst)
  6. #pop()根据索引移除元素
  7. lst.pop(1)#如果不指定参数,那么将删除列表中的最后一个元素
  8. print(lst)
  9. #切片操作,删除至少一个元素,将产生一个新的列表对象
  10. new_lst=lst[1:3]
  11. print('原列表',lst)
  12. print('切片后的列表',new_lst)
  13. #不产生新的列表对象,而是删除原列表中的内容
  14. lst[1:3]=[]
  15. print(lst)
  16. #清楚列表中的所有元素
  17. lst.clear()
  18. print(lst)
  19. #del将列表对象删除
  20. del lst

输出结果

[10, 20, 40, 50, 60, 30]
[10, 40, 50, 60, 30]
原列表 [10, 40, 50, 60, 30]
切片后的列表 [40, 50]
[10, 60, 30]
[]

8.列表的修改操作

  1. # -*-coding:utf-8-*-
  2. #列表元素的修改操作
  3. lst=[10,20,30,40,50,60,30]
  4. lst[2]=100
  5. lst[1:3]=[300,400,500,600]

9.列表的排序操作

  1. # -*-coding:utf-8-*-
  2. #列表元素的排序操作
  3. lst=[70,20,30,40,50,60,30]
  4. print('排序前的列表',lst,id(lst))
  5. lst.sort()#默认为升序
  6. print('排序后的列表',lst,id(lst))
  7. #指定关键词参数,将列表中元素进行降序排序
  8. lst.sort(reverse=True)
  9. print(lst)
  10. #使用内置函数sorted()对列表进行排序,将产生一个新的列表对象
  11. lst=[20,40,10,98,54]
  12. new_list=sorted(lst)
  13. #指定关键字参数,实现列表降序排序
  14. desc_list=sorted(lst,reverse=True)

10.列表生成式

  1. # -*-coding:utf-8-*-
  2. lst=[i*i for i in range(1,10)]#i*i表示列表存储的内容
  3. print(lst)#[1, 4, 9, 16, 25, 36, 49, 64, 81]

四、字典

1.字典的创建

  1. # -*-coding:utf-8-*-
  2. #使用{}创建字典
  3. scores={'张三':100,'李四':98,'王五':45}
  4. print(scores)
  5. print(type(scores))
  6. #使用dict()创建字典
  7. student=dict(name='jack',age=20)
  8. print(student)
  9. #空字典
  10. d={}

输出结果

{'张三': 100, '李四': 98, '王五': 45}
<class 'dict'>
{'name': 'jack', 'age': 20}

2.字典的增 删 改操作

  1. scores={'张三':100,'李四':98,'王五':45}
  2. print('张三' in scores)#True
  3. print('张三' not in scores)#False
  4. del scores['张三'] #删除指定的键值对
  5. scores.clear()#清空字典的元素
  6. scores['陈六']=98#新增元素
  7. scores['陈六']=100#修改value

3.获取字典视图

  1. scores={'张三':100,'李四':98,'王五':45}
  2. #获取所有的key
  3. keys=scores.keys()
  4. print(keys)
  5. print(type(keys))#dict类型
  6. print(list(keys))
  7. #获取所有的value
  8. values=scores.values()
  9. print(values)
  10. print(type(values))#dict类型
  11. print(list(values))
  12. #获取所有键值对
  13. items=scores.items()
  14. print(items)#元组列表

4.字典元素的遍历

方括号形式若键不存在会抛出异常,而get方法不会

  1. scores={'张三':100,'李四':98,'王五':45}
  2. #字典元素的遍历
  3. for item in scores:
  4. print(item, scores[item],scores.get(item))#方括号形式若键不存在会抛出异常,而get方法不会

5.字典的特点

  1. d={'name':'张三','name':'李四'} #key 不允许重复
  2. print(d)#name:李四
  3. d={'name':'张三','nikename':'张三'}
  4. print(d)#
  5. #字典的元素是无序的

6.字典生成式

  1. items=['Fruits','Books','Others']
  2. prices=[96,78,85]
  3. d={item.upper():price for item ,price in zip(items, prices) }#加了.upper()key全变大写.lower变小写
  4. print(d)#zip以短的元素来生成

不可变序列:字符串/元组(没有增删改操作)

可变序列:列表/字典(可以对序列执行增删改操作,对象地址不发生更改)

五、元组

1.元组的创建方式

  1. #直接小括号
  2. t=('Python','hello',90)
  3. #使用内置函数tuple()
  4. t=tuple(('Python','hello',90))
  5. #只包含一个元组的元素需要使用逗号和小括号
  6. t=(10,)

为什么要将元组设计成不可变序列:

   在多任务环境下,同时操作对象时不需要加锁

   元组中储存对象的引用:

        如果元组中对象本身是不可变对象,则不能再引用其他对象

        如果元组中的对象时可变对象,则可变对象的引用不允许改变,但数据可以改变 

  1. t=(10,[20,30],40)
  2. #t[1]=100元组不允许修改元素
  3. t[1].append(100)

2.遍历元组

  1. t=tuple(('Python','hello',90))
  2. for item in t:
  3. print(item)

六、集合

1.集合的创建

  1. # -*-coding:utf-8-*-
  2. #使用{}创建集合
  3. s={2, 3, 4, 5, 5, 6, 7, 7}#集合中元素不允许重复
  4. print(s)
  5. #第二种创建方式使用set()
  6. s1 = set(range(5))
  7. print(s1, type(s1))
  8. s2 = set([1,2,3,4,5,5,5,6,6])#列表转集合
  9. print(s2, type(s2))
  10. s3 = set((1,2,4,4,5,65))#元组转集合
  11. print(s3, type(s3))
  12. s4 = set('python')#字符串转集合
  13. print(s4,type(s4))
  14. s5 = set({124, 3, 4, 55, 6, 6})#集合转集合
  15. print(s5, type(s5))
  16. s6 = {}
  17. print(s6, type(s6))
  18. s7 = set()#生成空字典
  19. print(s7, type(s7))
  20. s8 = {''}
  21. print(s8, type(s8))

输出结果 

{2, 3, 4, 5, 6, 7}
{0, 1, 2, 3, 4} <class 'set'>
{1, 2, 3, 4, 5, 6} <class 'set'>
{65, 1, 2, 4, 5} <class 'set'>
{'o', 't', 'p', 'y', 'h', 'n'} <class 'set'>
{3, 4, 6, 55, 124} <class 'set'>
{} <class 'dict'>
set() <class 'set'>
{''} <class 'set'>

2.集合的相关操作 

  1. # -*-coding:utf-8-*-
  2. #集合元素的判断操作
  3. s = {10, 20, 30}
  4. print(10 in s)#True
  5. #集合元素的新增操作
  6. #一次添加一个
  7. s.add(80)
  8. print(s)
  9. #一次至少添加一个
  10. s.update({200, 400, 300})
  11. print(s)
  12. s.update([100, 99, 8])
  13. s.update((78, 64, 56))
  14. #集合元素的删除操作
  15. s.remove(100)
  16. print(s)
  17. #s.remove(500)#KeyError: 500
  18. #discard()删除指定元素,不抛出异常
  19. s.discard(500)
  20. print(s)
  21. #pop()任意删除一个
  22. s.pop()
  23. print(s)
  24. s.clear()

输出结果

True
{80, 10, 20, 30}
{80, 400, 20, 200, 10, 300, 30}
{64, 200, 8, 10, 78, 80, 400, 20, 30, 99, 300, 56}
{64, 200, 8, 10, 78, 80, 400, 20, 30, 99, 300, 56}
{200, 8, 10, 78, 80, 400, 20, 30, 99, 300, 56}

3.集合间的关系

  1. # -*-coding:utf-8-*-
  2. #一个集合是否是另一个集合的子集
  3. s1 = {10, 20, 30, 40, 50, 60}
  4. s2 = {10, 20, 30, 40}
  5. s3 = {10, 20, 90}
  6. print(s2.issubset(s1))#True
  7. print(s3.issubset(s1))#False
  8. #一个集合是否是另一个集合的超集
  9. print(s1.issuperset(s2))#True
  10. print(s1.issuperset(s3))#False
  11. #两个集合是否含有交集
  12. print(s2.isdisjoint(s3))#False 有交集为False
  13. s4 = {400, 200, 300}#True

4.集合的数据操作

  1. #交集操作
  2. s1 = {10,20,30,40}
  3. s2 = {20,30,40,50,60}
  4. print(s1.intersection(s2))
  5. print(s1 & s2)#intersection 与 &等价
  6. #并集操作
  7. print(s1.union(s2))
  8. print(s1|s2)#union与|等价
  9. #差集操作
  10. print(s1.difference(s2))
  11. print(s1-s2)
  12. #对称差集
  13. print(s1.symmetric_difference(s2))
  14. print(s1^s2)

输出结果

 {40, 20, 30}
{40, 20, 30}
{40, 10, 50, 20, 60, 30}
{40, 10, 50, 20, 60, 30}
{10}
{10}
{50, 10, 60}
{50, 10, 60}

5.集合生成式

  1. #列表生成式
  2. lst=[i*i for i in range(6)]
  3. print(lst)
  4. #集合生成式
  5. s={ i*i for i in range(10) }
  6. print(s)

输出结果

[0, 1, 4, 9, 16, 25]
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

列表、字典、元组、集合总结

数据结构    是否可变 是否重复是否有序定义符号
列表(list)可变可重复有序[]
元组(tuple)不可变可重复有序()
字典(dict) 可变

key不可重复

value可重复

无序{key:value}
集合(set)可变不可重复无序{}

七、字符串的驻留机制

仅保存一份相同且不可变的字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。

驻留机制的几种情况(交互模式) :

1.字符串的长度为0或1时

2.符合标识符的字符串

3.字符串只在编译时进行驻留,而非运行时

4.[-5,256]之间的整数数字

sys中的intern方法强制两个字符串指向同一个对象 

PyCharm对字符串进行了优化处理,所以没驻留的id也显示相同

  1. >>> s1=''
  2. >>> s2=''
  3. >>> s1 is s2
  4. True
  5. >>> s1='abc%'
  6. >>> s2='abc%'
  7. >>> s1 == s2
  8. True
  9. >>> s1 is s2
  10. False
  11. >>> s1='abcx'
  12. >>> s2='abcx'
  13. >>> s1 is s2
  14. True
  15. >>> a='abc'
  16. >>> b='ab'+'c'
  17. >>> c=''.join(['ab','c'])
  18. >>> a is b
  19. True
  20. >>> a is c
  21. False
  22. >>> type(c)
  23. <class 'str'>
  24. >>> type(a)
  25. <class 'str'>
  26. >>> a=-5
  27. >>> b=-5
  28. >>> a is b
  29. True
  30. >>> a=-6
  31. >>> b=-6
  32. >>> a is b
  33. False
  34. >>> import sys
  35. >>> a='abc%'
  36. >>> b='abc%'
  37. >>> a is b
  38. False
  39. >>> a=sys.intern(b)
  40. >>> a is b
  41. True
  42. >>>

字符串驻留机制的优缺点: 

当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。

在需要进行字符串拼接是建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比“+”高。

  1. a = 'Python'
  2. b = "Python"
  3. c = '''Python'''
  4. print(a,id(a))
  5. print(b,id(b))
  6. print(c,id(c))

 输出结果

Python 2495641118512
Python 2495641118512
Python 2495641118512

字符串的常用操作

字符串的查询操作:

  1. #字符串的查询操作
  2. s='hello,hello'
  3. #index()查询字串第一次出现的位置,若不存在则抛出ValueError
  4. print(s.index('lo'))#3
  5. #index()查询字串最后一次出现的位置,若不存在则抛出ValueError
  6. print(s.find('lo'))#3
  7. #index()查询字串第一次出现的位置,若不存在则返回-1
  8. print(s.rindex('lo'))#9
  9. #index()查询字串最后一次出现的位置,若不存在则返回-1
  10. print(s.rfind('lo'))#9

字符串的大小写转换操作:

  1. #字符串的大小写转换操作
  2. s='hello,python'
  3. #把字符串中所有字符都转成大写字母
  4. a=s.upper()#转成大写之后,会产生一个新的字符串对象
  5. print(a,id(a))
  6. print(s,id(s))
  7. #把字符串中所有字符都转成小写字母
  8. b=s.lower()#转换之后,产生新的字符串对象
  9. print(b,id(b))
  10. print(s,id(s))
  11. #把字符串中所有大写字符都转成小写字母,小写转成大写
  12. s2='hello,Python'
  13. print(s2.swapcase())
  14. #把字符串中第一个字符转成大写字母,其余转成小写
  15. print(s2.capitalize())
  16. #把字符串中每个单词的第一个字符都转成大写字母,剩余字符转为小写
  17. print(s2.title())

输出结果:

HELLO,PYTHON 1416246594288
hello,python 1416246594544
hello,python 1416246591600
hello,python 1416246594544
HELLO,pYTHON
Hello,python
Hello,Python

字符串内容对齐操作: 

  1. s='hello,Python'
  2. print(s.center(20,'*'))#居中对齐,若第二个参数不指定填充符,默认为空格,指定小于原字符串则返回原字符串
  3. print(s.ljust(20,'*'))#左对齐
  4. print(s.rjust(20,'*'))#右对齐
  5. print(s.zfill(20))#右对齐,左侧用0对齐
  6. print('-8910'.zfill(8))

输出结果:

****hello,Python****
hello,Python********
********hello,Python
00000000hello,Python
-0008910

字符串劈分操作: 

  1. #split()
  2. s='hello world Python'
  3. lst=s.split()#默认分割符为空格
  4. print(lst)
  5. s1='hello|world|Python'
  6. print(s1.split(sep='|'))
  7. print(s1.split(sep='|',maxsplit=1))#设置最大劈分次数,剩余的会单独作为一部分
  8. #rsplit()
  9. print(s.rsplit())
  10. print(s1.rsplit(sep='|'))
  11. print(s1.rsplit(sep='|',maxsplit=1))

输出结果:

['hello', 'world', 'Python']
['hello', 'world', 'Python']
['hello', 'world|Python']
['hello', 'world', 'Python']
['hello', 'world', 'Python']
['hello|world', 'Python']

 字符串判断的相关方法:

  1. s='hello,python'
  2. print(s.isidentifier())#判断是否是合法的标识符字符串
  3. print('\t'.isspace())#判断是否是全部由空白字符组成(回车、换行、水平制表符)
  4. print('abc张三'.isalpha())#判断是否全部由字符组成
  5. print('123'.isdecimal())#判断是否全部是十进制数字
  6. print('123四Ⅳ'.isnumeric())#判断是否全由数字组成
  7. print('abc1'.isalnum())#是否全部由字母和数字组成

输出结果:

False
True
True
True
True
True

字符串操作的其他方法: 

  1. #repalce()
  2. s='hello,Python'
  3. print(s.replace('Python','Java'))
  4. s1='hello,Python,Python,Python'
  5. print(s1.replace('Python','Java',2))
  6. #join()将列表或元组中的字符串合并成一个字符串
  7. lst=['hello','Java','Python']
  8. print('|'.join(lst))
  9. t=('hello','Java','Python')
  10. print(''.join(t))
  11. print('*'.join('Python'))

输出结果:

hello,Java
hello,Java,Java,Python
hello|Java|Python
helloJavaPython
P*y*t*h*o*n

print(ord('a'))可获得a字符的原始值97 

print(chr(97))根据原始值获得字符a

 字符串的切片操作:

  1. s='hello,Python'
  2. s1=s[:5]
  3. s2=s[6:]
  4. s3='!'
  5. newstr=s1+s3+s2
  6. print(s1,s2,s3,newstr)

输出结果: 

hello        Python        !           hello!Python

 格式化字符串:

  1. #第一种占位符
  2. name='张三'
  3. age=20
  4. print('我叫%s,今年%d岁' % (name,age))
  5. #第二种占位符
  6. print('我叫{0},今年{1}岁'.format(name,age))#只有一个可用花括号内不写索引
  7. #第三种占位符
  8. print(f'我叫{name},今年{age}岁')
  9. #精度
  10. print('{0:.3}'.format(3.1415926))#输出3.14表示一共输出3位数
  11. print('{0:.3f}'.format(3.1415926))#输出3.142输出三位小数

字符串的编码转换:

  1. s='海上生明月'
  2. #编码
  3. print(s.encode(encoding='GBK')) #在GBK这种编码格式中,一个中文占两个字节
  4. print(s.encode(encoding='UTF-8'))#一个中文占三个字节
  5. #解码
  6. byte=s.encode(encoding='GBK')
  7. print(byte.decode(encoding='GBK'))
  8. #编码格式和解码格式要相同

输出结果:

b'\xba\xa3\xc9\xcf\xc9\xfa\xc3\xf7\xd4\xc2'
b'\xe6\xb5\xb7\xe4\xb8\x8a\xe7\x94\x9f\xe6\x98\x8e\xe6\x9c\x88'
海上生明月

函数的创建和调用

  1. def calc(a,b):#形参
  2. c=a+b
  3. return c
  4. result=calc(10,20)#实参
  5. print(result)
  6. res=calc(b=10,a=20)#关键词参数
  7. print(result)

函数返回值如果是多个,则返回元组

可变的位置参数和关键字参数

参数只能定义一个,但是在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求个数可变的位置形参,放在个数可变的关键字形参之前

  1. #个数可变的位置参数
  2. def fun(*args):
  3. print(args)#返回元组
  4. fun(10)
  5. fun(10,20)
  6. fun(20,34,55)
  7. #个数可变的关键字形参
  8. def fun1(**args):
  9. print(args)#返回字典
  10. fun1(a=10)
  11. fun1(a=20,b=90,c=89)

输出结果:

(10,)
(10, 20)
(20, 34, 55)
{'a': 10}
{'a': 20, 'b': 90, 'c': 89} 

函数总结: 

  1. def fun(a,b,c):
  2. print(a)
  3. print(b)
  4. print(c)
  5. lst=[11,22,33]
  6. fun(*lst)#在函数调用时,将列表中的每个元素都转换为位置实参传入
  7. dic={'a':111,'b':222,'c':333}
  8. fun(**dic)#在函数调用时,将字典中的键值对都转换为关键字实参传入
  9. def fun1(a,b,*,c,d):#c和d的实参只能用关键字实参传递
  10. print(a)
  11. print(b)
  12. print(c)
  13. print(d)
  14. fun1(10,20,c=30,d=40)
  15. def fun4(**a):
  16. print(a)
  17. fun4(**dic)
  18. #顺序问题
  19. def fun5(a,b,*,c,d,**args):
  20. pass
  21. def fun6(*args,**args2):
  22. pass
  23. def fun7(a,b=10,*args,**arg2s):
  24. pass

输出结果:

 11
22
33
111
222
333
10
20
30
40
{'a': 111, 'b': 222, 'c': 333}

函数内部定义的变量前面加global可以让该变量变为全局变量

递归函数

每递归调用一次都会在栈内存分配一个栈帧 。

斐波那契数列实例:

  1. def fib(n):
  2. if n==1:
  3. return 1
  4. elif n==2:
  5. return 1
  6. else:
  7. return fib(n-1)+fib(n-2)
  8. for i in range(1,7):
  9. print(fib(i))

bug修复例子 

  1. lst=[{'title':'肖申克的救赎','actor':['蒂姆罗宾斯','摩根里夫曼']},
  2. {'title':'霸王别姬','actor':['张国荣','张丰毅','功利','葛优']},
  3. {'title':'阿甘正传','actor':['汤姆汉克斯','罗宾怀特']}
  4. ]
  5. name=input('请输入你要查询的演员:')
  6. for item in lst:
  7. namelst=item['actor']
  8. for actor in namelst:
  9. if name in actor:
  10. print(f'{name}出演了%s' % item['title'])

异常处理机制:

  1. try:
  2. n1=int(input('请输入一个整数:'))
  3. n2=int(input('请输入另一个整数'))
  4. result=n1/n2
  5. print('结果为',result)
  6. except ZeroDivisionError:
  7. print('对不起,除数不允许为0')
  8. except ValueError:
  9. print('只能输入数字串')
  10. except BaseException:
  11. print('出错')
  12. print('程序结束')

try...except...else结构,如果try没有抛出异常,则执行else块,如果try中抛出异常,则执行except块。

  1. try:
  2. a = int(input('请输入第一个整数'))
  3. b = int(input('请输入第二个整数'))
  4. result = a / b
  5. except BaseException as e:
  6. print('出错了',e)
  7. else:
  8. print('结算结果为',result)

 try...except...else...finally,finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源

  1. try:
  2. a = int(input('请输入第一个整数'))
  3. b = int(input('请输入第二个整数'))
  4. result = a / b
  5. except BaseException as e:
  6. print('出错了',e)
  7. else:
  8. print('结算结果为',result)
  9. finally:
  10. print('谢谢您的使用')

Python常见的异常类型

序号异常类型描述
1ZeroDivisionError

除(或取模)零(所有数据类型)

2IndexError序列中没有此索引(index)
3KeyError映射中没有这个键
4NameError未声明/初始化对象(没有属性)
5SyntaxErrorPython 语法错误
6ValueError传入无效的参数

traceback模块:使用该模块打印异常信息

  1. import traceback
  2. try:
  3. print('----------')
  4. print(1/0)
  5. except:
  6. traceback.print_exc()

定义Python中的类

  1. class Student:
  2. native_place='深圳'#直接写在类里的变量,称为类属性
  3. def __int__(self,name,age):
  4. self.name=name #实体属性
  5. self.age=age
  6. def eat(self):
  7. print('学生在吃饭...')#类里定义的叫方法,类外叫函数
  8. @staticmethod
  9. def method():
  10. print('静态方法')
  11. @classmethod
  12. def cm(cls):
  13. print('我是类方法')
  14. #Python中的一切皆是对象,内存有开空间。

创建对象

  1. class Student:
  2. native_place='深圳'#直接写在类里的变量,称为类属性
  3. def __init__(self,name,age):
  4. self.name=name #实体属性
  5. self.age=age
  6. def eat(self):
  7. print('学生在吃饭...')#类里定义的叫方法,类外叫函数
  8. @staticmethod
  9. def method():
  10. print('静态方法')
  11. @classmethod
  12. def cm(cls):
  13. print('我是类方法')
  14. #Python中的一切皆是对象,内存有开空间。
  15. stu1=Student('张三',20)
  16. print(id(stu1))#输出地址
  17. print(type(stu1))#类型
  18. print(stu1)#地址
  19. print('===============')
  20. print(id(Student))
  21. print(type(Student))
  22. print(Student)
  23. Student.eat(stu1)#两种调用方法

输出结果:

1792242521376
<class '__main__.Student'>
<__main__.Student object at 0x000001A149FA9520>
===============
1792235695104
<class 'type'>
<class '__main__.Student'>

类属性:类中方法外的变量称为类属性,被该类的所有对象所共享

类方法:使用@classmethod修饰的方法,使用类名直接访问的方法

静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法

动态绑定属性和方法

  1. class Student:
  2. native_place='深圳'#直接写在类里的变量,称为类属性
  3. def __init__(self,name,age):
  4. self.name=name #实体属性
  5. self.age=age
  6. def eat(self):
  7. print(self.name+'学生在吃饭...')#类里定义的叫方法,类外叫函数
  8. stu1=Student('张三',20)
  9. stu2=Student('李四',30)
  10. stu2.gender='女'#动态绑定属性
  11. def show():
  12. print('定义在类之外的')
  13. stu1.show=show()#动态绑定方法

封装的实现

在Python中,没有专门的修饰符属于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个"__"

  1. class Student:
  2. def __init__(self,name,age):
  3. self.name=name
  4. self.__age=age#年龄不希望在类的外部被使用
  5. def show(self):
  6. print(self.name,self.__age)
  7. stu = Student('张三',20)
  8. stu.show()
  9. #在类的外使用使用name和age
  10. #print(stu.__age)
  11. print(dir(stu))
  12. print(stu._Student__age)#可以访问但不建议

继承

  1. class Person(object):
  2. def __init__(self,name,age):
  3. self.name=name
  4. self.age=age
  5. def info(self):
  6. print(self.name,self.age)
  7. class Student(Person):
  8. def __init__(self,name,age,stu_num):
  9. super().__init__(name,age)
  10. self.stu_num=stu_num
  11. class Teacher(Person):
  12. def __init__(self,name,age,yearofteaching):
  13. super().__init__(name,age)
  14. self.yearofteaching=yearofteaching
  15. stu=Student('张三',20,1)
  16. tea=Teacher('李四',30,3)
  17. stu.info()
  18. tea.info()

并且python中可以有多继承

重写正常写方法就可以 

object类

内置函数dir()可以查看指定对象的所有属性。

Object有一个__str__()方法,用于返回一个’对于对象的描述‘对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们常会对__str__()进行重写

  1. class Student:
  2. def __init__(self,name,age):
  3. self.name=name
  4. self.age=age
  5. def __str__(self):
  6. return '我的名字是{0},今年{1}岁'.format(self.name,self.age)
  7. stu=Student('张三',20)
  8. print(dir(stu))
  9. print(stu)
  10. print(type(stu))

多态

鸭子类型,动态语言Python只关心是否具有这个方法不管你是否有父子类关系

  1. class Animal(object):
  2. def eat(self):
  3. print('动物会吃')
  4. class Dog(Animal):
  5. def eat(self):
  6. print('狗吃骨头')
  7. class Cat(Animal):
  8. def eat(self):
  9. print('猫吃鱼')
  10. class Person:
  11. def eat(self):
  12. print('人吃五谷杂粮')
  13. def fun(obj):
  14. obj.eat()
  15. fun(Cat())
  16. fun(Dog())
  17. fun(Animal())
  18. print('--------')
  19. fun(Person())

特殊属性

  1. #__dict__获得类对象或实例对象所绑定的所有属性和方法的字典
  2. class A:
  3. pass
  4. class B:
  5. pass
  6. class C(A,B):
  7. def __init__(self,name,age):
  8. self.name=name
  9. self.age=age
  10. x=C('Jack',20)
  11. print(x.__dict__)#输出实例对象的属性字典
  12. print(C.__dict__)#输出类的对象字典
  13. print(x.__class__)#<class '__main__.C'>输出了对象所属的类
  14. print(C.__bases__)#输出C类父类类型的元组
  15. print(C.__base__)#离他最近的父类
  16. print(C.__mro__)#类的层次结构
  17. print(A.__subclasses__())#输出A的子类列表

特殊方法

  1. #add和len方法
  2. class Student:
  3. def __init__(self,name):
  4. self.name=name
  5. def __add__(self, other):
  6. return self.name+other.name
  7. def __len__(self):
  8. return len(self.name)
  9. stu1=Student('张三')
  10. stu2=Student('李四')
  11. s=stu1+stu2
  12. print(s)
  13. print(stu1.__len__())
  14. print(len(stu1))

new与init创建对象过程

  1. #new方法
  2. class Person(object):
  3. def __new__(cls, *args, **kwargs):
  4. print('new被调用执行了,cls的id值为{0}'.format(id(cls)))
  5. obj=super().__new__(cls)
  6. print('创建的对象id为{0}'.format(id(obj)))
  7. return obj
  8. def __init__(self,name,age):
  9. self.name=name
  10. self.age=age
  11. print('object这个类的对象id为{0}'.format(id(object)))
  12. print('Person这个类对象的id为{0}'.format(id(Person)))
  13. p1=Person('张三',20)
  14. print('p1这个Person类的实例对象id为{0}'.format(id(p1)))

输出结果:

object这个类的对象id为140717676194640
Person这个类对象的id为2649027430288
new被调用执行了,cls的id值为2649027430288
创建的对象id为2649027214400
p1这个Person类的实例对象id为2649027214400

类的浅拷贝与深拷贝

  1. class CPU:
  2. pass
  3. class Disk:
  4. pass
  5. class Computer:
  6. def __init__(self,cpu,disk):
  7. self.cpu=cpu
  8. self.disk=disk
  9. cpu1=CPU()
  10. cpu2=cpu1
  11. print(cpu1,id(cpu1))
  12. print(cpu2,id(cpu2))
  13. print('---------')
  14. disk=Disk()
  15. computer=Computer(cpu1,disk)
  16. import copy
  17. computer2=copy.copy(computer)
  18. print(computer,computer.cpu,computer.disk)
  19. print(computer2,computer2.cpu,computer2.disk)
  20. print("---------------")
  21. #深拷贝
  22. computer3=copy.deepcopy(computer)
  23. print(computer,computer.cpu,computer.disk)
  24. print(computer3,computer3.cpu,computer3.disk)

输出结果:

<__main__.CPU object at 0x00000285642B8400> 2771934479360
<__main__.CPU object at 0x00000285642B8400> 2771934479360
---------
<__main__.Computer object at 0x0000028564827C70> <__main__.CPU object at 0x00000285642B8400> <__main__.Disk object at 0x0000028564296100>
<__main__.Computer object at 0x0000028564839520> <__main__.CPU object at 0x00000285642B8400> <__main__.Disk object at 0x0000028564296100>
---------------
<__main__.Computer object at 0x0000028564827C70> <__main__.CPU object at 0x00000285642B8400> <__main__.Disk object at 0x0000028564296100>
<__main__.Computer object at 0x000002856486AD90> <__main__.CPU object at 0x00000285648771C0> <__main__.Disk object at 0x0000028564877190>
 

变量的赋值操作:

只是形成两个变量,实际上还是指向同一个对象 

浅拷贝:

Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

深拷贝:

使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同。

模块的导入

  1. import math#数学运算
  2. print(id(math))
  3. print(type(math))
  4. print(math)
  5. print('--------')
  6. print(math.pi)
  7. print(dir(math))
  8. print(math.pow(2,3),type(math.pow(2,3)))
  9. print(math.ceil(9.001))#向上取整
  10. print(math.floor)#向下取整
  11. from math import pi
  12. print(pi)

 右键目录标记为根目录可导入自己创建的模块

 以主程序方式运行:

  1. def add(a,b):
  2. return a+b
  3. def div(a,b):
  4. return a/b
  5. if __name__ == '__main__':#只有点击运行该文件时,才会执行运算
  6. print(add(2,3))

  1. import package1.module_A as ma#包名.模块名称
  2. print(ma.a)
  3. #导入带有包的模块时注意事项
  4. import package1
  5. import calc
  6. #使用import方式进行导入时,只能根包名或模块名
  7. from package1 import module_A
  8. from package1.module_A import a
  9. #使用from...impor可以导入包,模块,函数,变量

常用内容模块

  1. import sys#与Python解释器及其环境操作相关的标准库
  2. print(sys.getsizeof(24))
  3. print(sys.getsizeof(28))
  4. print(sys.getsizeof(True))
  5. print(sys.getsizeof(False))
  6. import time#提供了事件相关的各种函数的标准库
  7. print(time.time())
  8. print(time.localtime(time.time()))
  9. import urllib.request#用于读取来自网上服务器的数据标准库
  10. print(urllib.request.urlopen('http://www.baidu.com').read())
  11. import math#提供标准算术运算函数的标准库
  12. print(math.pi)
  13. import decimal#用于进行精确控制运算精度、有效数位和四舍五入的十进制运算
  14. import os#提供了访问操作系统服务功能的标准库
  15. import calendar#提供了与日期相关的各种函数的标准库
  16. import json#用于JSON序列化和反序列化对象
  17. import re#用于在字符串中执行正则表达式匹配和替换
  18. import logging#提供了灵活的记录事件、错误、警告和调试信息等日志信息功能

第三方功能包

  1. import schedule#pip install schedule安装
  2. import time
  3. def job():
  4. print('哈哈-')
  5. schedule.every(3).seconds.do(job)
  6. while True:
  7. schedule.run_pending()
  8. time.sleep(1)

编码格式

#Python的解释器使用的是Unicode(内存)
#.py文件在cipanshang
#通过encoding=gbk改编码格式,默认为utf-8

文件读写操作

  1. #读取文件
  2. file=open('a.txt','r')
  3. print(file.readlines())
  4. file.close()
  5. #写文件
  6. file1=open('b.txt','w')
  7. file1.write('helloworld')
  8. file1.close()

with语句

  1. with open('a.txt','r') as file:#with调用上下文管理器执行enter和exit方法
  2. print(file.read())

os模块的常用函数

  1. #os模块与操作系统相关的一个模块
  2. import os
  3. '''os.system('notepad.exe')
  4. os.system('calc.exe')'''
  5. os.startfile('C:\\Program Files (x86)\\Tencent\\QQ\\Bin')

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/728922
推荐阅读
相关标签
  

闽ICP备14008679号