1.Python函数如下,则输出结果为:(A)
def chanageList(nums): nums.append('c') print("nums", nums) str1 = ['a', 'b'] chanageList(str1) print("str1", str1)
A.nums ['a', 'b', 'c'],str1 ['a', 'b', 'c']
B.nums ['a', 'b', 'c'],str1 ['a', 'b']
C.nums ['a', 'b'],str1 ['a', 'b']
D.nums ['a', 'b'],str1 ['a', 'b','c']
解析:
在调用chanageList()函数时,str1 作为参数传入该函数后执行 append()函数添加字符 ‘c’,虽然传递给变量nums但其表示的就是str1,因此A正确。
2.以下程序输出为:(A)
def w1(): print('正在装饰') def inner(): print('正在验证权限') return inner() w1()
A.正在装饰 正在验证权限
B.正在装饰
C.正在验证权限
D.运行错误
解析:
w1()首先执行内部自身打印输出打印“正在装饰”,然后w1()调用inner(),执行inner()内部打印输出打印“正在验证权限”;最终分别打印正在装饰和正在验证权限。
3.执行以下程序,结果输出为:(A)
a = [1] b = 2 c = 1 def fn(lis,obj): lis.append(b) obj = obj + 1 return lis,obj fn(a,c) print(fn(a,c))
A.([1, 2, 2], 2)
B.([1, 2, 2], 3)
C.([1, 2], 2)
D.([1, 2], 3)
解析:
当参数为可变对象时,传参采用的是引用传递,修改形参将对实参造成影响;当参数为不可变对象时,传参采用的是值传递,修改形参对实参无影响,实参a为可变对象,实参c为不可变对象,故选项A正确。
4.执行以下程序,输出结果为:(A)
def outer(fn): print('outer') def inner(): print('inner') return fn return inner @outer def fun(): print('fun')
A.outer
B.inner
C.fun
D.无输出
解析:
装饰器的一个关键特性是,它在被装饰函数定义后被立即执行,因此运行装饰函数outer,输出结果为outer,内部函数inner没有调用,不会输出任何结果,被装饰函数同样也不会运行,故A选项正确。
5.如下程序的运行结果为:(A)
def func(s, i, j): if i < j: func(s, i + 1, j - 1) s[i],s[j] = s[j], s[i] def main(): a = [10, 6, 23, -90, 0, 3] func(a, 0, len(a)-1) for i in range(6): print(a[i],end = ' ') main()
A.3 0 ‐90 23 6 10
B.3 0 ‐60 23 6 10
C.6 10 3 0 ‐90 23
D.6 10 3 0 -23 23
解析:
首先调用main() 函数内,已经定义了一个列表 a ,传入到func函数内,第一次传入的参数中 i,j 分别代表列表的首位、末尾值。即i = 0 ,j = 5 此时满足 i<j ,则此时调用 满足的条件 ,又调用func ,此时传入的参数为 a、1,4 。这时需要执行函数,而不能往下执行,即暂不可执行第一次的 交换元素 s[0],s[5] = s[5],s[0];执行内部函数 func(a,1,4) 则也满足 1<4 此时还需要再调用 func(a,2,3) .暂不执行 s[1],s[4]] = s[4],s[1];再执行内部函数 func(a,2,3) ,还是满足2<3 此时还需要再调用 func(a,3,2) .暂不执行 s[2],s[3]] = s[3],s[2];再执行内部函数func(a,3,2),此时不满足 3<2 . 即不执行任何内容。此时内部循环函数全部结束。再往上推;上一步内部函数执行完后,则执行交换s[2],s[3]] = s[3],s[2]. 再往上推;s[1],s[4]] = s[4],s[1],再往上推;s[0],s[5] = s[5],s[0] 。即全部func结果结束。即交换了各个位置的元素。第一个变成最后一个、第二个变成倒数第二个、第三个变成倒数第三个。原来的 a = [10,6,23,-90,0,3],交换后的 a = [3,0,-90,23,6,10],for循环打印出a列表元素,故选项A正确。