《Python基础教程》学习笔记——抽象

Python基础教程——抽象抽象懒惰是一种美德抽象和结构自定义函数给函数编写文档其实并不是函数的函数参数魔法值从哪里来我能修改参数吗关键字参数和默认值收集参数分配参数练习使用参数作用域递归两个经典案例:阶乘和幂另一个经典案例:二分查找小结抽象懒惰是一种美德例如,计算一些斐波那契数(一种数列,其中每个数偶数前两个数的和)。fibs = [0,1] for i in range(8): fibs.append(fibs[-2]+fibs[-1])运行代码,将包含前10个斐波那契数。>&g
摘要由CSDN通过智能技术生成

抽象

懒惰是一种美德

例如,计算一些斐波那契数(一种数列,其中每个数偶数前两个数的和)。

fibs = [0,1]
	for i in range(8):
	fibs.append(fibs[-2]+fibs[-1])

运行代码,将包含前10个斐波那契数。

>>> fibs
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

还可指定最终要得到的序列的长度:

fibs = [0,1]
num = int(input('How many Fibonacci numbers do you want?'))
for i in range(num-2):
	fibs.append(fibs[-2]+fibs[-1])
print(fibs)

让程序更抽象,可以如下:

num = input('How many numbers do you want?')
print(fibs(num))

以抽象的方式完成:只是让计算机这样做,而没有具体地告诉它如何做。

创建一个名为 fibs 的函数,并在需要计算斐波那契数时调用它。

如需在多个地方计算时,可以节省很多精力。

抽象和结构

抽象可以节省人力,还有个更重要的优点:抽象是程序能够被人理解的关键所在。

程序应非常抽象,如下载网页、计算使用频率、打印每个单词的使用频率。
如:

page = download_page()
freqs = compute_frequencies(page)
for word, freq in freqs:
	print(word, freq)

在这里只是让计算机去下载网页并计算使用频率,至于这些操作的具体细节,将在其他地方(独立的函数定义)中给出。

自定义函数

函数执行特定的操作并返回一个值,可以调用它(调用时可能需要提供一些参数——放在圆括号中的内容)。

要判断某个对象是否可调用,可使用内置函数 callable。

>>> import math
>>> x = 1
>>> y = math.sqrt
>>> callable(x)
False
>>> callable(y)
True

使用 def (表示定义函数)语句。

def hello(name):
	return 'Hello,' + name + '!'

可像使用内置函数一样使用这个函数。

>>> print(hello('world'))
Hello,world!
>>> print(hello('Gumby'))
Hello,Gumby!

编写一个函数,返回一个由斐波那契数组成的列表。就可以通过参数来获取数字。

def fibs(num):
	result = [0,1]
	for i in range(num-2):
		result.append(result[-2] + result[-1])
	return result

只需要调用函数 fibs 就可以了。

>>> fibs(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
>>> fibs(15)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

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

给函数编写文档

要给函数编写文档,以确保其他人能够理解,可添加注释(以#打头的内容)。
另外一种编写注释的方式,就是添加独立的字符串。

放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来。

代码演示:

def square(x)
	'Calculates the square of the number x.'
	return x * x

可以像下面这样访问文档字符串:

>>> square._doc_
'Calculates the square of the number x.'
注意, _doc_ 是函数的一个属性。
属性名中的双下划线表示这是一个特殊的属性。

特殊的内置函数help很有用。
在交互式解释器中,可使用它获取有关函数的信息,其中包含函数的文档字符串。

>>> help(square)
Help on function square in modul_main_:
square(x)
Calculates the square of the number x.

其实并不是函数的函数

在Python中,有些函数什么都不返回。
在Python中,函数就是函数,即使它严格来说并非函数。什么都不返回的函数不包含return语句,或者包含return语句,但没有在return后面指定值。

def test():
	print('This is printed')
	return
	print('This is not')

这里使用return语句只是为了结束函数。

>>> x = test()
This is printed

如上,跳过了第二条print语句。
test什么都不返回,x指向什么?

>>> x
>>> 

什么都没有。

>>> print(x)
None

返回值:None。
由此,所有的函数都有返回值。
如果没有告诉它们该返回什么,将返回None。

参数魔法

值从哪里来

定义函数时,参数的值是怎么来的呢?

编写函数旨在为当前程序(甚至其他程序)提供服务,职责是确保它在提供的参数正确时完成任务,并在参数不对时以显而易见的方式失败。

注意,在def语句中,位于函数名后面的变量通常称为形参,而调用函数时提供的值称为实参

我能修改参数吗

在函数内部给参数赋值对外部没有任何影响。

>>> def try_to_change(n):
		n = 'Mr.Gumby'

>>> name = 'Mrs.Entity'
>>> try_to_change(name)
>>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值