[‘e’, ‘h’, ‘n’, ‘r’],并且将列表降序排列-> [‘r’, ‘n’, ‘h’, ‘e’],最终得到 [‘pear’, ‘lemon’, ‘peach’, ‘apple’]原来的 a = [10,6,23,-90,0,3],交换后的 a =3.再执行内部函数 func(a,2,3) ,还是满足2_牛客网软件测试题库及答案">
赞
踩
大家好,小编来为大家解答以下问题,牛客网华为软件测试题库,牛客网华为机试题答案,现在让我们一起来看看吧!
第 1 题
- Python3 中的除法为正常除,保留小数位,因此 1/2 = 0.5,为浮点型
- Python2 中除法默认向下取整,因此 1/2 = 0,为整型。
第 2 题
在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值
第 3 题
object
:公用方法_object
:半私有,只可以通过类和类的子类调用,模块外不能调用也不能导入__object
:完全私有,只有类对象自己能访问,连子类对象也不能访,模块外不能调用也不能导入__object__
:内建方法,用户不要这样定义,系统定义名字
第 4 题
D错误的原因是因为当函数调用的时候,如果不加括号,返回的结果就是函数体本身,不需要等函数执行完成,如果加了括号,那么函数括号里面就必须要给定调用函数时所需要的参数,很明显,在本题中,D答案中的函数调用 is_add()时候,没有给括号中添加参数,所以会报错,正确的调用方式为
print(list(filter(is_odd,a)))
第 5 题
同许多程序语言一样,python中真假也是可以用整数0和1来表示,整数0表示假,整数1表示真python自动化运维系统。
filter
函数返回(值为真)的那部分,1、3、5对2取余为1,表示真,2、4对2取余表示假,filter
返回真的那部分,即返回1,3,5
第 6 题
如果是索引访问,会导致IndexError,但本题考的是切片,切片操作时如果索引越界不会导致IndexError,只是返回一个空序列,这里返回空列表
[]
第 7 题
issubclass(class, classinfo)
用于判断参数 class 是否是类型参数 classinfo 的子类isinstance(object, classinfo)
用于判断对象 object 的类型与 classinfo 类型相同则返回 True,否则返回 False。- isinstance() 与 type() 区别:
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- isinstance() 会认为子类是一种父类类型,考虑继承关系。
- 在本题中 D选项
b = B()
实例化,所以b是B 的实例,而不是子类,D 错误
第 8 题
- 使用列表生成式生成的列表
a=[['1', '2'], ['1', '2']]
,列表的两个元素虽然也是列表,但它们是不同的引用,修改其中的一个列表元素不影响另一个列表元素;- 而使用
*
生成的列表b=[['1', '2'], ['1', '2']]
,列表的两个列表元素指向同一个地址,修改时互相影响。
第 9 题
- 闭包就是:
- 一个函数(外函数)内部定义了一个函数(内函数)
- .内函数调用了外函数的变量
- 并且外函数的返回值是内函数的引用
- 本题解析
- adder(5) #返回了 wrapper ,且x=5
- adder5 = adder(5) # adder5是对wrapper的引用 此时x等于5
- adder5(6) # 相当于 wrapper(6) = 5+6=11 所以 adder5(6) =11
- adder5(adder5(6)) # = adder5(11) = wrapper(11) =5+11=16
第 10 题
四个选项都是判断s2是否为s1的子串,但B选项的
str.index
不同于其他方法,当查找不到子串时会抛出异常。
count()
函数没有匹配到对象返回 0index()
函数没有匹配到对象报错 value Errorfind()
函数没有匹配到对象返回 -1in
没有匹配到对象返回 false
第 11 题
第 12 题
find
用于检测某个子串是否包含在这个字符串中,find
返回成功匹配的第一个字符的位置索引,rfind
返回最后一次成功匹配的字符的位置索引
第 13 题
fromkeys()
的用法:用于创建并返回一个新的字典。两个参数:第一个是字典的键,第二个(可选)是传入键的值,默认为None
。 第一个值可以是字符串、列表、元组、字典
第 14 题
random.randint(参数1,参数2)
,参数1、参数2必须是整数,前闭后闭random.random()
用于生成一个0到1的随机符点数:0 <= n < 1.0
,最重要的是不要忘记x,y
属于[0,1)
第 15 题
- 程序创建了一个
animal
对象,然后访问和修改对象的私有属性__color
,@property
装饰器,相当于一个get
方法,用于获取私有属性值,因此需要补充的是setter
方法。python对于setter
装饰器的语法是:@函数名.setter
,因此答案为C选项。- python中的
@函数名.setter装饰器
可以总结为两个作用:
- 对要存入的数据进行预处理
- 设置可读属性(不可修改)
- 注意:
@函数名.setter
装饰器必须在@property
装饰器的后面(先get后set),且两个被修饰的函数的名称必须保持一致
第 16 题
- 使用
@property
将方法转为属性,该属性为只读属性,只可访问但是不可以修改,使用对象.方法名来访问该属性,但是方法不能再加小括号,故AB选项说法均错误;__init__
每次实例化对象的时候自动调用变量__count
是类的私有变量,由于每次创建对象时,其值自增1,所以可以用来统计创建对象的个数,C正确;- 虽然
__height
和__width
为私有变量,不能在类外直接使用对象名.属性名来访问,但是,仍可以使用对象名._类名__私有属性名
即使用rectangle._Rectangle__width
和rectangle._Rectangle__height
来强制访问
第 17 题
- python中的4种作用域
- L:Local,局部作用域,也就是我们在函数中定义的变量;
- E:Enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
- G:Globa,全局变量,就是模块级别定义的变量;
- B:Built-in,系统内置模块里面的变量
- 变量的查找顺序:
Local 局部变量
->Enclosing 外部嵌套作用域
->Global 全局作用域
->Built-in 内置模块作用域
第 18 题
quote() 是对url的编码,unquote()是对url的解码。
解码顺序:url解码
—>utf16
—>gbk
第 19 题
python中对于小整数对象有一个小整数对象池,范围在
[-5,257)
之间。对于在这个范围内的征数,不会新建对象,直接从 小整数对象池 中取就行。
第 20 题
关于python中的复数:
- 表示复数的语法是
real + image j
- 实部和虚部都是浮点数
- 虚部的后缀可以是
“j”
或者“J”
- 复数的
conjugate
方法可以返回该复数的共轭复数。
第 21 题
count()
方法用于统计某个元素在列表中出现的次数。pop()
函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值print()
里的pop()
操作也算,选择B
第 22 题
- 优先级
not>and>or
,谐音not at all
- 在Python3中,
not
表示逻辑非,and
表示逻辑与,逻辑非的运算优先级大于逻辑与的优先级,则not 1
为False
,则not 1 and 1
结果为False
第 23 题
答案:ABCD
__init__
是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。__new__
是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。__new__
在__init__
之前被调用,__new__
的返回值(实例)将传递给__init__
方法的第一个参数,然后__init__
给这个实例设置一些参数。
第 24 题
装饰器的一个关键特性是,它在被装饰函数定义后被立即执行,被装饰函数没有调用,故选择A
第 25 题
B选项利用了字典的键去重
D选项错误原因在于for
循环的计数次数是不变的,但是随着a
重复元素不断的移除,会导致列表出现IndexError
。
第 26 题
- A 选项,修改闭包内使用的外部函数变量使用
nonlocal
关键字来完成,变量b
属于全局变量,所以应该使用global
声明- B 选项
- C选项,python3.x中,使用列表生成式,中间变量b在生成列表后被销毁,因此再次使用变量b会报错
- D选项,集合元素不能是列表这类不可散列对象
第 27 题
虽然在函数外部声明
num
为全局变量,但若函数体内对num
变量重新赋值,其结果会使得函数内部屏蔽了外面的全局变量num
,此时语句num += 1
就会抛出异常,即num
变量没有先赋值就直接引用了。
第 28 题
- 使用sorted()进行排序会生成新的序列,生成的新序列和原序列id值必然不同。
- 对于+=操作,如果是可变对象,则操作前后序列的id值不变,如果是不可变对象,则操作前后序列的id值改变
- sort 与 sorted 区别:
- sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。
- list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)
第 29 题
注意:
list
的pop()
是删除最后一个值并返回set
的pop()
是随机删除一个值并返回
第 30 题
- A. Intel中规定,栈是从高地址向低地址生长的;堆是由低地址向高地址增长的;
- B. x64下面在x64下函数调用的前4个参数总是放在寄存器中传递,剩余的参数则压入堆栈中。而x86上则是全部压入堆栈中(除了fastcall方式);
- C.
- 在32位机器上,整数的位数为32位,取值范围为 -231~231-1
- 在64位系统上,整数的位数为64位,取值范围为 -263~263-1
- D. 只要知道,计算机里的浮点类型只是一种用离散方式近似表达实数区间的方法,就可以知道,Python 里的 float 是不可能涵盖 [0,1] 区间内的所有实数的
第 31 题
python3中,
divmod
将除法运算和取余运算结合在一起,结果返回一个tuple(元组)即(商和余数)
第 32 题
当函数的的形参单独为
*
时,它并不属于未匹配的位置参数,而是表示后面的参数必须使用关键字参数进行匹配,所以这里会抛出异常
第 33 题
答案:CD
- 用
recv
接收tcp数据, 用recvfrom
接收udp数据getstockname()
:返回套接字自己的地址。通常是一个元组(ipaddr,port)
第 34 题
b = a
赋值引用,a
和b
都指向同一个对象。list1
和list2
指向的是同一块内存空间,故选D
第 35 题
.
匹配任意1个字符(除了\n)?
匹配前一个字符出现1次或者0次,即要么有1次,要么没有*
匹配前一个字符出现0次或者无限次,即可有可无.*
适配所有?
到后面的空格为止(.*)
贪婪匹配,即尽可能多地匹配字符,提取的数据为str1字符串中on左边的所有字符,即Pyth(.*?)
懒惰匹配,即匹配尽可能少的字符,但是要匹配出所有的结果,提取的数据为str1中on右边,空格前面,即’s.group(0)
输出的是匹配正则表达式整体结果.group(1)
列出第一个括号匹配部分,.group(2)
列出第二个括号匹配部分re.I
使匹配对大小写不敏感re.M
多行模式,改变^和$的行为,使其指定为每行的开头和结尾,而不是全部的开头和结尾
- 故选择B
第 36 题
- A选项,使用
property
会将方法转为属性,因此rect.area()
应该改为rect.area
- B选项,函数中
a += 1
直接修改局部变量不对,可以在使用前用global
关键字将其修改成全局变量- C选项,子类若有定义
__init__()
函数时,将不会自动继承父类的构造函数,因此在调用父类的get_color()
函数时,会出现Animal找不到属性color
,修改时只需在子类的__init__()
函数中添加语句:super().__init__()
- D选项,尽管
color
属性为私有属性,但是在类外部使用时,仍可以通过对象名._类名__私有属性名
来访问。
第 37 题
__slots__
在继承中有两种表现:
- 子类未声明__slots__时,不继承父类的__slots__,即此时子类实例可以随意赋值属性
- 子类声明__slots__时,继承父类的__slots__,即此时子类的__slots__为其自身+父类的__slots__
__slots__
是python类中的特殊变量,用于限制实例对象的属性,如__slots__='x','y'
,那么实例对象的属性就只能从这些里面找,因此它起的是限制效果而非自动获得,因此B错误。- 定义同名变量后子类继承父类的
__slots__
,从而支持xyz
,因此C错
本题选择D
第 38 题
z+1
这个表达式是可以赋值给y的,但是y=z+1
不行
第 39 题
c是数据类型不可变,传入函数后函数体外的c本身不变,第一次调用没有将变化后的c赋值给c本身,所以第二次调用函数传入的c仍为原本c指向的1
- fn(a,c):调用了一次fn函数,这时候a变成了[1,2],c还是1,因为函数虽然返回了obj,但是没有赋值,出了函数之后c还是全局变量的那个c;
- print(fn(a,c)):又调用了一次fn函数,过程同上,但是打印的时候打印的是函数的返回值,也就是此时的形参lis和obj的值,而此时lis是[1,2,2],而obj是2。
第 40 题
这是一道 递归 的题目
1.首先,调用 main() 函数内,已经定义了一个列表 a ,传入到func函数内,第一次传入的参数中 i,j 分别代表列表的首位、末尾值。即i = 0 ,j = 5 此时满足 i<j ,则此时调用 满足的条件 ,又调用func ,此时传入的参数为 a、1,4 。这时需要执行函数,而不能往下执行,即暂不可执行第一次的交换元素 s[0],s[5] = s[5],s[0];
2. 执行内部函数 func(a,1,4) 则也满足 1<4 此时还需要再调用 func(a,2,3) .暂不执行 s[1],s[4]] = s[4],s[1];
3.再执行内部函数 func(a,2,3) ,还是满足2<3 此时还需要再调用 func(a,3,2) .暂不执行 s[2],s[3]] = s[3],s[2];
4.再执行内部函数func(a,3,2),此时不满足 3<2 . 即不执行任何内容。此时内部循环函数全部结束。再往上推;
5.上一步内部函数执行完后,则执行交换s[2],s[3]] = s[3],s[2]. 再往上推
6. s[1],s[4]] = s[4],s[1],再往上推;
7. s[0],s[5] = s[5],s[0] 。即全部 func 结果结束。即交换了各个位置的元素。第一个变成最后一个、第二个变成倒数第二个、第三个变成倒数第三个。原来的 a = [10,6,23,-90,0,3],交换后的 a =[3,0,-90,23,6,10]
8. for循环依次打印出a列表元素 ,每次打出一个都进行换行操作。
答案为:
3
0
‐90
23
6
10
第 41 题
fn里面的匿名函数为 f ,for i in fn() 此时 fn 调用,i 进入循环,当 i 加到 2 时跳出循环才会 return 得到 t,此时 t = [f, f],故 fn() = t = [f, f],注意此时 f 里的 i 等于 2,因为只有 i 等于 2,fn 才有返回值,程序才会进行下去。
那么for i in fn()就变成了for i in [f, f],此时f(2) = print(i * 2, end=“,”) = print(2 * 2, end=“,”)即4,
,故for循环完后结果为4,4,
。
第 42 题
python搜索模块的顺序为:内建模块>当前路径,即执行Python脚本文件所在的路径>环境变量中的PYTHONPATH>python安装路径,故答案为C。
第 43 题
Python语言中,if后任何非0和非空(null)值为True,0或者null为False。
第 44 题
strip()法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
- 注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
str.strip(‘ab’)是将括号里面的字符拆解,并删除首尾符合的字符,一直删除直至没有。 本题则是收尾删除’a’,‘b’字符,最后剩下’c’
第 45 题
A选项是两数交换的优雅写法;
B选项,python允许使用*来处理剩下的参数,0 [1, 2, 3] 4
C选项是关于列表的拆包,让可迭代对象的元素一一赋值给对应的变量;
D选项会抛出异常,这是因为对应变量不满足元组的嵌套结构,正确的写法应该是a,(b,c) = tup
第 46 题
list.sort( key=fn, reverse=Ture),list中的每个元素调用函数fn后作为key,逆序排序。列表lis使用函数fn排序,其实就是给[”e", “n”, “r”, “h”]排序-> [‘e’, ‘h’, ‘n’, ‘r’],并且将列表降序排列-> [‘r’, ‘n’, ‘h’, ‘e’],最终得到 [‘pear’, ‘lemon’, ‘peach’, ‘apple’]
第 47 题
tup[2]是列表,列表是可变对象,对于可变对象,执行+=后并不会改变其id值,A错误;执行②时会抛出异常,“+=”的执行顺序是先对[3,4]执行+操作,其结果为[3,4,5,6],然后再执行”=“,此时会抛出异常,这是因为元组不允许元素被重新赋值
第 48 题
A赋值,新定义一个变量b,指向变量a指向的内存地址。两个变量指向了同一个内存地址。 切片是浅拷贝,BC均是浅拷贝,只要内层的可变对象变,原数据也要跟着变
第 49 题
A. python函数中不一定要有返回值,即return不是必须的
B. return 不可以返回多个值,返回多个值的形式时,实际返回的是元组
C. return没有返回值时,函数自动返回None,Python没有Null
D选项正确
第 50 题
本题选择B
==
判断两个对象的值是否相等is
判断两个变量引用的对象是否相同
由数字,字符和下划线组成的短字符串以及[-5,256]内的整数存在内存驻留,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本,故CD选项结果均为True。
第 51 题
A. 若要表现像个序列,必须满足序列的两个方法:
__len__
和__getitem__
,由于Foo类中没有实现__len__
,因此不满足序列协议,foo对象不像序列,A错误
B. foo对象没有定义__len__
方法,不能使用它来查看对象个数,B错误
C. 对对象的迭代需要调用__iter__
,如果没有定义该方法,python会调用__getitem__()
,让迭代和in运算符可用,因此foo是可迭代的,C正确
D. 根据索引访问对象元素,会调用__getitem__()
,因此D错误
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。