抽象
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. 本章小结
以上是关于抽象的主要内容,如果未能解决你的问题,请参考以下文章