38、面向对象深度优先和广度优先是什么?

39、面向对象中super的作用?

40、是否使用过functools中的函数?其作用是什么?

  1. Python自带的 functools 模块提供了一些常用的高阶函数,也就是用于处理其它函数的特殊函数。换言之,就是能使用该模块对可调用对象进行处理。
  2.  
  3. functools模块函数概览
  4. functools.cmp_to_key(func)
  5. functools.total_ordering(cls)
  6. functools.reduce(function, iterable[, initializer])
  7. functools.partial(func[, args][, *keywords])
  8. functools.update_wrapper(wrapper, wrapped[, assigned][, updated])
  9. functools.wraps(wrapped[, assigned][, updated])

41、列举面向对象中带双下划线的魔术方法?

1. init()

2. del()

  1. 在调用del方法的时候,实际使用的是del()
  2.  
  3. class Person(object):
  4. def __del__(self):
  5. print('我给干掉啦')
  6.  
  7. bill = Person()
  8. del bill #我给干掉啦

3. new()

  1. new()只有继承自objectd的类才有new()这方法是在init()之前调用的,用于生成实例对象。多用于设计模式中的单例模式。单例模式是为了确保类有且只有一个对象。多用于日志记录和数据库操作,打印机后台处理程序。这样子可以避免对统一资源产生相互冲突的请求
  2. new()负责创建一个类的对象,init()方法负责对创建后的类对象进行默认设置
  3. class Singleton(object):
  4. def __new__(cls):
  5. if not hasattr(cls, 'instance'):
  6. cls.instance = super(Singleton, cls).__new__(cls)
  7. return cls.instance
  8.  
  9. s = Singleton()
  10. print('Object created', s)
  11. s1 = Singleton()
  12. print('Object created', s1)
  13.  
  14. # output
  15. # Object created <__main__.Singleton object at 0x0000018EFF662DA0>
  16. # Object created <__main__.Singleton object at 0x0000018EFF662DA0>
  17.  
  18. cls是当前类,new()返回的是一个实例,和init()中的self是同一个东西

42、如何判断是函数还是方法?

一般情况下,单独写一个def func():表示一个函数,如果写在类里面是一个方法。但是不完全准确。

  1. class Foo(object):
  2. def fetch(self):
  3. pass
  4.  
  5. print(Foo.fetch) # 打印结果<function Foo.fetch at 0x000001FF37B7CF28>表示函数
  6. # 如果没经实例化,直接调用Foo.fetch()括号里要self参数,并且self要提前定义
  7. obj = Foo()
  8. print(obj.fetch) # 打印结果<bound method Foo.fetch of <__main__.Foo object at 0x000001FF37A0D208>>表示方法

43、面向对象中的property属性、类方法、静态方法?

property属性:

类方法:

静态方法:

44、列举面向对象中的特殊成员以及应用场景

  1. 1. __doc__
  2. 表示类的描述信息
  3. class Foo:
  4. """ 描述类信息,这是用于看片的神奇 """
  5. def func(self):
  6. pass
  7. print Foo.__doc__
  8.  
  9. ==============
  10. 描述类信息,这是用于看片的神奇
  1. 2. __module__ __class__
  2.  __module__ 表示当前操作的对象在哪个模块
  3. __class__ 表示当前操作的对象的类是什么
  1. 3. __init__
  2. 构造方法,通过类创建对象时,自动触发执行。
  1. 4. __del__
  2. 析构方法,当对象在内存中被释放时,自动触发执行。
  3.  
  4. 注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。
  1. 5. __call__
  2.   对象后面加括号,触发执行。
  3.  
  4. 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
  1. 6. __dict__
  2.   类或对象中的所有成员
  1. 7. __str__
  2. 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

8、__eq__

45、什么是反射?以及应用场景?

46、用尽量多的方法实现单例模式。

一、模块单例

Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。

  1. #foo1.py
  2. class Singleton(object):
  3. def foo(self):
  4. pass
  5. singleton = Singleton()
  6.  
  7. #foo.py
  8. from foo1 import singleton

二、静态变量方法

