碎碎念:我之前做的工作是技术研发产品经理,最近秋季校招想要转行测试开发相关岗位,于是在学python数据结构相关,在pycharm翻到了之前初学python时学的一些超级简单的基础。
欢迎佬们纠错~
八、函数
8.1 函数返回多个返回值
return后用,就可以连接多个返回值,且不限类型
def test():
return 1,2
x,y=test()
print(f"{x}{y}")
8.2 函数多种传参方式
8.2.1 位置参数 对应位置
def info(name,age,gender):
print(f"{name},{age},{gender}")
info('tom',20,'男')
8.2.2 关键字参数 用键等于值的形式
def info(name,age,gender):
print(f"{name},{age},{gender}")
info(name='tom',age=20,gender='男')
也可以不按顺序。也可以和位置参数混合使用,但必须位置参数在前且匹配参数顺序
8.2.3 缺省参数(默认参数)
为参数提供默认值,调用函数时可不传该默认参数的值,位置参数必须在默认参数前,当调用函数时没有传递参数,就默认是缺省函数对应的值
def info(name,age,gender='男'):
print(f"{name},{age},{gender}")
info('tom',20)
info('tom',20,'女') #也可以覆盖
8.2.4 不定长参数(可变参数)
用于不确定调用会传递多少个参数
(1)不定长-位置传递
*args表示即将传入不定长的参数,会根据参数的位置合并为一个元组
def info(*args):
print(f"{args}")
info('tom',1,2,3)
(2)不定长-关键字传递
def info(**kwargs): #根据健=值组成字典
print(f"{kwargs}")
info(name='tom',age=1,year=2,house=3) #必须是关键字=内容形式
8.3 函数作为参数传递
def test(com):
res=com(1,2)
print(f"{res}")
def com(x,y):
return x+y
8.4 lambda匿名函数(无名称)
!不能重复使用
def test(com):
res = com(1, 2)
print(f"{res}")
test(lambda x,y:x+y) #lamda 传入参数:函数体(一行代码)
9 文件
9.1 文件操作
9.1.1 打开文件
open(name(目标文件的字符串),mode(打开文件的模式只读、写入、追加),encoding(编码方式))
mode的三种模式:
r-只读
w-写入,如文件存在则原有内容会清空并重写,文件不存在则创建新的
a-追加,如文件存在则会编写到已有内容之后;如不存在则创建新文件写入
f=open("D:/pythonProject/1.txt","r",encoding="UTF-8") #注意文件路径是/
print(type(f))
9.1.2 读取文件
print(f"读取10个字节的结果:{f.read(10)}") #1、用f.read(x)方法读取x个字节
print(f"读取全部字节的结果:{f.read()}") #2、用f.read()方法读取全部字节,read会记录上一个读到了哪里
lines=f.readlines()#3、用lines=f.readlines()方法读取全部个字节
print(f"读取全部个字节的结果:{lines}")
line1=f.readline() #4、f.readline防区只读取一行
print(f"读取第一行:{line1}")
for line in open("python.txt","r"): #5、用循环读
9.1.3 文件的关闭
f.close()
9.1.4 文件的写入
f=open("D:/pythonProject/1.txt","w",encoding="UTF-8")
f.write("hi")
f.flush() #一定要有
9.1.5 文件的追加
f=open("D:/pythonProject/1.txt","a",encoding="UTF-8")
f.write("hi")
f.flush() #一定要有
10 异常
10.1 异常的捕获方式
10.1.1 基本捕获
try:
f=open("D:/pythonProject/2.txt","r",encoding="UTF-8") #可能出现错误的代码
except:
print("出现异常因为文件不存在")
f=open("D:/pythonProject/2.txt","w",encoding="UTF-8") #如果出现异常执行的代码
10.1.2 捕获指定异常
try:
print(name)
except NameError as e: #NameError是指定的类异常
print("出现了变量未定义的异常")
print(f"{e}") #e是报错的具体
10.1.3 捕获多个异常
try:
1/0
except (NameError,ZeroDivisionError) as e: #(x类异常,y类异常) as e
print("出现了变量为定义或除0的异常错误")
10.1.4 捕获所有异常
try:
1/0
except Exception as e: #Exception as e是捕获所有异常
print("出现异常了")
else: #没有异常时怎么办
print("没异常了")
finally: #无论有无异常都执行
f.close()
11 对象
11.1 用对象组织数据
class stu:
name=None #设计类
gender=None#成员变量
def say(self): #成员方法,self(表示类对象本身)必须要有self,无论是否需要
print(f"{self.name}") #在成员方法中访问成员变量
def __init__(self,name,gender): #构造时直接传参
self.name=name
self.gender=gender
def say2(selfself ,msg):
print(f"{msg}")
stu_1=stu() #第一种创建对象方法
stu_1.name='a' #对象属性赋值
stu_1.gender='nan'
#使用成员方法:
stu_1.say() #一、用self调用时无需传参
stu_1.say2("hihi")#二、调用时需要传参
stu_2=stu("b","2")#第二种构建成员对象方法,构造时直接传参,用def __init__(self,,),这种方法不需要在前面写name=none..
#获取对象中的记录
print(f"{stu_2.name}")
11.2 类内置方法
class student:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return f"student对象name{self.name},age{self.age}"
# __lt__ 小于(大于)符号比较
def __lt__(self, other):
return self.age<other.age
# __le__ 小于(大于)等于比较
def __le__(self,other):
return self.age<=other.age
# __eq__ 相等运算
def __eq__(self,other):
return self.age==other.age
stu1=student("zhou",12)
stu2=student("lin",10)
print(stu1)
print(str(stu1)) #这样就有新的类输出方式
print(stu1,stu2)
print(stu1<stu2)
print(stu1<=stu2)
12 面向对象
面向对象三大特性:继承、封装、多态。
私有成员变量/方法:以__开头
类对象对私有变量无法赋值也无法取值,私有方法也不能调用,类内部其他成员可以用私有成员/方法
12.1 继承
12.1.1 单继承
class phone:
mei=None
pro=None
def call(self):
print("通话")
class phone1(phone): #格式:class 子类(父类)
face=True
def call5g(self):
print("2022通话")
huawei=phone1()
huawei.call()
12.1.2 多继承
class 新类(父类1,父类2,父类3)
12.1.3 复写-在子类中重新定义
class phone:
mei=None
pro=None
def call(self):
print("通话")
class phone1(phone): #格式:class 子类(父类)
pro = "huawei"
def call(self):
print("2022通话")
phone.call(self)#父类成员被复写后,调用成员时只会调用最新的,如果要使用之前的父类成员
huawei=phone1()
huawei.call()
12.2 多态
class animal:
def speak(self):
pass #空实现 抽象类
class dog(animal):
def speak(self):
print("wang")
class cat(animal):
def speak(self):
print("miao")
def make(ani:animal): #ani 可以是 animal 类或其任何子类的实例
ani.speak() #接受animal实例,并调用其speak方法
d=dog()
c=cat()
make(d)
make(c)