Python初级面试语法<一>

python学习网 2018-08-24 08:37:02

准备准备面试~

可变对象与不可变对象

可变对象存的是地址,地址不变,但地址指向的值可以变(引用类型)。类型:list、dict、set等

不可变对象直接存值,值变了,就是另一个对象了(值类型)。int、float、tuple、string等

直接赋值,浅拷贝,深拷贝

在含有可变对象讨论这个问题更显得有意义。

直接赋值:直接传递对象的引用。浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变。深拷贝,原始对象的改变不会造成深拷贝里任何子元素的改变。

__init__和__new__区别

__new__控制新实例的生成,__init__初始化一个新实例。可以用__new__实现单例模式。

设计模式

大话设计的工厂、代理、单例、观察者...... 。想起了这篇文章 20年前GoF提出的设计模式,对这个时代是否还有指导意义?

编码、解码

字符编码有GBK、ASCII、UTF-8、 Unicode等。encode和decode分别指编码和解码。明文--->选中一种编码加密-->密文,反之解码。

列表推导(list comprehension)和生成表达式(generator expression)的优劣

列表推导一下子生成完了列表,免去以后计算的时间,提高了性能,浪费了内存。而生成表达式延迟了列表的生成时间,需要它才一个个生成出来,节省了内存,降低了性能。

什么是装饰器?

装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数。

如果装饰器和被装饰的函数还有其他参数呢(也可以问如果在函数之后再进行装饰,该如何做)?

再包装一层,个人觉得这里说得通俗易懂 https://zhidao.baidu.com/question/580801144.html

使用装饰器实现单例模式的代码

def singleton(cls, *args, **kwargs):
    instance = {}
    def _instance():
        if cls not in instance:
            instance[cls] = cls(*args, *kwargs)
        return instance[cls]
    return _instance

使用装饰器和使用其他方法实现单例区别?

未能找到比较好的解答,求推荐。感觉这篇写得不错 https://www.cnblogs.com/huchong/p/8244279.html

手写一个邮箱验证正则

(题外话:没必要太纠结邮箱格式,毕竟邮箱格式是会随着时代变的,以前不许有中文,现在都允许有了)

邮箱前缀允许中文、英文、数字 ,中间必须有@符号 ,最后必须是域名 域名名称 只可以是英文和符号_ -的组合。

^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$

( 随意看看: ^表示开始,$表示结束。[ 标记匹配字符表达式的开始,] 标记匹配字符表达式的结束。

+表示匹配前面表达式的字符要出现一个或多个,\表示转义。( 和 )分别标记子表达式的开始和结束。)

 

 

续更中~

阅读(975) 评论(0)