2019 Python最新面试题及答案16道题

以下是针对“2019 Python最新面试题及答案16道题”的完整攻略:

1. 阅读下面程序,写出输出结果

a = [1, 2, 3, 4, 5]
b = a
a = a[:2]
print(b)

答案: [1, 2, 3, 4, 5]

解析: 首先,列表a被赋值给了变量b,此时ba引用了同一个列表对象。然后,使用切片操作(a = a[:2])将a截取了前两个元素,实际上是创建了一个新的列表对象并将其赋给了a,此时变量b仍然引用原来的列表对象。因此,输出的结果是[1, 2, 3, 4, 5]

2. 写出至少 5 个标准库

答案: Python标准库包含了多个常用的模块,以下是一些常用的标准库:

  • os:提供了一些与操作系统交互的函数。
  • sys:提供了对Python解释器的访问和交互的函数。
  • re:提供了正则表达式的支持。
  • datetime:提供了表示日期和时间的相关类和函数。
  • math:提供了数学运算的函数和常量。

3. 在 Python 中如何实现多重继承

答案: Python 中实现多重继承可以在类定义时同时继承多个父类,使用逗号分隔。例如:

class MyClass(BaseClass1, BaseClass2, BaseClass3):
    pass

此时 MyClass 类同时继承了 BaseClass1BaseClass2BaseClass3 三个类。子类在继承多个父类时需要注意方法名冲突的问题,可以通过 super() 函数调用父类中的同名方法。

4. 写一个函数找出一个整数数组中,第二大的数

答案: 可以使用以下方法实现:

def second_largest(numbers):
    if len(numbers) < 2:
        return None
    largest = second_largest = float('-inf')
    for num in numbers:
        if num > largest:
            second_largest = largest
            largest = num
        elif num > second_largest:
            second_largest = num
    return second_largest

该函数首先判断数组长度是否小于 2,如果是,则返回 None。然后使用两个变量 largestsecond_largest 记录目前找到的最大值和第二大的值,初始值设为负无穷。遍历数组,如果当前元素比 largest 大,则将原来的 largest 赋给 second_largest,将 num 设为新的 largest;否则,如果当前元素比 second_largest 大,则将 num 设为新的 second_largest。最后返回 second_largest

示例:

numbers = [1, 2, 3, 4, 5]
print(second_largest(numbers))  # 输出 4

5. Python 里面如何实现tuple和list的转换?

答案: Python 中提供了内置函数 list()tuple() 分别用于将列表转换为元组和将元组转换为列表。例如:

# 将元组转换为列表
t = (1, 2, 3)
l = list(t)
print(l)  # 输出 [1, 2, 3]

# 将列表转换为元组
l = [4, 5, 6]
t = tuple(l)
print(t)  # 输出 (4, 5, 6)

6. Python 字典如何删除键和合并两个字典

删除键可以使用字典的 del 关键字,例如:

d = {'a': 1, 'b': 2, 'c': 3}
del d['a']  # 删除键 'a'
print(d)    # 输出 {'b': 2, 'c': 3}

合并两个字典可以使用字典的 update() 方法,例如:

d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d1.update(d2)  # 将 d2 合并到 d1 中
print(d1)      # 输出 {'a': 1, 'b': 2, 'c': 3, 'd': 4}

7. Python实现列表去重的方法

Python 中可以使用 set 数据类型实现列表去重。

l = [1, 1, 2, 2, 3, 4, 5, 5]
result = list(set(l))
print(result)  # 输出 [1, 2, 3, 4, 5]

首先将列表转换为 set,这会自动去重,然后再将 set 转换为列表即可。

8. Python中生成随机数的方法

Python 中可以使用 random 模块来生成随机数。其中一些常用的函数包括:

  • random.random():生成一个 0~1 之间的随机小数。
  • random.randint(a, b):生成一个 a~b 之间的随机整数(包含边界值 a 和 b)。
  • random.choice(seq):从序列 seq 中随机选择一个元素。
  • random.shuffle(lst):将列表 lst 中的元素随机打乱。

示例:

import random

# 生成一个 0~1 之间的随机小数
randfloat = random.random()
print(randfloat)

# 生成一个 1~10 之间的随机整数
randint = random.randint(1, 10)
print(randint)

# 从列表中随机选择一个元素
lst = ['a', 'b', 'c']
randchoice = random.choice(lst)
print(randchoice)

# 将列表中的元素随机打乱
lst = [1, 2, 3, 4, 5]
random.shuffle(lst)
print(lst)

9. Python类中 newinit 的区别

__new__ 方法是一个静态方法,用于创建一个类的实例对象,该方法会返回一个新创建的对象,可以通过调用 super().__new__(cls) 来调用父类的 __new__ 方法并创建对象。

__init__ 方法是一个实例方法,在对象创建后并且新创建的对象由 __new__ 方法返回之后调用。该方法用于初始化对象的属性或执行其他操作。

