《Python语言程序设计》 —3.7 课后习题
3.7 课后习题
1. 在Python语言中,使用函数分为两个步骤:定义函数和 。
2. 在Python语言中,函数定义需要使用 关键字。
3. 是在定义函数时函数名后面的一对小括号中给出的参数列表。
4. 是在调用函数时函数名后面的一对小括号中给出的参数列表。
5. 能够将一个函数的运算结果返回到调用函数的位置,以便可以继续用该运算结果参与其他运算,此时则应使用 语句。
6. 使用 将整个模块导入,也可以使用 将模块中的标识符直接导入当前环境。
7. 可以使用“from模块名import ”的方式导入一个模块中的所有标识符。
8. 定义一个包,就是创建一个文件夹并在该文件夹下创建一个 文件,文件夹的名字就是包名。
9. 是指在运行时动态替换已有的代码,而不需要修改原始代码。
10. 下列说法中错误的是( )。
A. 当调用函数时,如果没有为某些形参传递对应的实参,则这些形参会自动使用默认参数值
B. 在使用关键字参数调用函数时,实参的传递顺序必须与形参列表中形参的顺序一致
C. 当普通实参传递给形参后,如果在函数体中对形参值做修改,则该修改并不会影响实参,即实参值不会改变
D. 如果实参是列表等对象,那么可在函数体中通过形参修改实参列表中对应元素的值
11. 下列关于拆分参数列表的说法正确的是( )。
A. 列表、元组拆分出来的结果作为位置参数,字典拆分出来的结果作为关键字参数
B. 列表、元组和字典拆分出来的结果都作为关键字参数
C. 列表、元组和字典拆分出来的结果都作为位置参数
D. 列表、元组拆分出来的结果作为关键字参数,而字典拆分出来的结果作为位置参数
12. 写出下面程序段的输出结果。
def ModifyVal(x,y):
z=x
x=y
y=z
def ModifyListElement(ls,idx,val):
ls[idx]=val
a,b=3,5
print(a,b)
ModifyVal(a,b)
print(a,b)
c=[7,8,9]
print(c)
ModifyListElement(c,1,6)
print(c)
13. 写出下面程序段的输出结果。
def CircleInfo(radius, color='red'):
print('半径:%d,颜色:%s'%(radius,color))
CircleInfo(10)
CircleInfo(20, color='green')
CircleInfo(color='blue', radius=30)
14. 函数Sum的功能是求参数的和并返回,参数个数不限。请将程序填写完整。
def Sum(*args):
s=0
for i in :
s+=i
return
print(Sum(1,2,3,4,5))
15. 已知模块文件arithmetic.py的内容如下:
def plus(x,y):
return x+y
def multi(x,y):
return x*y
编写程序,将模块导入,调用其中的函数,请将程序填写完整。
使用import导入:
import arithmetic
print( (3,5))
print( (5,6))
使用from import依次导入函数:
print(plus(3,5))
print(multi(5,6))
使用from import导入所有标识符:
from arithmetic import *
print( (3,5))
print( (5,6))
16. 按照作用域的不同,Python中的变量可以分为局部变量和 。
17. 在一个函数中使用 关键字,可以声明在该函数中使用的是全局变量,而非局部变量。
18. 通过 关键字,可以使内层的函数直接使用外层函数中定义的变量。
19. 函数是指在一个函数内部通过调用自己来求解一个问题。
20. 函数也称为匿名函数,是一种不使用def定义函数的形式,其作用是能快速定义一个简短的函数。
21. lambda函数的函数体只是一个 ,所以lambda函数通常只能实现比较简单的功能。
22. 如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了 。
23. 下列说法中错误的是( )。
A. 在一个函数中定义的变量就是局部变量
B. 局部变量的作用域是从定义位置到函数结束位置
C. 在所有函数外定义的变量就是全局变量
D. 全局变量的作用域是从定义位置到程序结束位置
24. 下列关于装饰器的说法错误的是( )。
A. 利用装饰器,可以在不修改已有函数的情况下向已有函数中注入代码,使其具备新的功能
B. 一个装饰器可以为多个函数注入代码,一个函数也可以注入多个装饰器的代码
C. 一个装饰器可以为多个函数注入代码,而一个函数只能注入一个装饰器的代码
D. 装饰器实际上就是一种闭包
25. 写出下面程序的输出结果。
def outer():
x=100
global y
y=200
def inner():
nonlocal x
x=1000
y=2000
print('inner函数中的x,y值为',x,y)
inner()
print('outer函数中的x,y值为',x,y)
x=10
y=20
outer()
print("执行outer,inner函数之后x,y值为",x,y)
26. 写出下面闭包程序的输出结果。
def f(x):
y = 100
def inner(z):
return x * y + z
return inner
a10 = f(10)
a20 = f(20)
print(a10(29))
print(a20(29))
27. 已知高阶函数的程序如下:
def FunAdd(f,x):
return f(x)
def area(r):
return 3.14*r*r
def perimeter(r):
return 2*3.14*r
print(FunAdd(area,5))
print(FunAdd(perimeter,5))
请将其中的area函数和perimeter函数改写为lambda函数。请将改写后的程序填写完整。
def FunAdd(f,x):
return f(x)
print(FunAdd( ,5))
print(FunAdd( ,5))
28. 请编写递归函数fib(n),实现求斐波那契数列第n项的值。
- 点赞
- 收藏
- 关注作者
评论(0)