python面试题库

Posted xiuercui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python面试题库相关的知识,希望对你有一定的参考价值。

1.以下代码输出为:

list1 = {1:1,2:2}
list2 = list1
list1[1] = 5
sum = list1[1] + list2[1]
print(sum)

解析:10

b = a: 赋值引用,a 和 b 都指向同一个对象。
list1 和 list2 指向的是同一块内存空间
list1[‘1‘]=5  ------>     改变了这一块内存空间中‘1‘的value值
执行这一步后内存空间存储的数据变为:{‘1‘: 5, ‘2‘: 2}
因此 sum = list1[‘1‘]+list2[‘1‘]=5+5=10
 
2.已知print_func.py的代码如下:
print(HelloWorld!)
print(__name__value: , __name__)

def main():
    print(This message is from main function)
  
if __name__ ==__main__:
    main()

print_module.py的代码如下:

import print_func
print("Done!")

运行print_module.py程序,结果是:

Hello World!  __name__ value: print_module  Done!

解析:

当运行模块的时候,__name__等于“__main__”;如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)
 
3.Python中单下划线_foo与双下划线__foo与__foo__的成员,下列说法正确的是?
A  _foo 不能直接用于’from module import *’
B  __foo解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名
C  __foo__代表python里特殊方法专用的标识
D  __foo 可以直接用于’from module import *’
答案:ABC
解析:
python中主要存在四种命名方式:
  a:object    公用方法
  b:   _object  半保护
                  被看作是“protect”,意思是只有类对象和子类对象自己能访问到这些变量,
                  在模块或类外不可以使用,不能用’from module import *’导入。
                  __object 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是 _classname__methodname。
                 
  c:_ _ object  全私有,全保护
                        私有成员“private”,意思是只有类对象自己能访问,连子类对象也不能访
                          问到这个数据,不能用’from module import *’导入。
  d:_ _ object_ _     内建方法,用户不要这样定义
 
4.有一段python的编码程序如下:urllib.quote(line.decode("gbk").encode("utf-16")),请问经过该编码的字符串的解码顺序是( url解码  utf16  gbk )
解析:
题目中的代码是一个编码过程:
编码:decode() 
解码:encode() 
url编码:urllib.quote() 
line.decode("gbk") 可知 line 是 gbk 编码的

编码过程:
line -> 解码 gbk -> 编码 utf-16 -> 编码 url

解码过程(与编码过程相反):
解码 url -> utf-16 -> gbk
 
5.python是解释性语言,解释型语言的特性有什么? 
非独立和效率低
 
6.下列关于python socket操作叙述正确的是(    CD  )
A 使用recvfrom()接收TCP数据
B 使用getsockname()获取连接套接字的远程地址
C 使用connect()初始化TCP服务器连接
D 服务端使用listen()开始TCP监听

解析:

sk.recv(bufsize[,flag]):接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。

sk.recvfrom(bufsize[.flag]):与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。
sk.getsockname():返回套接字自己的地址。通常是一个元组(ipaddr,port)

sk.connect(address):连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

sk.listen(backlog):开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。

 
7.下面代码运行后,a、b、c、d四个变量的值,描述错误的是? d
import copy
a = [1, 2, 3, 4, [‘a‘, ‘b‘]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append(‘c‘)

a ==  [1,2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
b ==  [1,2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
c ==  [1,2, 3, 4, [‘a‘, ‘b‘, ‘c‘]]
d ==  [1,2, 3, 4, [‘a‘, ‘b‘, ‘c’]]

解析:

b=a,只是换了一个名字,a怎么变b就怎么变,
c是浅拷贝,只复制了a的部分值,仍然共用某些值,所以在对a的子对象进行操作时会改变c
d是深拷贝,完全复制了a的所有值,已经完全与a无关,对a的任何操作都不会影响d

技术图片

 

 

 首先我们看看看b的情况,b实际上和a指向的是同一个值,就好比人的大名和小名,只是叫法不同,但还是同一个人

技术图片

 

接下来再看看c的情况,c的情况和a.copy()的情况是一样的,都是我们所谓的浅拷贝(浅复制),浅拷贝只会拷贝父对象,不会拷贝子对象,通俗的说就是只会拷贝到第二层

技术图片

 

 

若父对象发生变化,c不会变化,因为它已经复制的所有父对象,假如子对象发生变化则c会变
再看看d的情况,这就是我们所说的深复制,不管a进行什么操作,都不会改变d了,他们已经指向不同的值(这里是指在内存中存储的位置不同了)。

 技术图片

 

 

 

 

 

 

 
 
 
 
 

以上是关于python面试题库的主要内容,如果未能解决你的问题,请参考以下文章

再次爆肝熬夜整理Python编程工具面试题库学习资料总集,结尾自取免费分享

下载超过 28762W 次的 Java面试题库(附答案)

牛客网最热门的 Java 面试题库(附答案),终于整理好了

Github知乎下载超过 28762W 次的 面试题库(附答案)

Github上堪称最全的面试题库(Java岗)到底有多香

「SQL面试题库」 No_4 组合两个表