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

************************************************ 

 

posted @ 2019-07-12 23:05  HelloBaby!  阅读(616)  评论(0)    收藏  举报