一、匿名函数
和函数的作用一致,都是进行代码逻辑的封装,
区别1 在定义时,匿名函数可以不指定函数的名字
区别2 匿名函数执行实现简单的计算
区别3 匿名函数会自动将计算的结果返回
定义格式
#lambda 参数1,参数2...:计算逻辑(参数的处理逻辑)
# 匿名函数的使用
# 加法计算功能
def add(a,b):
data = a+b
return data
res = add(12,15)
print(res)
# 使用匿名函数实现
# 定义匿名函数时,需要指定一个变量接收
f = lambda a,b:a+b
# 使用变量调用匿名函数
print(type(f))
res2 = f(20,30)
print(res2)
使用场景
-
1-进行简单的数据计算
-
2-匿名函数当成参数进行传递,实现对数据的处理
匿名函数成参数使用
rdd = [1,2,3,4,5,6]
def reduce(f): # f = lambda a,b:a+b
# f参数 接收一个累加计算的函数计算的函数
# 实现数据的遍历过程
init = 0
for i in rdd:
# 遍历数据时进行数据的sum求和
# 实际的pyspark开发中,sum求和的计算不在reduce中实现,由开发人员自己编写计算逻辑
# init = init+i
init= f(init,i)
return init开发人员在调用reduce函数编写数据的累加计算逻辑
res= reduce(lambda a,b:a+b)
print(res)
二、面向对象介绍
面向对象开发的三大特性
-
封装
- 对问题的归纳总结,封装为一个类
-
继承
-
对已经封装的类进行继承,在原来类的基础上可以再次增加新的内容
-
人类的操作
-
性别,年龄,地址。。
-
上班
-
学习
-
吃饭
-
-
继承人类 原来的数据和行为都会被继承下来
-
性别,年龄,地址,手机号,收入
-
上班
-
学习
-
吃饭
-
睡觉
-
玩游戏
-
-
-
多态
-
同一个方法实现不同的操作
-
吃饭
-
吃炒饭
-
吃炒面
-
吃盖浇饭
-
-
面向对象的特性中,主要使用的是封装
继承和多态可以根据实际需求选择使用
三、类的构成
格式
-
关键字 class
class 类名:
属性
name = '张三'方法 def eat(self): def paly_game(self):
调用类创建对象
object = 类名() # 当前对象就是张三
执行某个行为
object.eat()
object.paly_game()
类的定义
原来类的定义方式
class Student:
# 类属性
name = None
age = None# 方法 def func(self): print('方法') # 处理属性数据 print(self.name) print(self.age)
使用类创建对象
s_obj = Student()
使用对象对数据进行赋值
s_obj.name = '张三'
s_obj.age = 20创建多个对象
s_obj2 = Student()
s_obj2.name = '李四'
s_obj2.age = 20使用类的方法进行数据处理
s_obj.func()
s_obj2.func()
四、面向开发的基本使用
根据需求定义类
-
关键字class
-
属性
- 变量
-
方法
-
函数
-
默认函数中必须有个self参数
-
self(自己)代表当前对象
-
如何将一项物品放入一个空间内?
# 使用面向对象方式开发程序
class Loading:
# 属性
name = None
container = None
# 方法
def open_func(self):
print(f'打开{self.container}')
def load_func(self):
print(f'把{self.name}放入{self.container}中')
def close_func(self):
print(f'关闭{self.container}')
l = Loading()
# 指定数据
l.name = '大象'
l.container = '冰箱'
# 执行数据处理方法
l.open_func()
l.load_func()
l.close_func()
# 如何把老虎关进笼子?
l2 = Loading()
l2.name='老虎'
l2.container='笼子'
# 执行数据处理方法
l2.open_func()
l2.load_func()
l2.close_func()
五、类中的属性
5-1 属性分类
类属性
class 类名:
# 类属性定义 name就是一个类属性
name = None
对象属性
class 类名:
# 类属性定义 name就是一个类属性
name = None
def func(self):
# age是对象属性
self.age = None
两种属性的区别
# 类中属性使用区别
class A:
# 类属性
name = '张三'
def func(self):
# 对象属性
self.age = 20
# 使用类创建对象
a = A()
# 使用对象获取类属性值和对象属性值
print(a.name)
a.func() # 执行方法定义对象属性
print(a.age)
# 直接使用类名字获取属性值
print(A.name)
print(A.age)# 类名不能直接获取对象数据的值
5-2 属性值的获取
类的外部获取
# 类中属性使用区别
class A:
# 类属性
name = '张三'
def func(self):
# 对象属性
self.age = 20
# 使用类创建对象
a = A()
# 使用对象获取类属性值和对象属性值
print(a.name)
a.func() # 执行方法定义对象属性
print(a.age)
# 直接使用类名字获取属性值
print(A.name)
print(A.age)# 类名不能直接获取对象数据的值
类的内部获取
使用self获取属性值进行操作
# 类的属性值获取
class A:
# 类属性定义
stu = {}
# 在类的方法中操作属性数据
def func(self):
self.age = 20
def func2(self):
# 操作类属性
self.stu['address'] = '北京'
# 操作对象属性
self.age = 25
# 使用类创建对象
a = A()
# 类的外部获取属性值
print(a.stu)
# 类的外部修改属性值
a.stu['name'] = '张三'
a.stu['gender'] = '男'
del a.stu['name']
# 再次获取属性
print(a.stu)
# 外部获取对象属性值
a.func()
print(a.age)
print('--------------')
# 调用方法2在类的内部处理属性值
a.func2()
print(a.stu)
print(a.age)
六、self的说明
# self 的说明
class Student:
name = None
age = None
def comment(self):
"""
自我介绍方法
:return:
"""
# 使用self来确认当前对象是谁
print(f'我叫{self.name},年龄{self.age}岁')
print(self)
# 使用类创建对象
s1 = Student()
s1.name = '张三'
s1.age = 20
s2 = Student()
s2.name = '李四'
s2.age = 25
# 两个对象调用相同方法
s1.comment() # s1对象调用方法 那么方法中slef就是s1对象
s2.comment() # s2对象调用方法 那么方法中slef就是s2对象
七、类的方法
-
魔法方法
-
类中自带的方法
-
__init__()
- 在创建类对象时会调用的方法
-
__str__()
- 在对对象进行print输出时调用
-
__del__()
- 在删除对象时会被调用
-
......
-
-
自定义方法
-
用户自己编写的方法
init魔法方法的使用
class A:
# 魔法方法 def __init__(self): print('创建对象调用') # 自定义方法 def func(self): print('自定义方法,需要创建对象后,使用对象调用才会执行')
创建对象会调用init方法
a1 = A()
使用对象调用func方法
a1.func()
-
7-1 魔法方法使用
# 类中的魔法方法
class A:
# 类属性
name = None
# 使用魔法方法 格式是固定的
# init 初始化方法 创建对象时会被自动执行
def __init__(self):
print('init被调用执行')
def __del__(self):
# 对象被销毁删除时会被自动执行
print('del被调用执行')
def __str__(self):
# 当对象被print输出时,会将str中返回值进行输出
return self.name
# 创建对象
a = A()
# 手动删除对象
# del a
# 输出对象
a.name = '张三'
# print时会自动调用str方法,获取返回值
print(a)
# 程序结束 对象会被自动删除
print('程序结束')
7-2 init魔法方法的传参
# init方法的传参
class A:
# name = None
# 可以使用init方法,在创建对象时给属性赋值
# 通过init的参数赋值
def __init__(self,name,age,gender='男'):
# 定义对象属性
self.name = name
self.age = age
self.gender = gender
# 使用类创建对象,在括号内传递init的参数数据
a = A('李四',20,'男')
# 在生成对象后才对属性赋值
# a.name = '张三'
# 直接获取属性值
print(a.name)
print(a.age)
print(a.gender)
a1 = A(name='王五',gender='男',age=22)
print(a1.name)