Python经典面试题
1、逻辑运算符的运算
#and or not #优先级,()> not > and > or print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) # F '''x or y x True,则返回x''' print(1 or 2) # 1 print(3 or 2) # 3 print(0 or 2) # 2 print(0 or 100) # 100 '''x and y x True,则返回y''' print(1 and 2) #2 print(0 and 2) #2 print(2 or 1 < 3) #2 print(2 and 1 < 3) #T print(1<3 or 2) #T print(1 < 3 and 2) #2 print(3 > 1 or 2 and 2) #T
************************************************
2、is和==的区别?
is判断两个引用是否指向的是同一个变量,即内存id是否相等, ==则是调用的__eq__方法,一般是用于判断值是否相等,也可以重写__eq__方法实现想要的效果。
************************************************
3、dict与list的查找复杂度?
dict用hash实现,查找的时间复杂度是O(1),list则为O(n)。
************************************************
4、http和https的区别
https协议需要到ca申请证书,一般免费证书很少,需要交费。 注:CA - certificate authority,身份认证,权威机构认证,CA认证: http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议 http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。 http的连接很简单,是无状态的 HTTPS协议是由SSL(安全套接层)+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全 注:SSL(安全套接层协议):是为网络通信提供安全及数据完整性的一种安全协议。 SSL协议提供的服务主要有: 1.认证用户和服务器,确保数据发送到正确的客户机和服务器; 2.加密数据以防止数据中途被窃取; 3.维护数据的完整性,确保数据在传输过程中不被改变
************************************************
5、一行代码实现1--100之和
sum(range(0,101))
************************************************
6、如何在一个函数内部修改全局变量
num = 1
def fun():
global a
a = 10
print(a)
fun()
print(a)
************************************************
7、列出5个python标准库
os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间 random:随机数
************************************************
8、字典如何删除键和合并两个字典
dic = {"name":"Diy","age":11}
del dic["name"]
print(dic) #结果:{'age': 11}
dic2 = {"name":"James"}
dic.update(dic2)
print(dic) #结果:{'age': 11, 'name': 'James'}
************************************************
9、谈下python的GIL
GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL), 使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中, 线程的运行仍是有先后顺序的,并不是同时进行。 多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
************************************************
10、python实现列表去重的方法
list = [1,1,2,2,3,3,4,4,5,5]
demo = set(list) #先去重
print(demo) #结果:{1, 2, 3, 4, 5}
demo1 = [i for i in demo]
print(demo1) #结果:[1, 2, 3, 4, 5]
************************************************
11、fun(*args,**kwargs)中的*args,**kwargs什么意思?
首先,解释星号的作用,一个星号*的作用是将tuple或者list中的元素进行unpack,分开传入,作为多个参数;
两个星号**的作用是把dict类型的数据作为参数传入。
kwargs是keyword argument的缩写,args就是argument。我们知道,在Python中有两种参数,
一种叫位置参数(positional argument),一种叫关键词参数(keyword argument),
关键词参数只需要用 keyword = somekey 的方法即可传参,而位置参数只能由参数位置决定。
这也就决定了位置参数一定要在前面,否则关键词参数数量的变化(比如有些kwargs有默认值因此没有传参或者在后面传参的),
都会使得位置无法判断。因此常见的也是*args 在 **kwargs 前面。
这两个的用途和效果如下:
def this_fun(a,b,*args,**kwargs):
print()
print(b)
print(args)
print(kwargs)
this_fun(0,1,2,3,index1=11,index2=22)
#结果:
0
1
(2, 3)
{'index1': 11, 'index2': 22}
************************************************
12、python2和python3的range(100)的区别?
python2返回列表,python3返回迭代器,节约内存
************************************************
13、一句话解释什么样的语言能够用装饰器?
函数可以作为参数传递的语言,可以使用装饰器
************************************************
14、python内建数据类型有哪些?
整型--int 布尔型--bool 字符串--str 列表--list 元组--tuple 字典--dict
************************************************
15、列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
map()函数第一个参数是fun,第二个参数是一般是list,第三个参数可以写list,也可以不写,根据需求
list = [1,2,3,4,5]
def fun(x):
return x**2
rse = map(fun,list)
l = [i for i in rse if i>10]
print(l) #结果: [16,25]
************************************************
16、python中生成随机整数、随机小数、0--1之间小数方法
随机整数:random.randint(a,b),生成区间内的整数 随机小数:习惯用numpy库,利用np.random.randn(5)生成5个随机小数 0-1随机小数:random.random(),括号中不传参 import random import numpy as np res1 = random.randint(10,20) res2 = np.random.randn(5) res3 = random.random() print(res1) print(res2) print(res3) #结果: 15 [-0.06864183 -0.0960355 1.31538408 0.79103814 -1.2347433 ] 0.19029834589798245
************************************************

浙公网安备 33010602011771号