🤠python进阶知识点

type
status
date
slug
summary
tags
category
icon
password
 
 
😀
本文讲述python进阶知识点,主要包括函数与面向对象
 

📝 函数

函数的参数

1.函数的参数都是位置参数,对号入座,也可以通过参数名=参数值的方式 2.命名关键字参数,强制 * 之后的参数数名=参数值的方式传参 def is_triangle(*, a, b, c): xxx print(is_triangle(c=5, b=4, a=3)) 3.可变参数*args来接收任意数量的参数,*args并不能处理带参数名的参数
4.同时使用可变参数和关键字参数,参数名就是字典中键值对的键,而参数值就是字典中键值对的值,但不带参数名的参数(位置参数)必须出现在带参数名的参数(关键字参数)之前
5.可变参数会被处理成一个元组,而关键字参数会被处理成一个字典
 

高阶函数

1.函数本身也可以作为函数的参数或返回值,叫高阶函数
2.filter(规则True,输入输出)和map(规则,输入输出)函数就是高阶函数
 

Lambda函数

1.匿名函数只能有一行代码,代码中的表达式产生的运算结果就是这个匿名函数的返回值
2.fac = lambda (参数): 返回值,本质上是个函数名OP,可作为参数,调用为fac()
3.归约(reduce)

装饰器

1.给函数加新功能,装饰器本身是一个函数,参数是被装饰的函数或类,返回值是一个带有装饰功能的函数
2.取消装饰器,Python标准库functools模块的wraps函数也是一个装饰器,我们将它放在wrapper函数上,这个装饰器可以帮我们保留被装饰之前的函数,这样在需要取消装饰器时,可以通过被装饰函数的__wrapped__属性获得被装饰之前的函数。
3.装饰器函数本身也可以参数化

递归

1.归调用一定要确保能够快速收敛,归如果不能迅速收敛,很可能会引发栈溢出错误,从而导致程序的崩溃 2.执行性能是比较糟糕的 3.认将函数调用的栈结构最大深度设置为1000层。如果超出这个深度,就会发生上面说的RecursionError。当然,我们可以使用sys模块的setrecursionlimit函数来改变递归调用的最大深度,例如:sys.setrecursionlimit(10000)
 
 

📝 面向对象

基础概念

1.面向对象编程:把一组数据和处理数据的方法组成对象,把行为相同的对象归纳为,通过封装隐藏对象的内部细节,通过继承实现类的特化和泛化,通过多态实现基于对象类型的动态分派。 2.方法的第一个参数通常都是self,调用方法有两种,对象提前和提后,成员变量的访问都是self.
3.魔术方法魔法方法,__xx__
4.封装继承多态
 
5.给对象属性名添加前缀下划线的方式来说明属性的访问可见性,__name表示一个私有属性,_name表示一个受保护属性,但如果你知道更换名字的规则仍然可以访问到它们??
6.property装饰器为“私有”属性提供读取和修改的方法,用的比较少 7.C、C++等语言则不属于动态语言,但是不希望临时增加,对于Student类来说,可以在类中指定__slots__ = ('name', 'age'),这样Student类的对象只能有name和age属性
8.对象方法、类方法、静态方法都可以通过类名.方法名的方式来调用,区别在于方法的第一个参数到底是普通对象还是类对象,还是没有接受消息的对象
 
 

继承与多态

1.继承和多态 class Student(Person): 与 super().__init__(name, age)
2.如果定义一个类的时候没有指定它的父类是谁,那么默认的父类是object类。object类是Python中的顶级类 3.在实际开发中,我们经常会用子类对象去替换掉一个父类对象,这是面向对象编程中一个常见的行为,也叫做“里氏替换原则”
 

应用

1.继承和多态 2.我们可以从需求的描述中找出名词和动词,名词通常就是对象或者是对象的属性,而动词通常是对象的行为 3.类之间的关系: is-a关系(继承)has-a关系(关联)和use-a关系(依赖) 4.枚举是可迭代类型,简单的说就是可以将枚举类型放到for-in循环中
5.运算符重载,魔术方法__lt__中的lt是英文单词“less than”的缩写
6.抽象方法就是只有声明没有实现的方法声明这个方法是为了让子类去重写这个方法
上一篇
python基础知识点
下一篇
vue基础知识
Loading...
文章列表
一枚热爱技术与产品的产品经理
基本信息
薯塔AI
产品修炼
技术分享
编码知识
AI相关
行业知识