一.函数递归实例分析
1.字符串反转
例如将某字符串s反转后输出,根据我们之前所掌握的知识,可以通过
>>> s[::-1]
来实现字符串反转,即从后向前依次取出。
而如果使用函数递归,该如何实现呢?
由之前所学我们可以了解到,要想构成递归,我们需要函数+分支结构,要有递归链条和递归基例
像这样通过函数自我多次调用,最终将整个字符串反转
2.斐波那契数列
斐波那契数列天然的带有两个基例,即n=1orn=2时F(n)均等于1,当n>2,f(n)=f(n-1)+f(n-2),如下
二.Python类和对象
1.面向对象编程
面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法。其实,在前面章节的学习中,我们已经接触了封装,比如说,将乱七八糟的数据扔进列表中,这就是一种简单的封装,是数据层面的封装;把常用的代码块打包成一个函数,这也是一种封装,是语句层面的封装。
而代码封装,就是隐藏具体的代码,仅仅留下供用户使用的接口,就比如我现在点击鼠标,为什么电脑就会有相应的反应,我们也不需要知道它具体是如何工作的,用户只要知道怎么用就可以
而面向对象编程,可以更好的模拟出现实世界的事物(将其视为对象)
打个比方,若在某游戏中设计一个乌龟的角色,应该如何来实现呢?使用面向对象的思想会更简单,可以分为如下两个方面进行描述:
从表面特征来描述,例如,绿色的、有 4 条腿、重 10 kg、有外壳等等。
从所具有的的行为来描述,例如,它会爬、会吃东西、会睡觉、会将头和四肢缩到壳里,等等。
表面特征,就可以利用变量赋值来规定其特定的状态
行为,可以用函数来定义,即这个对象它能做什么,或者说能实现什么
在面向对象编程中,最为重要的有以下概念
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
我们从类开始理解
2.类的定义
比如人类是类,男人是类,学者是类,诸如这些有相同特点的对象的集合就是类,它是抽象的,不是具体存在的某一个体
进而,引出了对象这个概念,对象是类的实例化,是具体且唯一的,它包括类变量,实例变量和方法(这些内容我们将一一介绍)
定义类的语法格式
class 类名:
多个(≥0)类属性...
多个(≥0)类方法...
类名倘若只满足语法要求那你随便取,然而我们在具体规定时必须要考虑到程序的可读性,要求是
Python 的类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,
单词与单词之间不要使用任何分隔符。
比如这样
#!/usr/bin/python3
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
另外,上面还涉及到了类对象的属性引用和实例化
在python中,属性引用的标准语法均为:obj.name
类的定义与函数定义有些相似,都以:作为类体的开始,以统一缩进的部分作为类体,差别在于关键字不同
Python 的类定义由类头(指 class 关键字和类名部分)和统一缩进的类体构成,在类体中最主要的两个
成员就是类变量和方法。如果不为类定义任何类变量和方法,那么这个类就相当于一个空类,如果空类不需
要其他可执行语句,则可使用 pass 语句作为占位符。例如,如下类定义是允许的:
class Empty:
pass
然而这毫无意义
另外类中各成员的定义顺序没有影响,各成员间可以随意调用
类中最重要的是变量和方法,那么回顾上面的表面特征和行为,实际上对变量赋值就是定义了对象的特征,创建一个函数就是实现了对类中对象可以执行的某一行为的规定
其实,类属性指的就是包含在类中的变量;而类方法指的是包含类中的函数。换句话说,类属性和类方法
其实分别是包含类中的变量和函数的别称。需要注意的一点是,同属一个类的所有类属性和类方法,要保
持统一的缩进格式,通常统一缩进 4 个空格。
类属性的具体位置是在类中且在函数体之外
再给一个例子
class TheFirstDemo:
'''这是一个学习Python定义的第一个类'''
# 下面定义了一个类属性
add = 'http://c.biancheng.net'
# 下面定义了一个say方法
def say(self, content):
print(content)
三引号之内的内容是该类的说明文档,位置是类头之后,类体之前
先到这里