美文网首页
1.Python面试题(持续更新,配有讲解)

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

作者: 记事本的记事本 | 来源:发表于2018-06-10 19:06 被阅读0次
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.简述面向对象中newinit区别
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返回的实例,initnew的基础上可以完成一些其它初始化的动作,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 0x0000000001DAB0B8>
这是init方法 <__main__.A object at 0x0000000001DAB0B8>
这是类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()函数

相关文章

网友评论

      本文标题:1.Python面试题(持续更新,配有讲解)

      本文链接:https://www.haomeiwen.com/subject/tzhqeftx.html