因此,__new__ 方法是类的构造器,负责创建对象;而 __init__ 方法负责初始化对象。

示例:

class Person:
    def __new__(cls, name):
        print("__new__ method is called")
        return super().__new__(cls)

    def __init__(self, name):
        print("__init__ method is called")
        self.name = name

p = Person("Alice")

以上代码执行结果为:

__new__ method is called
__init__ method is called

10. 写一个函数判断字符串是否是回文串

答案: 可以使用以下方法实现:

def is_palindrome(s):
    s = s.lower()  # 转换为小写字母
    left = 0       # 左指针
    right = len(s) - 1  # 右指针
    while left < right:
        if not s[left].isalnum():  # 左指针指向的字符不是数字或字母
            left += 1
            continue
        if not s[right].isalnum():  # 右指针指向的字符不是数字或字母
            right -= 1
            continue
        if s[left] != s[right]:  # 左右指针指向的字符不相等
            return False
        left += 1
        right -= 1
    return True

该函数首先将字符串转换为小写字母,然后使用双指针依次比较两端的字符,直到两个指针相遇。在比较过程中,如果左指针指向的字符不是数字或字母,则右移左指针;如果右指针指向的字符不是数字或字母,则左移右指针;如果两个指针指向的字符不相等,则返回 False;否则,左指针右移,右指针左移。最终如果所有字符比较都相等,则返回 True。

示例:

s1 = "A man, a plan, a canal: Panama"
s2 = "race a car"
print(is_palindrome(s1))  # 输出 True
print(is_palindrome(s2))  # 输出 False

11. Python函数重写实例

class Parent(object):
    def myMethod(self):
        print ('调用父类方法')

class Child(Parent):
    def myMethod(self):
        print ('调用子类方法')

答案: 上面的代码定义了一个名为 Parent 的类,其中包含一个 myMethod() 方法,在该方法中输出调用父类方法的信息。然后定义了一个名为 Child 的子类,该子类继承自 Parent,并重写了 myMethod() 方法,在该方法中输出调用子类方法的信息。

示例:

p = Parent()
c = Child()

p.myMethod()  # 输出调用父类方法
c.myMethod()  # 输出调用子类方法

上面的代码输出结果为:

调用父类方法
调用子类方法

12. Python中如何实现单例模式

答案: 可以使用以下方法实现:

class Singleton:
    _instance = None

    def __new__(cls):
        if not cls._instance:
            cls._instance = super().__new__(cls)
        return cls._instance

该类的实现方式使用了 Python 的类变量 _instance 来保存单例实例,当 _instance 不存在时则创建一个新的实例并保存在 _instance 中,否则返回已有的实例。

示例:

s1 = Singleton()
s2 = Singleton()

print(s1 == s2)  # 输出 True

因为 s1s2Singleton 类的两个实例,因此使用相等运算符比较时返回 True。

13. Python中有哪些序列解包的方法?

序列解包可以将序列中的元素拆分并分别赋值给多个变量。

以下是一些常用的序列解包方法:

  1. 将一个元组或列表解包成单个变量,例如:

python
t = (1, 2, 3)
a, b, c = t
print(a, b, c) # 输出 1 2 3

  1. 将一个元组或列表解包为多个变量,但只取其中的部分元素,例如:

python
t = (1, 2, 3, 4)
a, b, *c = t
print(a, b, c) # 输出 1 2 [3, 4]

在这个示例中,使用 * 号将变量 c 声明为一个列表,将元组或列表的剩余元素赋给 c

  1. 交换两个变量的值,例如:

python
a = 1
b = 2
a, b = b, a
print(a, b) # 输出 2 1

在上面的代码中,使用序列解包方式交换了变量 ab 的值。

14. 如何在 Python 中打印出当前的日期和时间

答案: 可以使用 datetime 模块中的 datetime 类来获取当前的日期和时间,例如:

from datetime import datetime

now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))

在这个示例中,datetime.now() 方法返回当前日期和时间的 datetime 对象,然后使用 strftime() 方法将其格式化为字符串,输出的格式为 YYYY-MM-DD HH:MM:SS

15. Python中如何读写文件

可以使用 Python 内置的 open() 函数打开一个文件,例如:

f = open("file.txt", "r")

在这个示例中,打开了一个名为 file.txt 的文件,并以只读模式打开。

可用的打开模式包括:

  • 'r':只读模式(默认)。
  • 'w':写入模式,会覆盖文件中的所有内容。
  • 'a':追加模式,将新内容添加到文件末尾。
  • 'x':独占创建,如果文件不存在则创建新文件,否则报错。
  • 'b':二进制模式。
  • 't':文本模式(默认)。

读取文件内容可以使用 read() 方法。例如:

with open("file.txt", "r") as f:
    content = f.read()
    print(content)

在这个示例中,with 语句用来打开文件并自动关闭文件。read() 方法用于读取文件内容,并将其保存在变量 content 中,然后输出该变量的内容。

