面试题2.19

1.python 中定义函数时如何写可变参数与关键字参数
可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。这些可变参数在函数调用时自动组装为一个tuple
而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def calc(*args):
    a = sum(args)
    print(args)
    return a
li = [1,6,8]
print(*li)
s = calc(*li)
print(s)



def d(**kwargs):
    print(kwargs)
dic = {'name':'ldq','age':18}
d(**dic,have='qq')
2.什么是lambda表达式
本质是匿名函数,通常是在需要一个函数,但这个函数又不经常使用,但是又不想费神去命名一个函数的场合下使用
3.re模块的match()和search()有什么区别?
match()函数只检测RE是不是在string的开始位置匹配,
search()会扫描整个string查找匹配;
也就是说match()只有在0位置匹配成功的话才有返回,
如果不是开始位置匹配成功的话,match()就返回none。

例如:
print(re.match(‘super’, ‘superstition’).span())   会返回(0, 5)
而print(re.match(‘super’, ‘insuperable’))   则返回None

search()会扫描整个字符串并返回第一个成功的匹配
例如:print(re.search(‘super’, ‘superstition’).span())返回(0, 5)
print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)
4.1 or 21 and 2 输出分别是什么?为什么?
1 or 2输出的是:11 and 22
1是Ture 当使用or时,判断第一个为Ture时 就打印第一个数,不去考虑后面的数
and 是从左到右计算表达式,若值都为Ture时,则取最右边的的值
5.1 < (2 == 2) 和 1 < 2 == 2结果分别是什么?为什么?
Flase:即1<True
true: 即True == 2
6.[i % 2 for i in range(10)] 和 (i % 2 for i in range(10)) 输出结果分别是什么
一个是列表对象,一个是生成器对象
7.python2 与 python3 有哪些显著地区别
    统一了字符编码的支持
    增加一些新语法:print 改为函数
    python3中没有经典类,只有新式类
    xrange 重命名为range
    python2的默认编码是asscii,python3默认用utf-8编码
    字符串是最大的变化之一,这个变化使得编码问题降到了最低可能。在 Python2 中,字符串有两个类型,一个是 unicode,一个是 str,前者表示文本字符串,后者表示字节序列,不过两者并没有明显的界限,开发者也感觉很混乱,不明白编码错误的原因,不过在 Python3 中两者做了严格区分,分别用 str 表示字符串,byte 表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列,这就从源头上阻止了编码错误的问题。
8.描述 Unicode utf-8 gbk 等编码之间的关系?
Unicode 可以通过 编码 转化为bytes类型
bytes可以通过相同方式的解码转化为Unicode
9.请描述with的用法?如果自己的类需要支持with语句,应该怎样书写?
用法 with 通过对象的__entry__()方法进入,无论执行过程中是否有异常,最后通过__exit__()结束
只要保证自己的类中有__entry__()与__exit__()方法即可使用with
class Open:
    def __init__(self,filepath,mode='r',encoding='utf-8'):
        self.filepath=filepath
        self.mode=mode
        self.encoding=encoding

    def __enter__(self):
        # print('enter')
        self.f=open(self.filepath,mode=self.mode,encoding=self.encoding)
        return self.f

    def __exit__(self, exc_type, exc_val, exc_tb):
        # print('exit')
        self.f.close()
        return True
    def __getattr__(self, item):
        return getattr(self.f,item)

with Open('a.txt','w') as f:
    print(f)
    f.write('aaaaaa')
    f.wasdf #抛出异常,交给__exit__处理
10.python中如何判断一个对象是否可调用对象?哪些对象可以是可调用对象?如何定义一个类,使对象本身就是可调用对象?
判断是否有call方法

 

posted @ 2018-02-19 19:10  TAMAYURA  阅读(158)  评论(0编辑  收藏  举报