《笨办法学 python3》系列练习计划——21.函数可以返回东西

题目

前面的函数练习中,我们给函数撰写了 print() 语句使函数可以把运行后的结果打印出来。不过我们并不总是需要把结果打印出来,在实际编写程序的时候我们更多的是需要使用函数的结果做其他事情(而不是打印出来)。
这就是本题的一个重点 return 的使用。先看个小栗子,并且简单说明一下:

def my_add(a, b):
    """
    其实这里可以用 三引号 写函数的说明文档的。但是也要遵循缩进规则
    就像我们用 help 或者 pydoc 擦看的内容一样。
    这个函数实现了两个数字相加的功能
    """
    return a + b

# 接下来调用看看
my_add(2, 3)

# 打印函数看看
print(my_add(2, 3))

《笨办法学 python3》系列练习计划——21.函数可以返回东西_第1张图片

删掉三行注释之后这个函数只有两行内容,第一行我们比较熟悉了:定义了一个拥有两个参数函数 my_add 。我们来看第二行代码:

  1. 我们调用了函数的两个参数:ab
  2. 然后我们让两个函数执行了加法运算 a + b
  3. 最后 python 会执行返回 return ,把 a + b 的结果返回出来

python 在执行这个函数的时候会把合法的两个参数做相加,并把结果返回。这里有个问题,返回到哪了?看一下两次调用的结果。
可以看到,我们明明调用了 my_add 两次,应该有两次 return ,但是屏幕上却只有一个结果被打印了。事实上 return 的结果是在内存中的,如果没人使用这个返回的结果,则这个结果将被 python 的垃圾回收机制清除掉来腾出可用内存。所以通常情况下,我们会为结果赋值,用一个变量表示结果并等待被使用;或者如本例直接使一个函数被另一个当作参数来用。

加分练习

  1. 如果不是很确定 return 的功能,试着自己写几个函数,让他们返回一些值,你可以将任何可以放在 = 右边的东西作为一个函数的返回值。
  2. 这个脚本的结尾是一个迷题。我将一个函数的返回值用作了另外一个函数的参数。我将它们链接到了一起,就跟写数学等式一样。这样可能有些难读,不过运行一下你就知道结果了。接下来,你需要试试看能不能用正常的方法实现和这个表达式一样的功能。
  3. 一旦你解决了这个迷题,试着修改一下函数里的某些部分,然后看会有什么样的结果。你可以有目的地修改它,让它输出另外一个值。
  4. 最后,颠倒过来做一次。写一个简单的等式,使用一样的函数来计算它。




我的答案

21.0 基础练习

def add(a, b):
    print("ADDING %d + %d" % (a, b))
    return a + b

def subtract(a, b):
    print("SUBTRACT %d - %d" % (a, b))
    return a - b

def multiply(a, b):
    print("MULTIPLY %d * %d" % (a, b))
    return a * b

def divide(a, b):
    print("DIVIDE %d / %d" % (a, b))
    return a / b

print("Let's do some math with just functions!")

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

print("Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq))

# A puzzle for the extra credit, type it in anyway.
print("Here is puzzle.")

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print("That becomes: ", what, "Can you do it by hand?")

《笨办法学 python3》系列练习计划——21.函数可以返回东西_第2张图片

21.2 结尾的谜题

这个谜题其实只是一个多层嵌套引用函数的语句,由一个函数的结果作为另一个函数的参数,而这个函数的结果又是其他函数的参考。看起来比较乱,但拆开步骤的话和前面的么什么区别。
通过前面第一轮的函数调用后我们首先获得了四个数字变量:

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

# 调用后它们的值变为:
age = 35
height = 74
weight = 180
iq = 50.0    
# iq是除法得到的,在 Py3 中实际值是浮点数,但是打印的时候由于格式化变为了整数

再来看一下谜题部分

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))
# 变量 what 可以由内到外把嵌套的结构逐步拆分为
x1 = divide(iq, 2)
x2 = multiply(weight, x1)
x3 = subtract(height, x2)
x4 = add(age, x3)
what = x4

# 然后把前边变量的数值代入进去可得到
x1 = divide(50.0, 2)
x2 = multiply(180, x1)
x3 = subtract(74, x2)
x4 = add(35, x3)

怎么样,这样看这个谜题也没什么吧?
在打印出 That becomes: -4391.0 Can you do it by hand? 之前有四行信息,么有人么想明白的?结合上面 x1-x4 的推导过程以及函数的内容看看呢?




返回目录

《笨办法学 python3》系列练习计划——0. 序言、目录

你可能感兴趣的:(Python,python,笨办法学python,python练习题)