拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Python面试题大全总结

Python面试题大全总结

白鹭 - 2022-01-23 2385 0 0

一、前言

有很多时候,你可能python使用的很熟练,但在面试的时候可能就过不了,
毕竟常说的面试造火箭,入职拧螺丝的情况是真实存在的,所以背八股文也是极其重要的!
这里分享一些常见和高频的面试题(300道)给大家:

部分目录如下:


在这里插入图片描述


目录

  • 一、前言
  • 二、试题分享
    • 一. Python基础
    • 二. 企业面试题
    • 三. Python高级
  • 三、总结

二、试题分享

一. Python基础

1)字典推导式

d = {key:value for (key,value) in iterable}

2)反转字符串 "aStr"

print("aStr"[::-1])

3)将字符串 “k:1 |k1:2|k2:3|k3:4”,处理成字典 {k:1,k1:2,…}

完整试题
公众号:python砖家
回复:11
str1 = "k:1|k1:2|k2:3|k3:4" 
def str2dict(str1): 
  dict1 = {} 
  for iterms in str1.split('|'): 
    key,value = iterms.split(':') 
    dict1[key] = value 
  return dict1 
#字典推导式 
d = {k:int(v) for t in str1.split("|") for k, v in (t.split(":"), )}

<<300道完整试题点我获取


4)下面代码的输出结果将是什么

list = ['a','b','c','d','e'] 
print(list[10:])

代码将输出[],不会产生IndexError错误,就像所期望的那样,尝试用超出成员的个数的index来获取某
个串列的成员,例如,尝试获取list[10]和之后的成员,会导致IndexError,然而,尝试获取串列的切
片,开始的index超过了成员个数不会产生IndexError,而是仅仅回传一个空串列,这成为特别让人恶
心的疑难杂症,因为运行的时候没有错误产生,导致Bug很难被追踪到,


5)给定两个串列,怎么找出他们相同的元素和不同的元素

list1 = [1,2,3]
list2 = [3,4,5]
set1 = set(list1)
set2 = set(list2)
print(set1 & set2)
print(set1 ^ set2)

二. 企业面试题

6)python新式类和经典类的区别

  1. 在python里凡是继承了object的类,都是新式类
  2. Python3里只有新式类
  3. Python2里面继承object的是新式类,没有写父类的是经典类
  4. 经典类目前在Python里基本没有应用
  5. 保持class与type的统一对新式类的实体执行a.class与type(a)的结果是一致的,对于旧式类来说就不一样了,
  6. 对于多重继承的属性搜索顺序不一样新式类是采用广度优先搜索,旧式类采用深度优先搜索,

7)python中内置的资料结构有几种

  1. 整型 int、 长整型 long、浮点型 float、 复数 complex
  2. 字符串 str、 串列 list、 元祖 tuple
  3. 字典 dict 、 集合 set
  4. Python3 中没有 long,只有无限精度的 int

8)python如何实作单例模式?请写出两种实作方式

8.1 第一种方法:使用装饰器

def singleton(cls):
    instances = {}
    def wrapper(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return wrapper
@singleton
class Foo(object):
    pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) # True

8.2 第二种方法:使用基类
New 是真正创建实体物件的方法,所以重写基类的new 方法,以此保证创建物件的时候只生成一个实

完整试题
公众号:python砖家
回复:11
class Singleton(object):

    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

class Foo(Singleton):
    pass

foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2)  # True

三. Python高级

9)Python中类方法、类实体方法、静态方法有何区别?

类方法: 是类物件的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类物件,
类物件和实体物件都可呼叫
类实体方法: 是类实体化物件的方法,只有实体物件可以呼叫,形参为self,指代物件本身;
静态方法: 是一个任意函式,在其上方使用 @staticmethod 进行装饰,可以用物件直接呼叫,静态方法
实际上跟该类没有太大关系


10)python函式多载机制

函式多载主要是为了解决两个问题,

  1. 可变自变量型别,
  2. 可变自变量个数,

另外,一个基本的设计原则是,仅仅当两个函式除了自变量型别和自变量个数不同以外,其功能是完全相同
的,此时才使用函式多载,如果两个函式的功能其实不同,那么不应当使用多载,而应当使用一个名字
不同的函式,
好吧,那么对于情况 1 ,函式功能相同,但是自变量型别不同,python 如何处理?答案是根本不需要处
理,因为 python 可以接受任何型别的自变量,如果函式的功能相同,那么不同的自变量型别在 python 中
很可能是相同的代码,没有必要做成两个不同函式,
那么对于情况 2 ,函式功能相同,但自变量个数不同,python 如何处理?大家知道,答案就是预设参
数,对那些缺少的自变量设定为预设自变量即可解决问题,因为你假设函式功能相同,那么那些缺少的自变量
终归是需要用的,
好了,鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函式多载了,


<<300道完整试题点我获取


11)对预设自变量的理解

预设自变量指在呼叫函式的时候没有传入自变量的情况下,呼叫默认的自变量,在呼叫函式的同时赋值时,所
传入的自变量会替代默认自变量,
*args是不定长自变量,它可以表示输入自变量是不确定的,可以是任意多个,
**kwargs是关键字自变量,赋值的时候是以键值对的方式,自变量可以是任意多对在定义函式的时候
不确定会有多少自变量会传入时,就可以使用两个自变量


12)生成器,迭代器的区别

迭代器
是遵循迭代协议的物件,用户可以使用 iter() 以从任何序列得到迭代器(如 list, tuple,
dictionary, set 等),另一个方法则是创建一个另一种形式的迭代器 —— generator ,要获取下一个元
素,则使用成员函式 next()(Python 2)或函式 next() function (Python 3) ,当没有元素时,则引
发 StopIteration 此例外,若要实作自己的迭代器,则只要实作 next()(Python 2)或 next ()


生成器(Generator)
只是在需要回传资料的时候使用yield陈述句,每次next()被呼叫时,生成器会返
回它脱离的位置(它记忆陈述句最后一次执行的位置和所有的资料值)


区别
生成器能做到迭代器能做的所有事,而且因为自动创建iter()和next()方法,生成器显得特别简
洁,而且生成器也是高效的,使用生成器表达式取代串列决议可以同时节省存储器,除了创建和保存程序
状态的自动方法,当发生器终结时,还会自动抛出StopIteration例外,


三、总结

大家拿到资料后一定得看啊,不是拿到资料就会了!


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *