Python常见面试题的详解9

1. 如何找出整数数组中第二大的数

  • 要点

  1. 定义一个函数用于在整数数组里找出第二大的数。

  2. 若数组元素少于 2 个,则返回 None

  3. 借助两个变量 firstsecond 来跟踪最大数和第二大数。

  4. 可以添加异常处理,以应对输入非整数数组的情况。

  5. 若数组包含重复元素,可考虑返回去重后第二大的数。

  • 示例

python

def find_second_largest(arr):
    if len(arr) < 2:
        return None
    first = second = float('-inf')
    for num in arr:
        if num > first:
            second = first
            first = num
        elif num > second and num != first:
            second = num
    return second if second != float('-inf') else None

# 测试
arr = [12, 35, 1, 10, 34, 1]
print(find_second_largest(arr))  

2. 写出如下代码的输出结果并分析

  • 要点
  1. 代码中的 multi 函数返回一个包含 4 个 lambda 函数的列表。

  2. 这些 lambda 函数形成闭包,捕获外部变量 i

  3. 当调用这些 lambda 函数时,i 的值为其最终值 3,所以输出为 [9, 9, 9, 9]

  4. 若要实现预期的 [0, 3, 6, 9] 输出,可使用默认参数来固定 i 的值,修改为 [lambda x, i=i: i*x for i in range(4)]

  • 示例

python

def multi():
    return [lambda x : i*x for i in range(4)]
print([m(3) for m in multi()])

3. 统计字符串中字符出现的次数

  • 要点
  1. 利用字典来统计字符串中每个字符的出现次数。

  2. 遍历字符串,若字符已在字典中则计数加 1,否则将其添加到字典并初始化为 1。

  3. 可使用 collections.Counter 类来简化代码,Counter(s) 即可实现相同功能。

  4. 统计时可忽略大小写,将字符串统一转换为大写或小写后再进行统计。

  • 示例

python

def count_characters(s):
    char_count = {}
    for char in s:
        if char in char_count:
            char_count[char] += 1
        else:
            char_count[char] = 1
    return char_count

# 测试
s = "hello world"
print(count_characters(s))  

4. super 函数的用法和场景

  • 要点
  1. super 函数用于调用父类的方法。

  2. 在单继承中,可在子类的 __init__ 方法里调用父类的 __init__ 方法,实现代码复用。

  3. 在多继承中,能确保按正确的方法解析顺序(MRO)调用父类方法。

  • 示例

python

class Parent:
    def __init__(self):
        print("Parent __init__")

class Child(Parent):
    def __init__(self):
        super().__init__()
        print("Child __init__")

c = Child()

5. 类方法、类实例方法、静态方法的区别

  • 要点
  1. 实例方法:第一个参数是 self,代表实例对象,通过实例对象调用,用于操作实例的属性和方法。

  2. 类方法:使用 @classmethod 装饰器,第一个参数是 cls,代表类本身,可通过类名或实例对象调用,常用于创建工厂方法。

  3. 静态方法:使用 @staticmethod 装饰器,无默认第一个参数,可通过类名或实例对象调用,用于组织代码,与类和实例无直接关系。

  • 示例

python

class MyClass:
    def instance_method(self):
        return 'Instance method called', self

    @classmethod
    def class_method(cls):
        return 'Class method called', cls

    @staticmethod
    def static_method():
        return 'Static method called'

obj = MyClass()
print(obj.instance_method())
print(MyClass.class_method())
print(MyClass.static_method())

6. 遍历对象的所有属性

  • 要点
  1. 使用 dir 函数获取对象的所有属性名。

  2. 通过过滤掉以 __ 开头的内置属性,打印出用户自定义的属性名。

  3. 若要获取属性的值,可结合 getattr 函数。

  4. 可将属性名和属性值以字典形式存储,方便后续处理。

  • 示例

python

class MyClass:
    def __init__(self):
        self.name = "John"
        self.age = 30

obj = MyClass()
for attr in dir(obj):
    if not attr.startswith('__'):
        print(attr)

7. 如何定义支持多种操作符的类

  • 要点
  1. 通过定义特殊方法,使类支持加法、减法、乘法等操作符。

  2. 对于不同类型的操作数,可进行类型判断并执行相应操作。

  3. 可以添加更多操作符支持,如除法、取模等。

  4. 可以考虑实现反向操作符,如 __radd__ 等,以支持不同顺序的操作。

  • 示例

python

