python面试前准备(一)
上段时间在实验楼实习,被实习的小伙伴们虐的要死,之后被学校喊回来答辩,觉得自己足够菜。想去深圳找一份python的工作,因此趁这段时间对python做了一些总结,参考了一些博客,做出了这总结。
1、什么是lambda函数?有什么好处
lambda是匿名函数。通常用于不需要显式地定义函数,直接传入匿名函数更方便。
例如
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
2、python中pass有什么作用?
pass语句不执行任何操作,只是作为一个占位符或者创建程序使用
3、python中range()函数用法?
生成一组数据
>>> range(1,5) #代表从1到5(不包含5)
[1, 2, 3, 4]
>>> range(1,5,2) #代表从1到5,间隔2(不包含5)
[1, 3]
>>> range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]
4、如何实现tuple和list的转换?
list是python内置的数据类型,是一种有序的集合,可以随时添加和删除其中的元素。
tuple同样也是python内置的数据,tuple和list非常类似,但是tuple一旦初始化就不能修改。
两者转换直接使用tuple和list就可以了。
5、介绍一下except的用法和作用?
try:
except:
except:
[else…][finally…]
执行try下的语句,如果引发异常,则执行过程会跳到except语句。对每个except分支顺序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
try下的语句正常执行,则执行else块代码。如果发生异常,就不会执行
如果存在finally语句,最后总是会执行
6、用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
<.>是贪婪匹配:贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配
<.?>是非贪婪匹配:非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配
7、Python中单下划线与双下划线的区别
Python 用下划线作为变量前缀和后缀指定特殊变量。
+ 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入
+ 以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如 init()代表类的构造函数。
8、单例模式(待补充)
单例模式指的是一个类的实例从始至终只能被创建一次。
单例模式的特点:
某个类只能有一个实例;
必须自行创建这个实例;
必须自行向整个系统提供这个实例。
实现
+ 使用__new__方法
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
class MyClass(Singleton):
a = 1
import方法实现
# mysingleton.py
class My_Singleton(object):
def foo(self):
pass
my_singleton = My_Singleton()
# to use
from mysingleton import my_singleton
my_singleton.foo()
9、单引号,双引号和三引号的区别
单引号与双引号是等效的,都可以表示字符串,换行则需要(),
三银毫可以直接换行,并且可以包含注释。