写入文件可以使用 write() 方法。例如:

with open("file.txt", "w") as f:
    f.write("Hello world!")

在这个示例中,with 语句用来打开文件并自动关闭文件。write() 方法用于写入内容到文件中,这里写入了一个字符串 “Hello world!”。

16. 如何使用 Python 来获取一个文件的扩展名

答案: 可以使用 os.path 模块来获取文件的扩展名。例如:

import os

filename = "file.txt"
extension = os.path.splitext(filename)[1]
print(extension)

在这个示例中,先定义了一个文件名 file.txt。然后使用 os.path.splitext() 方法来将文件名拆分为文件名和扩展名两部分,返回值为元组类型,然后取元组的第二个元素即可获得文件的扩展名。输出结果为 “.txt”。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:2019 Python最新面试题及答案16道题 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 在 Python 中创建DataFrame的方法

    Python中创建DataFrame的方法有很多种,下面我们将分别介绍几种创建DataFrame的方法。 方法1:使用列表创建DataFrame 首先,我们可以使用列表来创建DataFrame。具体步骤如下: 导入所需模块 import pandas as pd 构建列表数据 data = [[‘Jack’, 18], [‘Rose’, 20], [‘Tom…

    python 2023年5月14日
    00
  • Python中类和对象的绑定及非绑定方法详解

    Python中类和对象的绑定及非绑定方法详解 1. 背景 Python作为一门面向对象的语言,类和对象是其中的核心概念。在Python中,类中的定义和方法可以在实例化后被访问和使用。此时,类中的方法可以分为两类:绑定方法和非绑定方法。 2. 绑定方法 绑定方法即在类定义中定义的方法。在调用时,必须通过类的实例来进行访问和调用。绑定方法可以访问类的实例属性,也…

    python 2023年6月3日
    00
  • 如何使用 Redis 的位图数据类型?

    以下是详细讲解如何使用 Redis 的位图数据类型的完整使用攻略。 Redis 位图简介 Redis 位图是一种特殊的字符串类型,可以用于存储二进制位。Redis 位图的特点如下: Redis 位图是基于字符串的,每个字符可以存储 8 个二进制位。 Redis 位图是可扩展的,可以动态增加或减少位数。 Redis 位图支持位运算,可以进行与、或、异或、非等操…

    python 2023年5月12日
    00
  • 如何使用Python基于接口编程的方法实现

    针对如何使用Python基于接口编程的方法实现,下面是具体的攻略: 什么是基于接口编程? 在了解基于接口编程之前,需要先了解软件设计中的接口概念。接口(interface)是一个固定的交互边界,它定义了一个类或者对象提供的公共方法,是一种限制和规范类或对象的行为方式的方法。在面向对象编程中,接口是一种约束。 基于接口编程(Interface Based Pr…

    python 2023年5月18日
    00
  • Python3中类、模块、错误与异常、文件的简易教程

    下面是一份Python3中类、模块、错误与异常、文件的简易教程: 1. 类(Class) 定义类 定义类的基本语法为: class ClassName: #属性 #方法 其中,类名必须以大写字母开头,其他与函数命名规则一致。 类的属性与方法 类的属性和方法可以类似于其他语言以“.”方式访问调用。例如 class Person: name = "Ja…

    python 2023年5月13日
    00
  • Python使用正则表达式获取网页中所需要的信息

    以下是详细讲解“Python使用正则表达式获取网页中所需要的信息”的完整攻略,包括正则表达式的语法和两个示例说明。 正则表达式语法 正则表达式是由普字符和元字符组成的,用来描述文本模式。下面是一些常用的正则表达式元字符: .:匹配任意字符。 *:匹配前面的字符0次或多次。 +:匹配前面的字符1次或多次。 ?:匹配前面的字符0次或1次。 |:匹配多个正则表达式…

    python 2023年5月14日
    00
  • python面向对象入门教程之从代码复用开始(一)

    《python面向对象入门教程之从代码复用开始(一)》是一篇介绍Python面向对象编程(OOP)的入门教程,主要讲解Python面向对象编程的基础概念、类的创建和使用、继承和多态等方面的内容,帮助用户深入了解并掌握Python的面向对象编程。 该教程主要分为以下几个部分进行讲解: 一、什么是面向对象编程? 从面向对象编程的思想、概念以及优势等多个方面,详细…

    python 2023年5月30日
    00
  • Python3中的列表,元组,字典,字符串相关知识小结

    Python3中的列表,元组,字典,字符串相关知识小结 在Python3中,列表、元组、字典和字符串是常见的数据类型。它们都有各自的特点和用途。本攻略将细介绍Python中列表、元组、字典和字符串的相关知识,并提供多个示例说明。 列表 列表是Python3中最常用的数据之一,它是一个有序的可变序列。列表可以包含任意类型的数据,包括数字、字符串、元组、列表、字…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部