当前位置: 首页 > news >正文

牛客网专项练习30天Pytnon篇第26天

1.执行以下程序,输出结果为:(A

def fun(a=(),b=[]):
	a += (1,)
	b.append(1)
	return a,b
fun()
print(fun())

A.((1,), [1, 1])

B.((1,1), [1, 1])

C.((1,), [1])

D.((1,1), [1])

解析:

       Python的默认参数只在函数定义时被赋值一次,而不会每次调用函数时又创建新的引用。这意味着,函数定义完成后,默认参数已经存在固定的内存地址了,如果使用一个可变的默认参数并对其进行改变,那么以后对该函数的调用都会改变这个可变对象,而默认参数如果是不可变对象,不存在该问题,因此正确答案为A选项。


2.对于下列Python代码,描述正确的有:(BD)

foo = [1,2]
foo1 = foo
foo.append(3)

A.foo 值为[1,2]

B.foo 值为[1,2,3]

C.foo1 值为[1,2]

D.foo1 值为[1,2,3]

解析:

       等号后边的值赋给前边,相当于把后边的数据地址赋给了前边,两个值对应了一个地址,其中一个改变,另一个也改变。


3.一个段代码定义如下,下列调用结果正确的是:(A)

def bar(multiple):
    def foo(n):
        return multiple ** n
    return foo

A.bar(2)(3) == 8

B.bar(2)(3) == 6

C.bar(3)(2) == 8

D.bar(3)(2) == 6

解析:

       return一个函数,考察闭包。当程序调用bar(a)时,返回一个foo函数的引用,此时变成foo(b),去执行foo函数里的函数体。执行bar函数,bar(2)  返回内层函数foo  传入私有变量 multiple=2,执行foo函数,bar(2)(3) = foo(3) =2 * 2 *2 = 8。


4.执行下列程序,输出结果为:(A

def fn():
	t = []
	i = 0
	while i < 2:
		t.append(lambda x: print(i*x,end=","))
		i += 1
	return t

for f in fn():
	print(f(2))

A.4,4, 

B.2,2, 

C.0,1, 

D.0,2,

解析:

       函数fn存在闭包现象,自由变量是i,由于python闭包采用延迟绑定,也就是当调用匿名函数时,循环早已结束,此时i的值为2,所以输出结果都为2*2=4,正确答案为A;这段函数先是通过 in 读取到函数fn(),开始走两遍while循环,i的值变为2,然后开始执行f(2),2是作为x的参数的赋值,这个时候直接开始执行 t.append(lambda x: print(i*x,end=",")),循环两遍,循环的次数还是取决于while的条件,你把i的值调成3的话就是走三次,但是由于i的值始终是2,所以x*i,x=2,i=2,循环两遍,两遍i的值都是2,结果:4,4,。


5.嵌套函数在其外部区域引用一个值时,该嵌套函数就是一个闭包,以下代码输出值为:(D)

def adder(x):
	def wrapper(y):
		return x + y
	return wrapper
adder5 = adder(5)
print(adder5(adder5(6)))

A.10

B.12

C.14

D.16

解析:

       这道题考查的是闭包,外部函数确定x的值为5,内部函数的值为6,所以第一次计算结果为11,第二次计算,还是在x为5的前提下,需要在11的基础上再加5,11+5=16,故选D。


2fbb958a7f99435eb3ef586107f6103e.jpeg

 

 

相关文章:

  • 手机网站建设北京/婚恋网站排名前三
  • 南京中小企业网站制作/搜索引擎网站优化推广
  • 品牌型网站制/北京网站推广公司
  • 微信怎么制作小程序?/谷歌seo招聘
  • 文佳佳做网站/智能建站系统
  • 深圳临时工最新招聘信息/培训优化
  • 【Golang开发面经】得物(两轮技术面)
  • Linux vmalloc原理与实现
  • 李沐论文精读系列二:Vision Transformer、MAE、MoCo、Swin-Transformer(持续更新 )
  • 【我想找一份实习】算法篇
  • uniapp 微信小程序和H5的弹窗滚动穿透解决
  • linux安装tomcat、mysql、redis、宝塔,rpm命令
  • Linux命令老是记不住?一篇文章帮你解决。Linux常用命令汇总
  • 接口测试用例生成工具介绍及应用
  • 【axios】二次封装——避免重复发送请求
  • Maven 高级 5 多环境配置与应用 5.1 多环境开发
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • 【图像分割】基于电磁算法优化多级阈值实现图像分割附matlab代码