【python教程】3、抽象(函数、递归函数、类、继承)
2021-07-27 20:52
281 查看
一、抽象-自定义函数
判断某个对象是否调用,使用内置函数callable
自定义函数:使用关键字def
1、实参
位置实参:基于实参的顺序
关键字实参:在实参中将名称和值关联,无需考虑实参顺序
2、形参
默认值:提供实参,用实参值;没有传实参则使用形参的默认值,先列出无默认值的形参,再列出有默认值的。才能正确地读位置实参。默认值设置为空字符串。
*params:创建名为 toppings 的空元组,将收到值都封装到这个元组中。可收集任意数量的位置实参,但不会收集关键字参数。
**kwargs:
**让Python创建名为kwargs的空字典,将收到值对封装到字典中。可收集任意数量的关键字参数
3、文档字符串
在函数体的第一行使用一对三个单引号 ''' 或者一对三个双引号 """ 来定义,将作为函数的一部分存储起来。
使用
function.__doc__访问文档字符串。
__doc__(注意双下划线)是函数的一个属性。
使用惯例:它的首行简述函数功能,第二行空行,第三行为函数的具体描述。
4、递归函数:调用自身
# 这个程序运行一段时间后,会引发异常(调用函数时会消耗一些内存,耗尽所有内存空间后,会导致程序终止并显示‘超过最大递归深度’)。 def recursion(): return recursion() # 这个函数中的递归成为无穷递归
对你有所帮助的递归函数,通常包含下面两部分:
- 基线条件(针对最小的问题):满足这种条件时函数将直接返回一个值。
- 递归条件:包含一个或多个调用,这些调用旨在解决问题的一部分。
关键:将问题分解为较小的部分,可避免递归没完没了,因为问题终将被分解成基线条件可以解决的最小问题。
案例一:阶乘--计算数字 n 的阶乘。阶乘的数学定义,表述如下:
- 1的阶乘为1;
- 对于大于1的数字n:其阶乘为n-1的阶乘再乘以n。
def factorial(n): if n == 1: return 1 else: return n * factorial(n-1)
案例二:幂--计算一个数字的整数次幂。递归式的定义如下:
- 对于任何数字x,power(x, 0)都为1;
- n>0时,power(x, n)为power(x, n-1)与x的乘积。
def power(x, n): if n == 0: return 1 else: return x * power(x, n-1)
tips:可使用递归完成的任何任务都可使用循环来完成。大多数情况下,使用循环的效率比递归要高。但递归的可读性可能更高,且有时要高很多。
二、再谈抽象
1、对象
在面向对象编程中,对象意味着一系列数据(属性)以及一套访问和操作这些数据的方法。
使用对象(而非全局变量和函数)的好处:
- 多态:对不同类型的对象执行相同的操作
- 封装:对外部隐藏有关对象工作原理的细节
- 继承:可基于通用类创建出专用类
2、类
介绍
- 根据类来创建对象被称为实例化
- python中首字母大写的名称指的是类
- 类中的函数称为方法
__init__()
- 是一个特殊的方法
- 开头末尾各有两个下划线,是一种约定
- 旨在避免Python默认方法与普通方法发生名称冲突
self
- init(self)
- 形参self必不可少,还必须位于其他形参的前面
- 与类相关联的方法调用都自动传递实参self
- 一个指向实例本身的引用,让实例能够访问类中的属性和方法
属性
- 以self为前缀的变量可供类中的所有方法使用,还可通过类的任何实例来访问这些变量
- self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例
- 可通过实例访问的变量称为属性
- 初始值 类中的每个属性都必须有初始值,哪怕这个值是0或空字符串
- 在方法__init__()内指定0这种初始值是可行的;如果你对某个属性这样做了,就无需为它提供初始值的形参
3、继承
一个类继承继承另一个类时,它将自动获得另一个类的所有属性和方法。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法
子类:
- 创建子类时,父类必须包含在当前文件中,且位于子类前面
- 子类__init__()接受创建Car实例所需的信息
- super()是一个特殊函数,帮助Python将父类和子类关联起来
- super()让Python调用父类的方法__init__(),让子类实例包含父类的所有属性。父类也称为超类
重写:子类中定义与父类方法同名一个方法
实例用作属性:一个Battery的实例用作ElectricCar类的一个属性
相关文章推荐
- python函数教程:Python递归函数 二分查找算法实现解析
- Python基础教程 第6章: 抽象(函数) 学习笔记
- Python教程学习简记2--Python 函数调用 定义函数 函数的参数 递归函数
- Python学习教程(六)——抽象之函数
- python基础教程---更加抽象,类,继承多态封装
- Python基础教程--抽象,函数,参数,递归,作用域
- Python基础教程之函数与模块
- MIT Python 第四课函数抽象与递归简介 函数调用与原代码的区别
- python入门第六节(变量、参数的传递、浅拷贝和深拷贝、参数的类型、lambda表达式、eval()函数、递归函数)
- python学习第四周:函数与递归函数·作业20141224
- Python 简明教程 --- 15,Python 函数
- Python简明教程(一)数据类型、逻辑控制、函数
- python双下划线含义、MethodType把函数变为方法以及类继承
- 简明Python3教程 9.函数
- [python3教程]第四章.定义函数
- Python super()函数使用及多重继承
- 学习笔记(08):Python入门教程-函数的默认参数
- Python+Django+SAE系列教程2-----Python种的函数、模块和数据结构
- python教程18--《函数进阶-函数健壮性、lambda、位置参数匹配》
- Python基础教程,第二讲,变量、语法、函数、用户输入、模块