python面试题讲解题库_1.Python面试题(持续更新,配有讲解)

1.一行代码实现 1--100之和

sum(range(0,101))

2.如何在一个函数内部修改全局变量

c=5201314

def s_():

global c

c=500

s_()

print(c)

3.谈下python的GIL

GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。

多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大

4.python实现列表去重的方法

方法1

a=[12,11,20,12,13,45,45,66,66,11]

b = set(a)#转化为集合

[x for x in b]

方法2

a=[12,11,20,12,13,45,45,66,66,11]

b=[]

for x in a:

if x not in b:

b.append(x)

a=b

5、fun(args,kwargs)中的args,**kwargs什么意思?

当函数的参数不确定时,可以使用args 和kwargs,args 没有key值,**kwargs有key值。

def fun_var_args(farg, *args):

print "arg:", farg

for value in args:

print "another arg:", value

fun_var_args(1, "two", 3) # *args可以当作可容纳多个变量组成的list

result:

arg: 1

another arg: two

another arg: 3

**kwargs:

def fun_var_kwargs(farg, **kwargs):

print "arg:", farg

for key in kwargs:

print "another keyword arg: %s: %s" % (key, kwargs[key])

fun_var_kwargs(farg=1, myarg2="two", myarg3=3) # myarg2和myarg3被视为key, 感觉**kwargs可以当作容纳多个key和value的dictionary

result:

arg: 1

another keyword arg: myarg2: two

another keyword arg: myarg3: 3

6、python2和python3的range(100)的区别

python2返回列表,python3返回迭代器,节约内存

7、一句话解释什么样的语言能够用装饰器?

函数可以作为参数传递的语言,可以使用装饰器

8、python内建数据类型有哪些

整型--int

布尔型--bool

字符串--str

列表--list

元组--tuple

字典--dict

9.简述面向对象中new和init区别

class Bike:

def __init__(self ,newWheelNum,newColor): #会自动调用,可以接受参数

self.newWheelNum = newWheelNum

self.color = newColor

def move(self):

print('车会跑')

BM =Bike(2,'green')

print('车的颜色为:%s'%BM.color)

print('车轮数量为:%d'%BM.newWheelNum)

输出结果:

车的颜色为:green

车轮数量为:2

1、new至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别

2、new必须要有返回值,返回实例化出来的实例,这点在自己实现new时要特别注意,可以return父类(通过super(当前类名, cls))new出来的实例,或者直接是object的new出来的实例

3、init有一个参数self,就是这个new返回的实例,init在new的基础上可以完成一些其它初始化的动作,init不需要返回值

4、如果new创建的是当前类的实例,会自动调用init函数,通过return语句里面调用的new函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的init函数,也不会调用其他类的init函数。

class A(object):

def __init__(self):

print('这是init方法',self)

def __new__(cls):

print('这是cls的Id',id(cls))

print("这是 new 方法",object.__new__(cls))

return object.__new__(cls)

A()

print('这是类A的id',id(A))

输出结果:

这是cls的Id 5833720

这是 new 方法 <__main__.a object at>

这是init方法 <__main__.a object at>

这是类A的id 5833720

10、简述with方法打开处理文件帮我我们做了什么?

f = open("./1.txt",'wb')

try:

f.write('hello word')

except:

pass

finally:

f.close()

打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open

写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close

(当然还有其他自定义功能,有兴趣可以研究with方法源码)

11.列表[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 fn(x):

return x**2

res = map(fn,list)

res =[i for i in res if i >10]

print(res)

输出结果:

[16, 25]

12.python中生成随机整数、随机小数、0--1之间小数方法

随机整数:random.randint(a,b),生成区间内的整数

随机小数:习惯用numpy库,利用np.random.randn(5)生成5个随机小数

0-1随机小数:random.random(),括号中不传参

import random

import numpy as np

result = random.randint(10,20)

res = np.random.randn(5)

ret = random.random()

print("正整数",result)

print("五个随机小数",res)

print("0-1小数",ret)

13、python2和python3区别?列举5个

1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')

Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi'

2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存

3、python2中使用ascii编码,python中使用utf-8编码

4、python2中unicode表示字符串序列,str表示字节序列

python3中str表示字符串序列,byte表示字节序列

5、python2中为正常显示中文,引入coding声明,python3中不需要

6、python2中是raw_input()函数,python3中是input()函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值