python-interview-questions

1.一行代码实现1--100之和
>>> 
>>> sum(range(1,101))
5050
>>> 

2.Python是如何进行内存管理的?

从三个方面来说,主要有方面的措施:对象的引用计数机制、垃圾回收机制、内存池机制。

一、对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况:

1、一个对象分配一个新名称

2、将其放入一个容器中(如列表、元组或字典)

引用计数减少的情况:

1、使用del语句对对象别名显示的销毁

2、引用超出作用域或被重新赋值

sys.getrefcount( )函数可以获得对象的当前引用计数

多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。

二、垃圾回收 1、当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

2、当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

三、内存池机制 Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

1、Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

2、Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3、对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。


3.如何在一个函数内部修改全局变量
a=1

def change():
    global a
    a=10

print(a)
change()
print(a)

输出

macname@MacdeMBP ~ % python3 test.py
1
10
macname@MacdeMBP ~ % 

4.列出5个python标准库
os:提供了不少与操作系统相关联的函数

sys:   通常用于命令行参数

re:   正则匹配

math: 数学运算

datetime:处理日期时间

5.字典如何删除键和合并两个字典
a={"key1":"v1","key2":"v2"}
b={"key3":"v3","key4":"v4"}

print(a)
del a["key1"]
print(a)

a.update(b)
print(a)

输出

macname@MacdeMBP ~ % python3 test.py
{'key1': 'v1', 'key2': 'v2'}
{'key2': 'v2'}
{'key2': 'v2', 'key3': 'v3', 'key4': 'v4'}
macname@MacdeMBP ~ % 

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

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


7.python实现列表去重的方法
a=[1,2,3,4,1,2,3]
tmp=list(set(a))
print(tmp)

输出

macname@MacdeMBP ~ % python3 test.py
[1, 2, 3, 4]
macname@MacdeMBP ~ % 

8.fun(args,**kwargs)中的args,**kwargs什么意思?
def test(*args,**kwargs):
    print(args)
    print(kwargs)

test("a","b","c",d="aaa")

输出

macname@MacdeMBP ~ % python3 test.py
('a', 'b', 'c')
{'d': 'aaa'}
macname@MacdeMBP ~ % 

9.python2和python3的range(100)的区别
  • python2返回列表,python3返回迭代器,节约内存

10.一句话解释什么样的语言能够用装饰器?
  • 函数可以作为参数传递的语言,可以使用装饰器

11.python内建数据类型有哪些

整型--int

布尔型--bool

字符串--str

列表--list

元组--tuple

字典--dict


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

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

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

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