Python 是一门兼具简单与功能强大的编程语言。你无须浪费时间去造轮子,它会让我们专注于如何去解决问题。它的灵活性、易用性、简洁性、丰富的资源使得它广泛应用在不同领域。近年来,随着人工智能的浪潮汹涌来袭,python当之无愧成了大家的宠儿,当然,在你简历上如果写着你会python,那么,面试官就会问你很多有关python语言的小问题,为了便于自己复习,笔者特意整理了python面试题系列(习题难易程度和顺序无关),希望在帮到自己的同时也帮到广大编程爱好者或者求职者。
话不多说,直接上题:
1.Python里面search()和match()的区别?
match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。
2.Python里面如何生成随机数?
import random
random.random()
它会返回一个随机的0和1之间的浮点数
3.python中如何在一个function里面设置一个全局的变量?
global
语句被用来声明x
是全局的——因此,当我们在函数内把值赋给x
的时候,这个变化也反映在我们在主块中使用x
的值的时候。你可以使用同一个global
语句指定多个全局变量。例如global x, y, z
。
4.如何用Python删除一个文件?
使用os.remove(filename)或者os.unlink(filename)
5.什么是lambda函数?它有什么好处?
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。 lambda 函数不能包含命令,它们所包含的表达式不能超过一个。不要试图向lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。
举个栗子:
f = lambda x:x**2
print(f(4))
6.Python里面如何实现tuple和list的转换?
这个直接转换就好,看下面的栗子:
>>> l = [1,2,3,4,5]
>>> tuple(l)
(1, 2, 3, 4, 5)
>>> t = (1,2,3,4,5)
>>> list(t)
[1, 2, 3, 4, 5]
7.Python是如何进行内存管理的?
Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于管理对小块内存的申请和释放
内存池(memory pool)的概念:
当 创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低。内存池的概念就是预先在内存中申请一定数量的,大小相等 的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存。这样做最显著的优势就是能够减少内存碎片,提升效率。
内存池的实现方式有很多,性能和适用范围也不一样。
python中的内存管理机制——Pymalloc:
python中的内存管理机制都有两套实现,一套是针对小对象,就是大小小于256bits时,pymalloc会在内存池中申请内存空间;当大于256bits,则会直接执行new/malloc的行为来申请内存空间。
关于释放内存方面,当一个对象的引用计数变为0时,python就会调用它的析构函数。在析构时,也采用了内存池机制,从内存池来的内存会被归还到内存池中,以避免频繁地释放动作。
8.到底什么是Python?
下面是一些关键点:
x=111
和x="I'm a string"
这样的代码,程序不会报错。public
和private
),这么设计的依据是“大家都是成年人了”。numpy
就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过Python实现的。9.Python和多线程(multi-threading)。这是个好主意码?列举一些让Python代码以并行方式运行的方法。
Python并不支持真正意义上的多线程。Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意。Python中有一个被称为Global Interpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。经过GIL这一道关卡处理,会增加执行的开销。这意味着,如果你想提高代码的运行速度,使用threading
包并不是一个很好的方法。
不过还是有很多理由促使我们使用threading
包的。如果你想同时执行一些任务,而且不考虑效率问题,那么使用这个包是完全没问题的,而且也很方便。但是大部分情况下,并不是这么一回事,你会希望把多线程的部分外包给操作系统完成(通过开启多个进程),或者是某些调用你的Python代码的外部程序(例如Spark或Hadoop),又或者是你的Python代码调用的其他代码(例如,你可以在Python中调用C函数,用于处理开销较大的多线程工作)。
10.简要描述Python的垃圾回收机制(garbage collection)。
这里能说的很多。你应该提到下面几个主要的点:
o1
和o2
,而且符合o1.x == o2
和o2.x == o1
这两个条件。如果o1
和o2
没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。