class MyNumber:
    def __init__(self, value):
        self.value = value

    # 加法
    def __add__(self, other):
        if isinstance(other, MyNumber):
            return MyNumber(self.value + other.value)
        return MyNumber(self.value + other)

    # 减法
    def __sub__(self, other):
        if isinstance(other, MyNumber):
            return MyNumber(self.value - other.value)
        return MyNumber(self.value - other)

    # 乘法
    def __mul__(self, other):
        if isinstance(other, MyNumber):
            return MyNumber(self.value * other.value)
        return MyNumber(self.value * other)

    # 字符串表示
    def __str__(self):
        return str(self.value)

# 测试
a = MyNumber(5)
b = MyNumber(3)
print(a + b)  
print(a - b)  
print(a * b)  

8. 比较Cython、Pypy、CPython、Numba 的缺点

  • 要点
  1. Cython:学习成本高,需掌握特定语法;代码可移植性受影响;调试复杂。

  2. Pypy:与 CPython 兼容性有问题;启动时间长;内存占用高。

  3. CPython:执行速度慢,尤其是 CPU 密集型任务;存在全局解释器锁(GIL),限制多线程并行性能。

  4. Numba:支持的 Python 语法和数据类型有限;需提前确定输入数据类型;编译时间可能较长。

9. 抽象类和接口类的区别和联系

  • 要点
  1. 联系:都不能实例化,用于定义规范和约束子类行为;都可包含抽象方法,要求子类实现。

  2. 区别:抽象类可包含抽象方法、具体方法和属性;接口类通常只含抽象方法,无具体实现和属性。

10. 如何动态获取和设置对象的属性

  • 要点
  1. 使用 getattr 函数动态获取对象的属性。

  2. 使用 setattr 函数动态设置对象的属性。

  3. 可结合 hasattr 函数先检查属性是否存在,再进行获取或设置操作。

  • 示例

python

class MyClass:
    def __init__(self):
        self.name = "John"

obj = MyClass()
attr_value = getattr(obj, 'name')
print(attr_value)  

class MyClass2:
    pass

obj2 = MyClass2()
setattr(obj2, 'age', 30)
print(obj2.age)  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用linux脚本部署discuz博客(详细注释版)

使用脚本部署一个discuzz项目 1.显示当前环境状态 防火墙状态 selinux状态 httpd状态 由上可知&#xff0c;虚拟机已处于最初始状态 2.脚本编写 #!/bin/bash #这是一个通过脚本来部署discuzz博客 firewalld关闭 systemctl stop firewalld if [ $? -eq 0 ];then echo "…

【代码审计】-Tenda AC 18 v15.03.05.05 /goform接口文档漏洞挖掘

路由器&#xff1a;Tenda AC 18 v15.03.05.05 固件下载地址&#xff1a;https://www.tenda.com.cn/material?keywordac18 1./goform/SetSpeedWan 接口文档&#xff1a; formSetSpeedWan函数中speed_di参数缓冲区溢出漏洞&#xff1a; 使用 binwalk -eM 解包固件&#xff0c…

正式页面开发-登录注册页面

整体路由设计&#xff1a; 登录和注册的切换是切换组件或者是切换内容&#xff08;v-if和 v-else)&#xff0c;因为点击两个之间路径是没有变化的。也就是登录和注册共用同一个路由。登录是独立的一级路由。登录之后进到首页&#xff0c;有三个大模块&#xff1a;文章分类&…

Unity 位图字体

下载Bitmap Font Generator BMFont - AngelCode.com 解压后不用安装直接双击使用 提前设置 1、设置Bit depth为32 Options->Export options 2、清空所选字符 因为我们将在后边导入需要的字符。 Edit->Select all chars 先选择所有字符 Edit->Clear all chars i…

双重差分学习笔记

双重差分适用的研究场景&#xff1a; 研究某项政策或者冲击造成的影响 例如&#xff0c;某某小学在2024.12.12日颁布了小红花激励措施&#xff0c;我们要研究这项措施对学生成绩的影响&#xff0c;此时&#xff0c;就可以使用双重差分模型。 双重差分适用的数据类型&#xf…

项目设置内网 IP 访问实现方案

在我们平常的开发工作中&#xff0c;项目开发、测试完成后进行部署上线。比如电商网站、新闻网站、社交网站等&#xff0c;通常对访问不会进行限制。但是像企业内部网站、内部管理系统等&#xff0c;这种系统一般都需要限制访问&#xff0c;比如内网才能访问等。那么一个网站应…

数仓搭建(hive):DWB层(基础数据层)

