Python面试题

来源:互联网 发布:dota2最帅英雄知乎 编辑:程序博客网 时间:2024/05/23 23:48

1、Python里如何实现tuple和list的转换?

函数tuple(seq)可以把所有可迭代的(iterable)序列转换成一个tuple, 元素不变,排序也不变。

例如,tuple([1,2,3])返回(1,2,3), tuple(‘abc’)返回(‘a’.'b’,'c’).如果参数已经是一个tuple的话,函数不做任何拷贝而直接返回原来的对象,

所以在不确定对象是不是tuple的时候来调用tuple()函数也不是很耗费的。

函数list(seq)可以把所有的序列和可迭代的对象转换成一个list,元素不变,排序也不变。
例如 list([1,2,3])返回(1,2,3), list(‘abc’)返回['a', 'b', 'c']。如果参数是一个list, 她会像set[:]一样做一个拷贝

补充:

Tuple 是不可变 list。 一旦创建了一个 tuple 就不能以任何方式改变它。
Tuple 与 list 的相同之处

定义 tuple 与定义 list 的方式相同, 除了整个元素集是用小括号包围的而不是方括号。
Tuple 的元素与 list 一样按定义的次序进行排序。 Tuples 的索引与 list 一样从 0 开始, 所以一个非空 tuple 的第一个元素总是 t[0]。
负数索引与 list 一样从 tuple 的尾部开始计数。
与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时, 会得到一个新的 list ;当分割一个 tuple 时, 会得到一个新的 tuple。
Tuple 不存在的方法
您不能向 tuple 增加元素。Tuple 没有 append 或 extend 方法。
您不能从 tuple 删除元素。Tuple 没有 remove 或 pop 方法。
您不能在 tuple 中查找元素。Tuple 没有 index 方法。
然而, 您可以使用 in 来查看一个元素是否存在于 tuple 中。
用 Tuple 的好处
A)Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。
B)如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换。

2、介绍一下Python下range()函数的用法?

range(5)   #0,1,2,3,4      默认从0开始,增量为1

range(5,10)   #5,6,7,8,9      默认增量为1

range(10,1,-1)   #10,9,8,7,6,5,4,3,2

3、python中的filter方法?

filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,

并返回结果做过滤。最终一次性返回过滤后的结果。

4、如何反序的迭代一个序列?

如果是一个list, 最快的解决方案是:list.reverse()

如果不是list, 最通用但是稍慢的解决方案是:for i in range(len(sequence)-1, -1, -1)

5、Python文件操作的面试题?

5.1. 如何用Python删除一个文件?
使用os.remove(filename)或者os.unlink(filename);
5.2. Python如何copy一个文件?
shutil模块有一个copyfile函数可以实现文件拷贝

6、Python面试题:Python是如何进行内存管理的?

Python的内存管理是由Python的解释器负责的,开发人员可以从内存管理事务中解放出来,致力于应用程序的开

发,这样就使得开发的程序错误更少,程序更健壮,开发周期更短。

7、Python中如何定义一个函数?

定义函数的格式是: def functionName(arg):

说明:函数的名字也必须以字母开头,可以包括下划线“-”,但不能把Python的关键字定义成函数的名字。函数内的

语句数量是任意的,每个语句至少有一个空格的缩进,以表示此语句属于这个函数的。缩进结束的地方,函数

然结束。

8、介绍一下except的用法和作用?

Python的except用来捕获所有异常, 因为Python里面的每次错误都会抛出 一个异常,所以每个程序的错误都被当

作一个运行时错误。
一下是使用except的一个例子:
try:
foo = opne(“file”) #open被错写为opne
except:
sys.exit(“could not open file!”)
因为这个错误是由于open被拼写成opne而造成的,然后被except捕获,所以debug程序的时候很容易不知道出了什么问题

9、Python里面search()和match()的区别?

match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0

位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
例如:print(re.match(‘super’, ‘superstition’).span())会返回(0, 5)
而print(re.match(‘super’, ‘insuperable’))则返回None
search()会扫描整个字符串并返回第一个成功的匹配
例如:print(re.search(‘super’, ‘superstition’).span())返回(0, 5)
print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)

10、如何用Python输出一个Fibonacci数列?

a,b = 0,1while b<100:print(b)a,b = b,a+b
11、请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本

x = int(input("请输入一个整数:"))请输入一个整数:10 if x<0:x = 0print("负数变为0")elif x ==0:print("零")else:print("输入为整数")输入为整数
12、什么是lambda函数?

Python允许你定义一种单行的小函数。定义lambda函数的形式如下:labmda 参数:表达式lambda函数默认返回表达式的

值。你也可以将其赋值给一个变量。lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一个:

f = lambda x,y:x*y>>> f(5,6)30f2 = lambda x,y=0,z=0:x+y+z>>> f2(3,4,5)12

13、Python面试题:请写出一段Python代码实现删除一个list里面的重复元素?

A 比较容易记忆的是用内置的set:l1 = ['b','c','d','b','c','a','a']       l2 = list(set(l1))   改变了元素顺序(増序)

B l2 = {}.fromkeys(l1).keys()      去除元素后顺序改变了

l1 = [1,2,23,6,9,8,7,4,1,2,3]>>> l2 = {}.fromkeys(l1).keys()>>> print(l2)dict_keys([1, 2, 3, 4, 6, 23, 8, 9, 7])
C 删除重复元素后保持原来的顺序

>>> l1 = [1,2,23,6,9,8,7,4,1,2,3]>>> l2 = list(set(l1))>>> l2.sort(key=l1.index)>>> print(l2)[1, 2, 23, 6, 9, 8, 7, 4, 3]
l2 = sorted(set(l1),key=l1.index)
D 使用遍历

>>> l1 = [1,2,23,6,9,8,7,4,1,2,3]>>> l2 = []>>> for i in l1:if not i in l2:l2.append(i)>>> print(l2)[1, 2, 23, 6, 9, 8, 7, 4, 3]


14、Python是如何进行类型转换的?

Python提供了将变量或值从一种类型转换成另一种类型的内置函数(int、float、str、tuple、list)。int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息。

15、写一个简单的python socket编程

python 编写server的步骤:

1).第一步是创建socket对象。调用socket构造函数。如:socket = socket.socket( family, type )family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。

2).第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:socket.bind( address )由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。

3).第三步是使用socket套接字的listen方法接收连接请求。socket.listen( backlog )backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。

4).第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。connection, address = socket.accept()调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。

5). 第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。

6). 传输结束,服务器调用socket的close方法关闭连接。

python编写client的步骤:

1). 创建一个socket以连接服务器:socket = socket.socket( family, type )

2).使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:socket.connect( (host,port) )host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。

3). 处理阶段,客户和服务器将通过send方法和recv方法通信。4. 传输结束,客户通过调用socket的close方法关闭连接。


0 0
原创粉丝点击