集合set
add添加一个元素,update至少添加一个元素,remove删除一个元素不存在则报错,discard删除一个元素不存在不报错,pop随机删除一个元素
t1={'chenshi',10,20,30}
# t1.pop()
t1.add(40)
t1.update({50,60,70})
t1.update([80,90])
t1.remove('chenshi')
t1.discard(10)
print(t1)
{70, 40, 80, 50, 20, 90, 60, 30}
子集,超集,交集判断
t1={'chenshi',10,20,30}
t2={10,20}
t3={10,20,100}
t4={200,300}
print(t2.issubset(t1))
print(t1.issuperset(t2))
print(t1.issuperset(t3))
print(t1.isdisjoint(t3))
print(t1.isdisjoint(t4))
True
True
False
False
True
差并交和对称差集
t1={'chenshi',10,20,30}
t2={10,20}
t3={10,20,100}
t4={200,300}
print(t1.intersection(t2))
print(t1 & t2)
print(t1.difference(t2))
print(t1.symmetric_difference(t3))
print(t1 ^ t3)
{10, 20}
{10, 20}
{30, 'chenshi'}
{100, 'chenshi', 30}
{100, 'chenshi', 30}
集合生成式
set1={i*i for i in range(1,10)}
print(set1)
{64, 1, 4, 36, 9, 16, 49, 81, 25}
字符串驻留
函数创建
def cable(a,b):
c=a+b
return c
k=cable(1,5)
print(k)
6
参数传递:位置传参,关键词传参
print函数的参数
def print(self, *args, sep=' ', end='\n', file=None)
print('hello',end='\t')
print("word")
hello word
个数可变的位置参数,输出结果为元组
def fyn(*args):
print(args)
fyn(10)
fyn(10,20)
fyn(10,20,30)
(10,)
(10, 20)
(10, 20, 30)
个数可变的关键字参数,结果为字典
def fyn(**args):
print(args)
fyn(a=10)
fyn(a=10,b=20)
fyn(a=10,b=20,c=30)
{'a': 10}
{'a': 10, 'b': 20}
{'a': 10, 'b': 20, 'c': 30}
异常处理try-except-else-finally,traceback
try:
a=int(input("first number"))
b=int(input("second number"))
c=a/b
except BaseException as e:
traceback.print_exc()
else:
print("result=",c)
finally:
print("Thank you for use")
first number5
second number0
Thank you for use
Traceback (most recent call last):
File "F:\PythonProject\venv\Demo3.py", line 19, in <module>
c=a/b
ZeroDivisionError: division by zero
python中的类与对象的创建
class Student:
# 类属性
id=1
def __init__(self,name,age):
self.name=name #实例属性
self.age=age
# 实例方法
def eat(self):
print('学生吃饭')
# 静态方法
@staticmethod
def play():
print("学生玩")
# 类方法
@classmethod
def study(cls):
print('学生学习')
stu1=Student("yasuo",17)
stu1.eat()
print(stu1.id)
print(stu1.name,stu1.age)
Student.eat(stu1)
类属性由类维护,多个对象共享(区别于C++)
类方法,可以直接用类名访问,不需要对象参数(区别于实例方法)
静态方法,直接用类名访问,不需要任何参数(cls,self都不需要)
动态绑定,python是动态语言,创建对象之后可以动态地绑定属性和方法
stu1.gender='女'
print(stu1.gender)
def show():
print("类之外定义的叫函数")
stu1.show=show
stu1.show()
女
类之外定义的叫函数
python私有属性以及强行访问私有属性的办法
def __init__(self,name,age,gender):
self.name=name #实例属性
self.age=age
self.__gender=gender #私有属性
print(dir(stu1))
print(stu1._Student__gender)
['_Student__gender', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'eat', 'id', 'name', 'play', 'show', 'study']
男
类的继承 默认继承object类,可以多继承(类似c++),子类需要调用父类构造方法
class Student:
# 类属性
id=1
def __init__(self,name,age,gender):
self.name=name #实例属性
self.age=age
self.__gender = gender # 私有属性
# 实例方法
def eat(self):
print('学生吃饭')
# 静态方法
@staticmethod
def play():
print("学生玩")
# 类方法
@classmethod
def study(cls):
print('学生学习')
class Master(Student):
def __init__(self,name,age,gender,phone):
super().__init__(name,age,gender)
self.phone=phone
master1=Master('cheng',3,'女',163)
master1.eat()
class A(object):
pass
class B(object):
pass
class C(A,B):
pass
方法重写,和java一样,调用父类方法super().方法名()
object类,所有类的父类,内置函数dir()可以查看指定对象所有属性,__str__()方法,用于返回一个对于“对象的描述”,会被print方法调用
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return '我叫{0},今年{1}岁了'.format(self.name,self.age)
person1=Person('销户',18)
print(dir(person1))
print(person1) #默认调用str()方法
多态,python是动态语言
class Person:
def eat(self):
print('人吃饭')
class Child(Person):
def eat(self):
print('小孩吃饭')
def fun(obj):
obj.eat()
fun(Person())
fun(Child())
object类的特殊属性与方法
类似于C++重载运算符
class A:
def __init__(self,name):
self.name=name
def __add__(self, other):
print(self.name+other.name)
def __len__(self):
return len(self.name)
b=A("jack")
c=A("tom")
print(b+c)
print(len(b))
new创建对象,init为创建的实例对象属性赋值
浅拷贝
注意与c++不同,对象直接赋值的实质是另起了个变量名指向同一个内存空间,并没有分配新的内存空间,类似于c++中的引用,不算拷贝,这叫类对象的赋值操作!
class Cpu:
pass
class Disk:
pass
class Computer:
def __init__(self,cpu1,disk1):
self.cpu1=cpu1
self.disk1=disk1
cpu1=Cpu()
disk1=Disk()
computer1=Computer(cpu1,disk1)
import copy
computer2=copy.copy(computer1)
print(computer1,computer1.cpu1,computer1.disk1)
print(computer2,computer2.cpu1,computer2.disk1)
<__main__.Computer object at 0x000001D16BE50F70> <__main__.Cpu object at 0x000001D16BE50FD0> <__main__.Disk object at 0x000001D16BE50FA0>
<__main__.Computer object at 0x000001D16BE50D90> <__main__.Cpu object at 0x000001D16BE50FD0> <__main__.Disk object at 0x000001D16BE50FA0>
深拷贝,子对象的地址也会改变
class Cpu:
pass
class Disk:
pass
class Computer:
def __init__(self,cpu1,disk1):
self.cpu1=cpu1
self.disk1=disk1
cpu1=Cpu()
disk1=Disk()
computer1=Computer(cpu1,disk1)
import copy
computer2=copy.deepcopy(computer1)
print(computer1,computer1.cpu1,computer1.disk1)
print(computer2,computer2.cpu1,computer2.disk1)
<__main__.Computer object at 0x000001F322B1FF70> <__main__.Cpu object at 0x000001F322B1FFD0> <__main__.Disk object at 0x000001F322B1FFA0>
<__main__.Computer object at 0x000001F322B1FD30> <__main__.Cpu object at 0x000001F322B1F790> <__main__.Disk object at 0x000001F322B1F700>
模块(module)一个.py文件就是一个模块,可以包含类,函数和语句。
import 包名.模块名
from 模块名 import 类/函数/变量
from 包名 import 模块名
在pycharm中导入自己的模块记得在包路径下右键选择make directory as/sources root
demo6
def addd(a,b):
return a+b
import math
print(math.pi)
demo7
import demo6
print(demo6.addd(1,3))
3.141592653589793
4
if __name__ == '__main__': #只有当点击运行demo6时,才会执行后面的代码
第三方模块安装 pip install 模块名
io
readlines 读取所有内容,返回列表
ANSI就是UTF-8
file=open('test.txt','r')
print(file.readlines())
file.close()
二进制模式可以用来处理图片等
with语句管理上下文资源,能保证文件正确的关闭。实现了__enter__和__exit__特殊方法,就视为遵守上下文管理协议,其实例对象就可以视为上下文管理器。
with open('test.txt','r') as file:
print(file.readlines())
os模块
import os
os.system('notepad.exe')
os.system('calc.exe') #cmd命令行
os.startfile('D:\\Tencent\QQ\\Bin\\QQScLauncher.exe') #打开可执行文件