《Python语言程序设计》刘卫国主编,中国工信出版集团,电子工业出版社
一、选择题
1.下列选项中不属于函数优点的是( D )。
A.减少代码重复
B.使程序模块化
C.使程序便于阅读
D.便于发挥程序员的创造力
函数能提高代码的模块性和代码的重复率,便于阅读
2.关于函数的说法中正确的是( B )。
A.函数定义时必须有形参
B.函数中定义的变量只在该函数体中起作用
C.函数定义时必须带return语句
D.实参与形参的个数可以不相同,类型可以任意
A:函数定义时可以没有参数,并且python还允许函数体为空函数 def 函数名();
B:在一个函数体内或语句块内定义的变量称为局部变量,局部变量只在定义它的函数体和语句块中有效。
C:不带参数的trun语句或函数体内没有retrun语句,函数返回为空。
3.以下关于函数说法正确的是( D )。
A.函数的实际参数和形式参数必须同名
B.函数的形式参数既可以是变量也可以是常量
C.函数的实际参数不可以是表达式
D.函数的实际参数可以是其他函数的调用
A:实际参数和形式参数定义名可以不相同
B:形参是函数定义时小括号内的变量,不可以是常量。
C:实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
D:同C题原理。
4.关于装饰器,下列说法中错误的是( D )。
A.装饰器是用来包装函数的函数
B.装饰器有利于实现代码的复用
C.装饰器中一定要返回一个函数对象
D.一个函数只能用一个装饰器修饰
python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能,提高代码复用率。python有多重装饰器,故D错误。
5.调用装饰器的格式是( B )
A.#装饰器名 B.@装饰器名 C.$装饰器名 D.%装饰器名
定义好装饰器后,就可以通过@来调用,把@语句放在函数定义之前。
6.有以下两个程序。
程序一:
x=[1,2,3]
def f(x):
x=x+[4]
f(x)
print(x)
程序二:
x=[1,2,3]
def f(x):
x+=[4]
f(x)
print(x)
下列说法正确的是( A )。
A.两个程序均能正确运行,但结果不同
B.两个程序的运行结果相同
C.程序一能正确运行,程序二不能
D.程序一不能正确运行,程序二能
对于可变对象,
a += 1
直接在原内存地址上操作a = a + 1
开辟新的内存操作对于不可变对象,
a += 1
和a = a + 1
都是在新开辟的空间操作此题为列表,为可变对象,所以第一个程序,是分配了个新地址给新的x,然后把x+[4]给新的x,但是原来地址中的值没有改变
第一个程序结果[1,2,3],第二个程序结果[1,2,3,4]
7.已知f=lambda x,y:x+y,则f([4],[1,2,3])的值是( C )。
A.[1, 2, 3, 4] B.10 C.[4, 1, 2, 3] D.{1, 2, 3, 4}.
匿名函数,也称lambda函数,冒号前为函数参数,可以有多个函数参数,但只有一个返回值,所以只有一个表达式,返回值就是该表达式的结果。[4]+[1,2,3]=[4,1,2,3]
8.下列程序的运行结果是( D )。
f=[lambda x=1:x*2,lambda x:x**2]
print(f[1](f[0](3)))
A.1 B.6 C.9 D.36
可以将匿名函数作为字典或者序列的元素,本题是将匿名函数作为列表的元素,这时可以以序列或者字典元素引用作为函数名来调用匿名函数。所以f[0]调用lambda x=1:x*2,f[1]调用lambda x:x**2,最后结果为36(x**2表示x的平方)
9.下列程序的运行结果是( B )。
def f(x=2,y=0):
return x-y
y=f(y=f(),x=5)
print(y)
A.-3 B.3 C.2 D.5
def f(x=2,y=0):为默认值参数,如果不提供参数值,则取默认值。y=f()值为2。
y=f(y=f(),x=5)这种方式为关键字传参(形参名=实参值),这种方式可以摆脱参数的顺序。
10.output.py文件和test.py文件内容如下,且output.py和test.py位于同一文件夹中,那么运行test.py的输出结果是( A )。
#output.py
def show():
print(__name__)
#test.py
import output
if __name__=='__main__':
output.show()
A.output B.__name__ C.test D.__main__
_ _name_ _是一个全局变量,在模块内部用来标识模块名称的。如果模块是被其他模块导入的,_ _name_ _的值是模块的名称,主动执行时他的值就是_ _mian_ _。
import output 执行后 __name__的值为output,不会执行test中if语句中的内容,而是直接输出__name__的值。
填空题:
1.函数首部以关键字 def 开始,最后以 冒号结束。
def f():
2.函数执行语句“return [1,2,3],4”后,返回值是 ([1, 2, 3], 4) ;没有return语句的函数将返回 None 。
3.使用关键字 global 可以在一个函数中设置一个全局变量。
在函数体中,如果要成为函数体外的全局变量重新赋值,可以使用global语句,表明变量是全局变量
4.下列程序的输出结果是
def deco(func):
print('before f1')
return func
@deco
def f1():
print('f1')
f1()
f1=deco(f1)
before f1 调用被装饰器修饰的f1函数,f1此时有deco装饰器的功能
f1
before f1 调用deco函数
本题考点为装饰器,装饰器可以理解为简单的函数。
5. 下列程序的输出结果是 4 0 。
counter=1
num=0
def TestVariable():
global counter
for i in (1,2,3):counter+=1
num=10
TestVariable()
print(counter,num)
函数体中的counter由于被global修饰,所以为全局变量,初始值为1,经过三次循环等于4。而函数体中的num为局部变量,只在函数体中有效。
6.设有f=lambda x,y:{x:y},则f(5,10)的值是 {5: 10} 。
匿名函数,:前为参数,:后为返回值(输出内容)
7.Python包含了数量众多的模块,通过 import 语句,可以导入模块,并使用其定义的功能。
8.设Python中有模块m,如果希望同时导入m中的所有成员,则可以采用 from m import * 的导入形式。
9.Python中每个模块都有一个名称,通过特殊变量 __name__可以获取模块的名称。特别地,当一个模块被用户单独运行时,模块名称为 __main__ 。
10.建立模块a.py,模块内容如下。
def B():
print('BBB')
def A():
print('AAA')
为了调用模块中的A()函数,应先使用语句from a import A