Python函数、类
一、函数
1.函数的定义
函数就是把一段具有独立功能的代码封装组织成一个小模块,在需要的时候在进行调用。基本的定义格式如下(其中入参和返回值可以没有),其中函数名采用小写形式:
def <函数名>(入参1,入参2…)
<代码块>
return <返回值>
2.函数的调用和参数传递
(1)函数调用形式
若函数中无返回值:函数名(入参值)
若函数中有返回值:变量=函数名(入参值)
(2)可选参数传递
函数定义时,可以为某些参数定于默认值,作为可选参数(可选参数的位置必须放在非可选参数的后面),基本形式如下:
def <函数名> (非可选参数,可选参数)
<函数体>
return <返回值>
例如:
#函数的定义与使用
#函数的定义与使用
def fact(m,n=2):
s=1
for i in range(1,m+1):
s=s*i
return s//n
result1=fact(5) #可选参数直接取默认值
print(result1)
result2=fact(5,4) #对可选参数重新赋值
print(result2)
输出结果为:
60
30
(3)可变参数传递
入参的可数是可变的,采用“*b”的形式表示,例如:
#函数的定义与使用:可变参数传递
def fact(m,*b):
s=1
for i in range(1,m+1):
s=s*i
for j in b:
s=s*j
return s
result1=fact(5,2) #可变参数仅赋值为2
print(result1)
result2=fact(5,2,3,4,5) #可变参数赋值为2,3,4,5
print(result2)
输出结果为:
240
14400
(3)参数传递方式
参数传递的方式分为两种:根据位置的传递、根据参数名的传递,两者的区别如下:
#函数调用中参数传递的方式
#基于位置的传递
def fact(m,n):
s=1
for i in range(1,m+1):
s=s*i
return s//n
result1=fact(5,2) #调用中根据函数中参数对应的位置分别赋予m值为5,n的值为2
print(result1)
result2=fact(m=5,n=2) #根据函数中参数名称,分别赋予入参值
print(result2)
二、类
1.类的定义
-
类是对一批具有相同属性和方法的对象的抽象。类的基本定义格式如下,其中类名的首字母大写:
class <类名>:
def 方法1 (self,参数列表1):
<执行指令1>
def 方法2 (self,参数列表2):
<执行指令2>
其中,类的方法中的第一个参数必须是self。 -
定义一个空类的方法:
class <类名>:
pass -
创建实例的方法
当一个类定义好之后,使用该类创建实例的基本格式如下:
实例变量=类名()
类的创建实例如下,其中init()方法为类的初始化方法,当创建实例的时候就会调用该方法:
#类的定义
class Student():
def __init__(self,id,sname,age,height):
self.id=id
self.sname=sname
self.age=age
self.height=height
def printinfo(self):
print("学生id:",self.id)
print("学生姓名:",self.sname)
print("学生年龄:",self.age)
print("学生身高:",self.height)
s1=Student(1,'张三',20,165)
s1.printinfo()
执行结果如下:
学生id: 1
学生姓名: 张三
学生年龄: 20
学生身高: 165
2.类的继承
通过使用类的继承可以减少代码的冗余度,实现代码的重复使用。
- 子类可直接继承父类中的属性和方法
基本实现代码如下:
#类的继承
class People(): #父类
def __init__(self,id,name,sex):
self.id=id
self.name=name
self.sex=sex
def printinfo(self):
print("身份信息:",self.id)
print("姓名:",self.name)
print("性别:",self.sex)
class Student(People): #子类括号中的类名表示继承的父类
pass
s1=Student(123,'张三','男') #对子类创建一个实例
s1.printinfo()
运行结果如下:
身份信息: 123
姓名: 张三
性别: 男
- 派生
子类定义自己的属性或者方法,若方法名可以与父类中的方法名相同,则是对父类方法的重写。例如:
#类的继承
class People(): #父类
def __init__(self,id,name,sex):
self.id=id
self.name=name
self.sex=sex
def printinfo(self):
print("身份信息:",self.id)
print("姓名:",self.name)
print("性别:",self.sex)
class Student(People): #子类括号中的类名表示继承的父类
def printinfo(self): #子类中定义一个方法printinfo,与父类的方法名相同
print('这是子类自己的方法')
s1=Student(123,'张三','男') #对子类创建一个实例
s1.printinfo()
输出结果为:
这是子类自己的方法
- 若子类中重写的父类的方法中,还需要使用父类方法的功能,则可以通过super函数来实现,例如:
#类的继承
class People(): #父类
def __init__(self,id,name,sex):
self.id=id
self.name=name
self.sex=sex
def printinfo(self):
print("身份信息:",self.id)
print("姓名:",self.name)
print("性别:",self.sex)
class Student(People): #子类括号中的类名表示继承的父类
def printinfo(self): #子类中定义一个方法printinfo,与父类的方法名相同
super().printinfo() #通过super来调用父类中与子类中重名的方法
print('这是子类自己的方法')
s1=Student(123,'张三','男') #对子类创建一个实例
s1.printinfo()
在多继承(一个子类继承多个父类)情况下,使用super函数重用父类的方法只能调用一个父类,若想指定父类可以使用父类名.方法名(self) 的方式,例如:
class People():
def __init__(self,id,name):
self.id=id
self.name=name
def printinfo(self):
print("身份信息:",self.id)
print("姓名:",self.name)
class School():
def __init__(self,coursename):
self.coursename=coursename
def printinfo(self):
print("课程的名称为:",self.coursename)
class Student(People,School): #子类继承多个父类
def __init__(self,id,name,grade): #子类中定义了与父类重名的方法
People.__init__(self,id,name) #要想调用特定父类的构造器使用父类名.__init__方式
self.grade=grade
def printinfo(self):
print('身份信息为:',self.id)
print('学生姓名为:',self.name)
print('学生成绩为:',self.grade)
s1=Student('123','张三',80) #对子类创建一个实例
s1.printinfo()
输出结果为:
身份信息为: 123
学生姓名为: 张三
学生成绩为: 80