牛客网Python专项练习重点题整理

第 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表示真。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()函数没有匹配到对象返回 0
  • index()函数没有匹配到对象报错 value Error
  • find()函数没有匹配到对象返回 -1
  • in 没有匹配到对象返回 false

第 11 题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第 12 题

在这里插入图片描述

find 用于检测某个子串是否包含在这个字符串中,find 返回成功匹配的第一个字符的位置索引,rfind 返回最后一次成功匹配的字符的位置索引

第 13 题

在这里插入图片描述

fromkeys() 的用法:Python3 字典 fromkeys(seq, value) 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。该方法返回一个新字典。两个参数:第一个是字典的键,第二个(可选)是传入键的值,默认为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__widthrectangle._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 1False,则 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 题

在这里插入图片描述
在这里插入图片描述

注意:

  • listpop()是删除最后一个值并返回
  • setpop()是随机删除一个值并返回

第 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 都指向同一个对象。list1list2 指向的是同一块内存空间,故选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错误

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值