1、多线程使用Python是个好主意吗?列出一些方法可以让一些Python代码以并行方式运行。
答:Python不允许真正意义上的多线程。它有一个多线程包,但如果你想使用多线程来加速你的代码,那么使用它通常不是一个好主意。Python有一个名为全局解释器锁(Global Interpreter Lock(GIL))的结构。GIL确保每次只能执行一个“线程”。一个线程获取GIL,做一点工作,然后将GIL传递到下一个线程。这种情况发生的很快,因此对于人眼看来,你的线程似乎是并行运行的,但它们实际上只是轮流使用相同的CPU核心。所有这些GIL传递都增加了运行的内存。这意味着如果你想让代码运行得更快,那么使用线程包通常不是一个好主意。
使用Python的线程包也是有原因的。如果你想同时运行一些东西,并且效率不是一个问题,那么它就完全没问题了。或者,如果你正在运行需要等待某些事情的代码(例如某些IO),那么它可能会很有意义。但是线程库不会让你使用额外的CPU核心。
多线程可以外包到操作系统(通过多处理),一些调用Python代码的外部应用程序(例如,Spark或Hadoop),或者Python代码调用的一些代码例如:你可以使用你的Python代码调用一个C函数来完成昂贵的多线程事务。
2、这段代码输出了什么:
def f(x,l=[]):for i in range(x):l.append(i*i)print(l) f(2)f(3,[3,2,1])f(3)
答:[0, 1][3, 2, 1, 0, 1, 4][0, 1, 0, 1, 4]
3、如何在Python中管理内存?
Python中的内存管理由Python私有堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆。Python解释器负责处理这个问题。Python对象的堆空间分配由Python的内存管理器完成。核心API提供了一些程序员编写代码的工具Python还有一个内置的垃圾收集器,它可以回收所有未使用的内存,并使其可用于堆空间。
4、range&xrange有什么区别?
在大多数情况下,xrange和range在功能方面完全相同。它们都提供了一种生成整数列表的方法,唯一的区别是range返回一个Python列表对象,x range返回一个xrange对象。
这就表示xrange实际上在运行时并不是生成静态列表。它使用称为yielding的特殊技术根据需要创建值。该技术与一种称为生成器的对象一起使用。因此如果你有一个非常巨大的列表,那么就要考虑xrange。
5、Python中help()和dir()函数的用法是什么?
Help()和dir()这两个函数都可以从Python解释器直接访问,并用于查看内置函数的合并转储。
help()函数:help()函数用于显示文档字符串,还可以查看与模块,关键字,属性等相关的使用信息。
dir()函数:dir()函数用于显示定义的符号。
6、NumPy中有哪些操作Python列表的函数?
Python的列表是高效的通用容器。它们支持(相当)有效的插入,删除,追加和连接,Python的列表推导使它们易于构造和操作。
它们有一定的局限性:它们不支持像素化加法和乘法等“向量化”操作,并且它们可以包含不同类型的对象这一事实意味着Python必须存储每个元素的类型信息,并且必须执行类型调度代码在对每个元素进行操作时。
NumPy不仅效率更高; 它也更方便。你可以免费获得大量的向量和矩阵运算,这有时可以避免不必要的工作。它们也得到有效实施。
NumPy数组更快,你可以使用NumPy,FFT,卷积,快速搜索,基本统计,线性代数,直方图等内置。