iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >史上最全python面试题详解(三)(附
  • 254
分享到

史上最全python面试题详解(三)(附

史上最全详解 2023-01-30 23:01:14 254人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

38、面向对象深度优先和广度优先是什么?     39、面向对象中super的作用? 40、是否使用过functools中的函数?其作用是什么? 1 python自带的 functools 模块提供了一些常用的高阶函数,也就是

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解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。
5. __call__
  对象后面加括号,触发执行。
 
注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
6. __dict__ 
  类或对象中的所有成员
7. __str__
如果一个类中定义了__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', ']']
16  
 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)
11  
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 4 2 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

 

--结束END--

本文标题: 史上最全python面试题详解(三)(附

本文链接: https://www.lsjlt.com/news/180542.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 史上最全python面试题详解(三)(附
    38、面向对象深度优先和广度优先是什么?     39、面向对象中super的作用? 40、是否使用过functools中的函数?其作用是什么? 1 Python自带的 functools 模块提供了一些常用的高阶函数,也就是...
    99+
    2023-01-30
    史上 最全 详解
  • 史上最全python面试题详解(一)(附
    1、简述解释型和编译型编程语言? 概念: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束! 区别: 编译型语言,执行速度快、效率高...
    99+
    2023-01-30
    史上 最全 详解
  • 史上最全python面试题详解(四)(附
    1、简述 OSI 七层协议。 OSI是Open System Interconnection的缩写,意为开放式系统互联。 OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Sessi...
    99+
    2023-01-30
    史上 最全 详解
  • 史上最全 python常见面试题(一)
    大数据的文件读取① 利用生成器generator②迭代器进行迭代遍历:for line in file迭代器和生成器的区别1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list...
    99+
    2023-01-31
    史上 最全 面试题
  • 史上最全网络安全面试题合集
    php爆绝对路径方法? 单引号引起数据库报错 访问错误参数或错误路径 探针类文件如phpinfo 扫描开发未删除的测试文件 google hacking phpmyadmin报路径:/phpmyadmin/libra...
    99+
    2023-09-17
    web安全 php 安全 网络安全 学习
  • K8S面试题(史上最全 + 持续更新)
    尼恩面试宝典专题38:K8S面试题(史上最全、持续更新) 本文版本说明:V26 《尼恩面试宝典》升级规划为: 后续基本上,每一个月,都会发布一次,最新版本,可以联系构师尼恩获取, 发送 “领取电子书”...
    99+
    2023-09-02
    java 面试
  • 史上最详细的一线大厂Mysql面试题详解
    MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联;主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;从:io线程——在使用start slave 之后,负责从master上拉取 b...
    99+
    2023-06-05
  • 2023年Java最新面试题,附详解答案
    写在前面:本篇面试题整理是我在广州地区进行面试整理得出,常见的基本都在下面了。基本都是可以直接在面试时用白话回答的答案总结,面试时照此回答即可,有其他常见面试问题也欢迎在评论区补充。 首次发布:202 3年 1月 更新日期:2023年 ...
    99+
    2023-08-16
    java 面试 jvm Java 面试
  • Java泛型详解,史上最全图文详解
    泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。 毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确使用泛型,是一门必修课。 一:泛型本质 Java 泛型(generics)是 JDK 5 中引入的一...
    99+
    2023-08-17
    java 开发语言 后端
  • 软件测试面试?太简单了 2023测试面经 (答案+思路+史上最全)
    从年后开始投简历面试的,在boss和拉钩上投了有几十份简历,其中70%未读状态,30%已读,已读的一半回复要求发送附件简历,然后这周接到面试的有七、八家公司,所以,当前这个大环境真的难 这半个月来,每天安排三到四场面试,平均每个公司至少都是...
    99+
    2023-08-31
    面试 java 程序人生
  • Python 3.x可能是史上最详解的【
    如需转载请注明出处。 win10+Python 3.6.3 一旦使用多层文件架构就很容易遇上import的坑!哈哈。 一、理解一些基本概念 1、模块、包 模块 module:一般情况下,是一个以.py为后缀的文件。其他可作为m...
    99+
    2023-01-31
    史上 详解 Python
  • 堪称全网最详细的Java八股面试文,面试必备(附答案)
    前言 听一些小伙伴说,近期的面试越来越难了!为了帮大家节约时间,给大家搞来了今年上半年碰到的大厂Java面试题合集,内容非常的全面。耗时半月,终于把牛客网上的互联网大厂Java面试八股文整理成了PDF合集。   其中概括的知识点...
    99+
    2023-09-02
    java 面试 jvm 架构
  • 可能是史上最细的python中import详解
    以前在使用import的时候经常会因为模块的导入而出现一些问题,以及一些似懂非懂半疑惑半糊涂的问题,索性花了点时间研究了一些python引用的方法,并且动手操作试验了一下,深有感触,...
    99+
    2024-04-02
  • 史上最全若依管理系统修改页面标题和logo
    整理若依框架去除 若依标题、logo及其他内容。 一:网页上的logo 进入ruoyi-ui --> public --> favicon.ico,把这个图片换成你自己的logo 二:...
    99+
    2023-09-02
    java Powered by 金山文档
  • 【史上最全】MySQL各种锁详解:一文搞懂MySQL的各种锁
    前言 锁在 MySQL 中是非常重要的一部分,锁对 MySQL 的数据访问并发有着举足轻重的影响。锁涉及到的知识篇幅也很多,所以要啃完并消化到自己的肚子里,是需要静下心好好反反复复几遍地细细品味。本文是对锁的一个大概的整理,一些相关深...
    99+
    2023-09-11
    数据库 mysql java 编程语言 面试
  • Python 存储 Apache 面试题答案全解析!
    如果你正在寻找一份 Apache 的工作,那么你肯定需要准备好一些面试题,以证明你的技能和知识水平。在本文中,我们将探讨一些常见的 Apache 面试题,并提供完整的解决方案,帮助你准备好面试。 什么是 Apache? Apache ...
    99+
    2023-10-15
    存储 apache 面试
  • MySQL最常问的10道面试题(2023详解版)
    1.什么是聚集索引和非聚集索引         简单来说,聚集索引就是基于主键创建的索引,除了主键索引以外的其他索引,称为非聚集索引,也叫做二级索引。 由于在InnoDB引擎里面,一张表的数据对应的物理文件本身就是按照B+树来组织的一种索...
    99+
    2023-08-31
    java mysql 数据库
  • 【Redis】Redis面试题详解与使用案例(金三银四面试专栏启动)
    📫作者简介:小明java问道之路,2022博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。 文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级...
    99+
    2023-09-01
    redis java 缓存 面试 中间件
  • Java面试题之MD5加密的安全性详解
    目录1.彩虹表什么是彩虹表2.解决方案3.实现代码总结MD5 是 Message Digest Algorithm 的缩写,译为信息摘要算法,它是 Java 语言中使用很广泛的一种加...
    99+
    2022-11-13
    Java MD5加密 安全 Java MD5加密 Java MD5
  • NumPy 数组:Python 面试中最常见的问题解析!
    在 Python 面试中,NumPy 数组是一个经常被提及的话题。NumPy 是一个用于科学计算的 Python 库,它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。 本文将介绍 NumPy 数组的一些基本概念,以及在 Py...
    99+
    2023-08-30
    面试 数组 numy
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作