先执行了类的__new__方法(我们没写时,默认调用object.__new__),实例化对象;然后再执行类的__init__方法,对这个对象进行初始化,所有我们可以基于这个,实现单例模式。

  1. class Singleton(object):
  2. def __new__(cls,a):
  3. if not hasattr(cls, '_instance'):
  4. cls._instance = object.__new__(cls)
  5. return cls._instance
  6. def __init__(self,a):
  7. self.a = a
  8. def aa(self):
  9. print(self.a)
  10.  
  11. a = Singleton("a")

47、装饰器的写法以及应用场景。

48、异常处理写法以及如何主动跑出异常(应用场景)

49、isinstance作用以及应用场景?

50、json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?

  1. 官方文档中的一个Demo
  2. >>> import json
  3.  
  4. >>> class ComplexEncoder(json.JSONEncoder):
  5. ... def default(self, obj):
  6. ... if isinstance(obj, complex):
  7. ... return [obj.real, obj.imag]
  8. ... return json.JSONEncoder.default(self, obj)
  9. ...
  10. >>> dumps(2 + 1j, cls=ComplexEncoder)
  11. '[2.0, 1.0]'
  12. >>> ComplexEncoder().encode(2 + 1j)
  13. '[2.0, 1.0]'
  14. >>> list(ComplexEncoder().iterencode(2 + 1j))
  15. ['[', '2.0', ', ', '1.0', ']']
  1. 然后简单扩展了一个JSONEncoder出来用来格式化时间
  2. class CJsonEncoder(json.JSONEncoder):
  3.  
  4. def default(self, obj):
  5. if isinstance(obj, datetime):
  6. return obj.strftime('%Y-%m-%d %H:%M:%S')
  7. elif isinstance(obj, date):
  8. return obj.strftime('%Y-%m-%d')
  9. else:
  10. return json.JSONEncoder.default(self, obj)
  1. 使用时候只要在json.dumps增加一个cls参数即可:
  2.  
  3. json.dumps(datalist, cls=CJsonEncoder)

51、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?

52、使用代码实现查看列举目录下的所有文件。

  1. import os
  2.  
  3. if __name__ == '__main__':
  4. work_dir = 'C:\Program Files\MySQL\Connector ODBC 8.0'
  5. for parent, dirnames, filenames in os.walk(work_dir, followlinks=True):
  6. for filename in filenames:
  7. file_path = os.path.join(parent, filename)
  8. print('文件名:%s' % filename)
  9. print('文件完整路径:%s\n' % file_path)

53、简述 yield和yield from关键字。

1、可迭代对象与迭代器的区别

可迭代对象:指的是具备可迭代的能力,即enumerable.  在Python中指的是可以通过for-in 语句去逐个访问元素的一些对象,比如元组tuple,列表list,字符串string,文件对象file 等。

迭代器:指的是通过另一种方式去一个一个访问可迭代对象中的元素,即enumerator。在python中指的是给内置函数iter()传递一个可迭代对象作为参数,返回的那个对象就是迭代器,然后通过迭代器的next()方法逐个去访问。

  1. from collections import Iterable
  2.  
  3. li=[1,4,2,3]
  4. iterator1 = iter(li)
  5. print(next(iterator1))
  6. print(next(iterator1))
  7. print(next(iterator1))
  8. print(isinstance(iterator1,Iterable)) # 判断是否是迭代器,导入collection模块
  1. >>>
    1
  2. 4
  3. 2
  4. True

2、生成器

生成器的本质就是一个逐个返回元素的函数,即“本质——函数”

最大的好处在于它是“延迟加载”,即对于处理长序列问题,更加的节省存储空间。即生成器每次在内存中只存储一个值

3、什么又是yield from呢?

简单地说,yield from  generator 。实际上就是返回另外一个生成器。如下所示:

  1. def generator1():
  2. item = range(10)
  3. for i in item:
  4. yield i
  5.  
  6. def generator2():
  7. yield 'a'
  8. yield 'b'
  9. yield 'c'
  10. yield from generator1() #yield from iterable本质上等于 for item in iterable: yield item的缩写版
  11. yield from [11,22,33,44]
  12. yield from (12,23,34)
  13. yield from range(3)
  14.  
  15. for i in generator2() :
  16. print(i)

