抽象

Posted elonjiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象相关的知识,希望对你有一定的参考价值。

1. 引言及抽象和结构

生成斐波那契数列的代码如下:

1 fibs = [0, 1]
2 num = int(input(How many num you want:))
3 for x in range(num-2):
4     fibs.append(fibs[-2] + fibs[-1])
5 print(fibs)
6 
7 结果:
8 How many num you want:8
9 [0, 1, 1, 2, 3, 5, 8, 13]

(1)让程序更抽象,可以让人更容易理解。

(2)函数,是结构化编程的核心。

 

2. 自定义函数

(1)使用def 语句定义函数,以实现结构化编程

 1 def fibs(num):
 2     fib_result = [0, 1]
 3     for x in range(num-2):
 4         fib_result.append(fib_result[-2] + fib_result[-1])
 5     return fib_result
 6 
 7 number = int(input(how many num do you want:))
 8 print(fibs(number))
 9 
10 结果:
11 how many num do you want:12
12 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

(2)可使用内置函数callable 判断某个对象是否可调用,返回布尔值True,False

(3)return 语句非常重要,用于从函数返回值。

  2.1 给函数编写文档

  给函数编写文档,便于其他人能够理解函数。放在函数开头的字符串称为文档字符串(独立的字符串),将作为函数的一部分被存储起来。

  可以使用 __doc__ 函数属性查询函数的解释,双下划线表示特殊属性。

1 def square(x):
2     Caluates the square of the number x.
3     return x * x
4 
5 print(square.__doc__)
6 
7 结果:
8 Caluates the square of the number x.

  2.2  所有函数都返回值,如果你没有告诉函数该返回什么,将返回None.

  ***2.3 不要让这种默认返回行带来麻烦。如果你在if 之类的语句中返回值,务必确保其他纷至也返回值,以免在调用者期望函数返回一个序列时,不小心返回了None。

 

3. 参数魔法

(1)能修改参数吗?

 1 #能修改参数吗?下面的例子不能
 2 def try_to_change(n):
 3     n = Mr.Gumby
 4     return n
 5 
 6 name = Mrs.Entity
 7 try_to_change(name)
 8 print(name)
 9 
10 结果:
11 Mrs.Entity
12 
13 上述修改并未成功,原因是,执行过程等同如下:
14 name = Mrs.Entity
15 
16 n = name
17 n = Mr.Gumby
18 try_to_change(name) 实际结果 改变的是n的值:Mr.Gumby
19 
20 name =  Mrs.Entity # name的指向并未发生改变
21 print(name):  Mrs.Entity

如果换成列表,则结果会不一样

#能修改参数吗?下面的例子能
def change(n):
    n[0] = Mr.Gumby
#    return n

names = [Mrs.Entity, Mrs.Thing]
change(names)
# change(names[:])
print(names)

结果:
[Mr.Gumby, Mrs.Thing]  #可以看出结果变了

原因,实际执行过程:
name 指向 列表[Mrs.Entity, Mrs.Thing];
执行change(name)函数,n 指向 name,
n = name,n= [Mrs.Entity, Mrs.Thing],name = [Mrs.Entity, Mrs.Thing]
n[0] = Mr.Gumby 修改n列表的只,因为n和name实际指向

 

 

 

4.作用域

 

5. 递归

 

6. 本章小结

以上是关于抽象的主要内容,如果未能解决你的问题,请参考以下文章

python基础18 ---多态与绑定方法

Python基础----继承派生组合接口和抽象类

python基础之继承派生组合接口和抽象类

Python基础(17)_面向对象程序设计(抽象类继承原理封装多态,绑定方法)

读书笔记--《Python基础教程第二版》--第六章 抽象

python基础教程之抽象