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()
解码过程(与编码过程相反):
解码 url -> utf-16 -> 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编程工具面试题库学习资料总集,结尾自取免费分享