从上面的代码可以看出,yield from 后面可以跟的式子有“ 生成器  元组 列表等可迭代对象以及range()函数产生的序列”

上面代码运行的结果为:

a
b
c
0
1
2
3
4
5
6
7
8
9
11
22
33
44
12
23
34
0
1
2

请关注,未完待续!

史上最全python面试题详解(三)(附带详细答案(关注、持续更新))的更多相关文章

  1. 史上最全python面试题详解(一)(附带详细答案(关注、持续更新))

    python基础题(53道题详解) 1.简述解释型和编译型编程语言? 概念: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运行这个程序. 解释型语言:把做好的源程序翻译一句 ...

  2. 史上最全python面试题详解(四)(附带详细答案(关注、持续更新))

    python高级进阶-网络编程和并发(?道题详解) 1.简述 OSI 七层协议. OSI是Open System Interconnection的缩写,意为开放式系统互联. OSI七层协议模型主要是: ...

  3. 史上最全python面试题详解(一)(附带详细答案(持续更新))

    1.简述解释型和编译型编程语言? 概念: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运行这个程序. 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束! 区别: ...

  4. 史上最全python面试题详解 (二)(附带详细答案(关注、持续更新))

    23.re的match和search区别? re.match()从开头开始匹配string. re.search()从anywhere 来匹配string. # 多行模式>>> re ...

  5. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  6. 史上最全maven pom.xml详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. Maven史上最全的pom.xml详解

    下面主要是借鉴 官网的资料 收集而来 主要是为了讲解,用到的很少,但是还是需要了解 ,重点是方便查验资料 <project xmlns="http://maven.apache.org ...

  8. 史上最全的Ajax基础详解

    同步请求和异步请求 先解释一下同步和异步的概念: 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯 ...

  9. 「万字图文」史上最姨母级Java继承详解

    摘要:继承是面向对象软件技术中的一个概念.它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用. 本文分享自华为云社区<「万字图文」史上最姨母级Java继承详解丨[奔跑吧!JAVA] ...

随机推荐

  1. SQL Server 存储过程的运用

    概述 最近因为业务的需求写了一段时间存储过程,发现之前写的存储过程存在一些不严谨的地方,特别是TRY...CATCH中嵌套事务的写法:虽然之前写的并没有错,但是还是埋藏着很大的隐患在里面.希望这篇文章 ...

  2. 一分钟理解 HTTPS 到底解决了什么问题

    本文原作者“虞大胆的叽叽喳喳”,原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说这就足够了: 但对于 ...

  3. LeetCode题解33.Search in Rotated Sorted Array

    33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ...

  4. 虚拟机安装ssh,关闭防火墙

    输入命令:sudo apt-get install openssh-server        安装ssh 安装完成后,开启服务 sudo /etc/init.d/ssh start 之后使用如下命令 ...

  5. IP达人启示录

    在家附近的一个小公园中,一个老人每天晚上都在用水练习书法,他的字写的的确很不错,不懂书法的我,看了就感觉非常的带劲--苍劲有力.今晚再次路过的时候,就有种想和这个老人聊一聊的冲动,那么多年纪了,用书法 ...

  6. java开发个人简历

    求职意向 Java开发工程师 陈 楠 性 别:男 出生年月 :1995.07 民 族:汉族 联系方式 :159-3306-7520 学 历:本科 电子邮件 :15933067520@163.com 教 ...

  7. Python 中的object takes no parameters错误

    Python是一门面向对象的语言,中我们首先创建一个类: class Student(object): def _init_(self,name,score): self.name = name se ...

  8. NLog 自定义Target

    http://nlog-project.org/2015/06/30/extending-nlog-is-easy.html 新建一个类库,命名规则为NLog.*.dll 定义一个类输出日志到Rabb ...

  9. Android--Service之基础

    前言 本篇博客聊一下Android下的Service组件,对于Service组件,有点类似于Windows下的服务.Service是Android四大组件中与Activity最相似的组件,它们的区别在 ...

  10. MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)

    MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与 ...