欢迎给我邮箱一起共同学习python一起进步:
函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里函数的计算可随时调用。
简单定义:“函数式编程"是一种"编程范式”(programming paradigm),也就是如何编写程序的方法论。
它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。
函数是"第一等公民"
所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
没有"副作用"
所谓"副作用"(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。
优点
面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。
特点:
class Student:
# 数据抽象
def __init__(self, name, age):
"""初始化数据
:param name:
:param age:
"""
self.name = name
self.age = age
# 行为抽象
def eat(self):
"""吃饭"""
print(f'{self.name}正在吃饭')
def study(self, course_name):
"""学习"""
print(f'{self.name}正在学习{course_name}')
def play(self, game_name):
"""玩游戏"""
print(f'{self.name}正在玩{game_name}')
def watch_av(self):
"""看电影"""
if self.age < 18:
print(f'{self.name}未满18岁')
else:
print(f'随便看')
from example02 import Student
if __name__ == '__main__':
stu1 = Student('tian', 22) # 创建一个stu1对象,其中属性name:tian,age:22
stu2 = Student('yu', 23)
# Student.study(stu1, 'English')
stu1.study('English') # 通过stu1对象调用study方法
stu2.play('打牌')
stu2.name = '小天'
stu2.age = 12 # 修改stu2的age属性值
stu2.watch_av()
print(stu2.name, stu2.age) # 打印stu2的name和age属性对应的值
我们在类里面写的函数,通常称之为方法,它们基本上都是发给对象的消息。
但是有的时候,我们的消息并不想发给对象,而是希望发给这个类(类本身也是一个对象),
这个时候,我们可以使用静态方法或类方法。
# 定义一个静态方法
@staticmethod
def is_valid(a, b, c):
return a + b > c and b + c > a and a + c > b
# 定义一个类的类方法
@classmethod
def is_valid(a, b, c):
return a + b > c and b + c > a and a + c > b
class Person:
def __init__(self, name, sex):
self.name = name
self.sex = sex
def eat(self):
print(f'{self.name}正在吃饭!')
def sleep(self):
print(f'{self.name}睡觉')
def do_work(self):
pass
class Student(Person):
def __init__(self, name, sex, grad):
super().__init__(name, sex)
self.grad = grad
def do_work(self):
return f'work_hard study day and day'
class Teacher(Person):
def __init__(self, name, sex, book):
super().__init__(name, sex)
self.book = book
def do_work(self):
return f'教{self.book}课'
面向对象编程的思想通过向对象发送消息来实现达到解决问题,最重要的就是对象。面向对象编程最难最重要的就是定义类,类中包括了对象的属性和方法。面向对象编程对比其它编程范式带来很高的编程效率,提高模块的独立性。