• 牛客网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__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不可执行第一次的交换元素 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错误

  • 相关阅读:
    机器人中的数值优化(十三)——QP二次规划
    【chatglm3】(4):如何设计一个知识库问答系统,参考智谱AI的知识库系统,
    AEB强制标配?今年乘用车前装搭载率预计突破50%
    【无标题】
    二十一、vite中的glob-import批量导入
    AdaBoost:增强机器学习的力量
    CSS从入门到精通——动画:CSS3动画延迟和完成后状态的保持
    vue + canvas 实现涂鸦面板
    PMP_强化练习题(一)180题(附答案及解析)
    Vue | Vue.js 全家桶 Vuex状态管理
  • 原文地址:https://blog.csdn.net/hu_wei123/article/details/127513029