我们要学习函数与函数之间的调用,就应该对函数调用的顺序与参数有清晰的认识,我们将会从五种情况让读者了解并掌握函数与函数之间的调用的基本关系和联系。

第一种情况

程序代码如下:

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的代码框架如下:

#coding=utf-8
from math import pi as PI
n = int(input())
# 请在此添加代码,实现圆的面积计算,并输出面积结果
#********** Begin *********#
#********** End **********#

测试说明

本关的测试文件是src/step3/func_ref.py,测试过程如下:

平台自动编译生成func_ref.exe;
平台运行func_ref.exe,并以标准输入方式提供测试输入;
平台获取func_ref.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step3/func_ref.py的样例测试集:

测试输入:

4

预期输出:

50.27

代码:

#coding=utf-8
#导入模块pi,并命名为PI
from math import pi as PI
#获取输入的数,也就是半径
n = int(input())

# 请在此添加代码,实现圆的面积计算,并输出面积结果
#********** Begin *********#
#定义一个计算圆面积的函数
def mianJi():
    #返回计算出的圆面积
    return (PI*n*n)
#%.2f是保留两位小数,测试3四舍五入进来了。所以结果是113.1
print(float("%.2f" % mianJi()))
#********** End **********#
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