维度退化: 通过减少表的数量和提高数据的冗余来优化查询性能。 在维度退化中&#xff0c;相关的维度数据被合并到一个宽表中&#xff0c;减少了查询时需要进行的表连接操作。例如&#xff0c;在销售数据仓库中&#xff0c;客户信息、产品信息和时间信息等维度可能会被合并到一…

多模态特征提取与融合助力高光谱+LiDAR数据分类性能飞跃

目录 论文解读 总体架构 CMIIE 模块工作模式 MLFFC模块工作模式 论文解读 提出了一种新的多模态特征提取模块CMIIE,可以捕获高光谱和LiDAR数据之间的互补信息。设计了一个多层特征融合分类模块MLFFC,通过对不同层级的特征进行融合来提高分类性能。使用对抗学习策略来指导网…

Flutter 正在推进全新 PlatformView 实现 HCPP, 它又用到了 Android 上的什么黑科技

跨平台开发里的 PlatformView 实现一直是一个经久不衰的话题&#xff0c;在之前的 《深入 Flutter 和 Compose 的 PlatformView 实现对比》 我们就详细聊过 Flutter 和 Compose 在 PlatformView 实现上的异同之处&#xff0c;也聊到了 Compose 为什么在相同实现上对比 Flutter …

Qt/C++面试【速通笔记一】

Qt 信号与槽机制 什么是信号&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;&#xff1f; 在Qt中&#xff0c;信号&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;是实现对象之间通信的一种机制。信号是对象在某些事件发生时发出的通知&…

《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战

前一篇文章&#xff0c;使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一&#xff1a;AlexNet【下】【论文精读】】的心得。 《跟李沐…

【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载画图1画图2画图3画图4画图5画图6画图7参考介绍 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin & scatter plot & Venn) 加载R包 library…

IMX6ULL的ALT0、ALT1、ALT2、ALT3、ALT4等是啥意思?

在IMX6ULL的手册IMX6ULLRM.pdf中&#xff0c;发现了题目中这些描述&#xff0c;相关截图如下&#xff1a; 那么红框中的ALT0、ALT1、ALT2、ALT3、ALT4等是啥意思呢&#xff1f; 在IMX6ULL及其他NXP&#xff08;Freescale&#xff09;芯片中&#xff0c;ALT0、ALT1、ALT2、ALT…

Android Http-server 本地 web 服务

时间&#xff1a;2025年2月16日 地点&#xff1a;深圳.前海湾 需求 我们都知道 webview 可加载 URI&#xff0c;他有自己的协议 scheme&#xff1a; content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的&#xff0c;如果你想直接…

DeepSeek 冲击(含本地化部署实践)

DeepSeek无疑是春节档最火爆的话题&#xff0c;上线不足一月&#xff0c;其全球累计下载量已达4000万&#xff0c;反超ChatGPT成为全球增长最快的AI应用&#xff0c;并且完全开源。那么究竟DeepSeek有什么魔力&#xff0c;能够让大家趋之若鹜&#xff0c;他又将怎样改变世界AI格…

神经网络八股(1)

1.什么是有监督学习&#xff0c;无监督学习 有监督学习是带有标签的&#xff0c;无监督学习是没有标签的&#xff0c;简单来说就是有监督学习的输入输出都是固定的&#xff0c;已知的&#xff0c;无监督学习输入是已知的&#xff0c;输出是不固定的&#xff0c;无监督学习是通…

DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

【分布式理论14】分布式数据库存储:分表分库、主从复制与数据扩容策略

文章目录 一、分表分库1. 数据分表的必要性与方式2. 数据分库原则与优势 二、主从复制1. 读写分离架构设计2. 数据复制方式3. MySQL实现主从复制4. MySQL主从复制实践与高可用方案 三、数据扩容 随着业务的不断发展和数据量的增长&#xff0c;传统的单机关系型数据库已经逐渐不…

从传统到轻量级5G:网络架构演变与优化路径

轻量级5G​​​​ 随着5G技术的不断发展&#xff0c;通信网络架构正经历着前所未有的变革。传统的5G核心网架构虽然在性能和容量方面表现出色&#xff0c;但在灵活性、部署效率以及成本控制方面却面临一些挑战。为了应对日益复杂的通信需求&#xff0c;轻量级5G核心网成为了一种…

搭建Kubernetes (K8s) 集群----Centos系统

前期准备 准备3台Linux虚拟机&#xff08;CentOS系统&#xff09;&#xff0c;参考 https://carry.blog.csdn.net/article/details/144578009https://carry.blog.csdn.net/article/details/144578009搭建Docker环境&#xff0c;参考 https://carry.blog.csdn.net/article/de…