一、什么是Pillow库?
Pillow是PIL(Python图形库)的一个友好分支。对于用户比PIL更加友好,对于任何在图形领域工作的人是必备的库。
二、如何使用Pillow实现图像缩放?
在Pillow中图片的缩放有以下两种方式。
(1)使用resize函数。
(2)使用thumbnail函数。
resize函数可以缩小,也可以放大。
thumbnail只能缩小,不能放大,所以如果只打开一次图片,要存出多个尺寸的话,要么从大到小开始缩放。
或者使用resize从大到小开始缩放,因为用resize放大的话,可以想象那个马赛克。
当然,也可以设置缩放图片的质量(PIL.Image.NEAREST:最低质量;PIL.Image.BILINEAR:双线性;PIL.Image.BICUBIC:三次样条插值;Image.ANTIALIAS:最高质量)。
三、什么是正则表达式?谈谈你对正则表达式的理解。
正则表达式(Regular Expression, RE)又称为正规表示法或常规表示法,常常用来检索、替换那些符合某个模式的文本。它首先设定好了一些特殊的字及字符组合,通过组合的“规则字符串”来对表达式进行过滤,从而获取或匹配想要的特定内容。它具有灵活、逻辑性和功能性强,能迅速地通过表达式从字符串中找到所需信息的优点,但对于刚接触的人来说,比较晦涩难懂。
四、如何用Python来进行查询和替换一个文本字符串?Python中re模块函数里面search()和match()函数有何区别?
可以使用sub()方法来进行查询和替换,sub方法的格式为:
replacement是被替换成的文本;
string是需要被替换的文本;
count是一个可选参数,指最大被替换的数量。
match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配,也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。
五、Python中如何实现多线程?
线程是轻量级的进程,多线程允许一次执行多个线程。众所周知,Python是一种多线程语言,它有一个多线程包。
GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下一个线程之前执行一些操作,这就产生了并行执行的错觉。但实际上,只是线程轮流在CPU上。当然,所有传递都会增加执行的开销。
六、创建两个线程,其中一个输出1~52,另外一个输出A~Z。输出格式要求:
12A 34B 56C 78D。
七、介绍一下except的用法和作用。
Python的except用来捕获所有异常,因为Python里面的每次错误都会抛出一个异常,所以每个程序的错误都被当作一个运行时错误。
八、Python如何捕获异常?
Python中捕获异常可以有三种方式。
(1)使用try和except语句来捕获异常,具体代码如下。
捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该Python异常处理的except代码块捕获所有的异常。
(2)用raise语句手动引发一个异常,具体代码如下。
(3)采用sys模块回溯最后的异常,具体代码如下。
九、Python到底是什么样的语言?你可以比较其他技术或者语言来回答你的问题。
Python是解释型语言。这意味着不像C和其他语言,Python运行前不需要编译。其他解释型语言包括PHP和Ruby。Python是动态类型的,这意味着你不需要在声明变量时指定类型。Python是面向对象语言,所以允许定义类并且可以继承和组合。Python没有访问标识,如在C++中的public、private,在Python中,函数是一等公民。这就意味着它们可以被赋值,从其他函数返回值,并且传递函数对象。类不是一等公民。写Python代码很快,但是跑起来会比编译型语言慢。Python允许使用C扩展程序,所以瓶颈可以得到处理。Numpy库就是一个很好的例子,因为很多代码不是Python直接写的,所以运行很快。Python使用场景很多:Web应用开发、自动化、科学建模、大数据应用等。它也经常被看作“胶水”语言,使得不同语言间可以衔接上。Python能够简化工作,使得程序员能够关心如何重写代码而不是详细看一遍底层实现。
十、单元测试是什么?单元测试有什么好处?
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或场景)下某个特定函数的行为。单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
单元测试从长期来看,可以提高代码质量,减少维护成本,降低重构难度。通过单元测试我们能快速熟悉代码,不需要深入地阅读代码,便能知道这段代码做什么工作,有哪些特殊情况需要考虑,包含哪些业务。