任务描述
我们一般将字符串、列表等变量作为参数进行函数调用。但函数本身也是一个对象,所以我们也可以将函数作为参数传入另外一个函数中并进行调用。
本关的目标是让读者了解并掌握函数作为参数传入另外一个函数中并进行调用的相关知识。
相关知识
我们要学习函数与函数之间的调用,就应该对函数调用的顺序与参数有清晰的认识,我们将会从五种情况让读者了解并掌握函数与函数之间的调用的基本关系和联系。
第一种情况
程序代码如下:
def x(f):
def y():
print(1)
return y
def f():
print(2)
x(f)
运行结果:打印出无结果
分析:因为第9
行中的x(f)
中的f
没有带括号,所以f
只是一个普通的参数,所以程序只调用执行了x(f)
函数,没有调用执行f()
函数。x(f)
函数中虽然也定义了y()
函数,但是x(f)
函数中没有调用执行y()
函数,只是执行了return y
。而y
变量也没有值,所以整个程序的返回值就为无结果。
第二种情况
程序代码如下:
def x(f):
def y():
print(1)
return y
def f():
print(2)
x(f())
运行结果:2
分析:因为第9
行中的x(f())
中的f()
带括号,所以程序先调用执行f()
函数,先输出2
。然后2
作为参数传入到x(f)
函数中,程序开始调用执行x(f)
函数。x(f)
函数中虽然也定义了y()
函数,但是x(f)
函数中没有调用执行y()
函数,只是执行了return y
。而y
变量也没有值,所以调用执行x(f)
函数没有产生任何结果。
所以该程序最终只输出了2
。
第三种情况
程序代码如下:
def x(f):
def y():
print(1)
return y()
def f():
print(2)
x(f)
运行结果:1
分析:因为第9
行中的x(f)
中的f
没有带括号,所以f
只是一个普通的参数,所以程序只调用执行了x(f)
函数,没有调用执行f()
函数。x(f)
函数中也定义了y()
函数,并且返回是y()
函数。所以程序调用执行了y()
函数,输出结果是1
。
第四种情况
程序代码如下:
def x(f):
def y():
print(1)
return y()
def f():
print(2)
x(f())
运行结果:2
1
分析:因为第9
行中的x(f())
中的f()
带括号,所以程序先调用执行f()
函数,先输出2
。然后2
作为参数传入到x(f)
函数中,程序开始调用执行x(f)
函数。x(f)
函数中也定义了y()
函数,并且返回是y()
函数。所以程序也调用执行了y()
函数,也输出了1
。
所以该程序先后输出了2
和1
。
第五种情况
程序代码如下:
def x(f):
def y():
print(1)
print(f())
return y()
def f():
#print(2)
return 2
x(f)
运行结果:
1
2
分析:因为第9
行中的x(f)
中的f
没有带括号,所以f
只是一个普通的参数,所以程序先只是调用执行了x(f)
函数。在x(f)
函数中也定义了y()
函数,而且返回值是y()
函数,所以程序会调用执行y()
函数。在y()
函数中先是执行print(1)
语句,输出1
。接着执行print(f())
语句,所以程序在这时也会调用执行f()
函数,输出2
。
所以该程序先后输出了1
和2
。
以上是对函数与函数之间调用的五种情况的探讨与分析,函数作为参数传入另外一个函数中并进行调用的情况有很多,我们需要时刻注意函数调用的相关要求与细节,才能正确使用函数。
编程要求
本关的编程任务是补全src/step3/func_ref.py
文件的代码,实现相应的功能。具体要求如下:
- 定义一个函数,要求实现圆的面积计算;
- 根据输入的不同整数值的半径,调用函数计算,输出圆的面积。
测试说明
本关的测试文件是src/step3/func_ref.py
,测试过程如下:
- 平台自动编译生成
func_ref.exe
; - 平台运行
func_ref.exe
,并以标准输入方式提供测试输入; - 平台获取
func_ref.exe
输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step3/func_ref.py
的样例测试集:
测试输入:4
预期输出:50.27
测试输入:5
预期输出:78.54
测试输入:6
预期输出:113.1
测试输入:111
预期输出:38707.56
#coding=utf-8
from math import pi as PI
n = int(input())
# 请在此添加代码,实现圆的面积计算,并输出面积结果
#********** Begin *********#
def area(n):
area = PI * pow(n, 2)
return round(area, 2)
print(area(n))
#********** End **********#