附答案|2024最新Python面试题之Python基础(5)

写在之前

Python 面试的时候会涉及到很多的八股文,我准备连载一个新的系列【最新Python面试题】

这些面试题是我结合自身经验,以及搜集整理的企业面试真题,主要有以下几个方面:

  • Python基础
  • Python机制
  • Python面向对象
  • Python笔试题
  • Python算法
  • Django框架
  • Flask框架
  • 其他开源框架
  • Scrapy数据爬虫
  • Python正则式
  • Python数据分析
  • Pandas框架
  • Python拓展知识(数据结构,常见算法,数据库原理及调优,中间件…)

虽然这些是面试“八股文”,但是只会背答案与流畅的并能结合自身思考的回答,对于面试官来说还是有很大区别的。

所以除了在每道面试题后会提供仔细整理和验证后的答案以外,在每篇文章中会挑选一道难度高且重点的题目做详细的讲解

希望大家不但能知其然也可以知其所以然,在面试的时候让面试官眼前一亮,这样白花花的offer不就到手了嘛

每天会更新10道题左右,无论是准备面试还是自己学习,这份面试题绝对值得你去看

大家可以关注我,再关注我,使劲关注我,不要错过每天的更新~

1.Python如何定义函数?

在 Python 中,定义函数使用 def 关键字,后跟函数名和括号内的参数列表。函数体则跟在冒号后面,并且必须缩进。

以下是定义函数的基本语法:

def function_name(parameters):
    """函数的文档字符串(可选)"""
    # 函数体
    return expression  # 返回值(可选)
  • function_name:这是函数的名称,它应该遵循 Python 的命名规则(通常使用小写字母和下划线)。
  • parameters:这是函数的参数列表,参数之间用逗号分隔。参数可以有默认值。
  • """函数的文档字符串(可选)""":这是一个可选的文档字符串,用于描述函数的作用。它应该紧跟在函数定义之后,并且用三引号括起来。
  • return expression:这是函数的返回值,它表示函数执行完成后返回给调用者的值。return 语句是可选的,如果没有 return 语句,函数默认返回 None

2.Python 如何进行字符串插值?

  1. 百分号格式化(% 操作符)
    这是较早的字符串格式化方法,通过在字符串中使用 % 操作符和格式化占位符来实现。

    name = "Alice"
    greeting = "Hello, %s!" % name
    print(greeting)  # 输出: Hello, Alice!
    
  2. str.format() 方法
    这种方法在 Python 2.6 及以后的版本中引入,提供了更多的灵活性和强大的格式化选项。

    name = "Alice"
    greeting = "Hello, {}!".format(name)
    print(greeting)  # 输出: Hello, Alice!
    

    format() 方法还可以进行更复杂的格式化,如设置宽度、填充字符、对齐方式等。

  3. f-字符串(格式化字符串字面量)
    在 Python 3.6 及以后的版本中引入,是当前推荐的字符串插值方法。f-字符串通过在字符串前加上字母 fF,并在大括号 {} 中直接嵌入变量或表达式。

    name = "Alice"
    greeting = f"Hello, {name}!"
    print(greeting)  # 输出: Hello, Alice!
    

    f-字符串不仅简洁,而且执行效率高,因为它在运行时会直接将变量的值插入字符串中。

  4. 模板字符串
    string.Template 类提供了另一种字符串插值的方法,它使用 $ 符号来引用变量。

    from string import Template
    template = Template('Hello, $name!')
    greeting = template.substitute(name="Alice")
    print(greeting)  # 输出: Hello, Alice!
    

3." is"和" =="有什么区别?

  • is
    • is 操作符用于比较两个对象的身份,即它们是否为同一个对象(即是否位于内存中的同一个位置)。
    • 它检查两个变量是否引用同一个对象。
    • is 对于确定两个变量是否指向同一个可变对象非常有用,例如列表、字典、类实例等。
  • ==
    • == 操作符用于比较两个对象的值是否相等。
    • 它检查两个对象的内容是否相同。
    • == 通常用于比较两个不可变对象,如整数、浮点数、字符串和元组等。

4." func"和" func()"有什么区别?

  • func:这表示对函数的引用,而不是函数的调用。它指向函数对象本身,而不是函数的执行结果。在这种情况下,func 变量存储了函数的内存地址,你可以使用它来访问函数的属性或者将其作为参数传递给其他函数。
  • func():这表示调用函数 func。当你在函数名后面加上括号时,Python 解释器会执行这个函数,并返回函数体内部 return 语句的结果(如果函数中有 return 语句)。如果没有 return 语句或者 return 语句没有返回值,那么函数默认返回 None

5.简述 Map功能的工作方式?

map() 函数是 Python 的内置函数之一。
用于对可迭代对象的每个元素应用一个函数,并将结果收集到一个新的迭代器中。
map() 函数通常用于将一个函数应用于一个序列的每个元素,或者将多个序列的对应元素应用到一个函数上。

6.Python是按引用调用还是按值调用?

  • Python 中的函数调用可以被认为是按引用调用,但这里的“引用”指的是对象的引用,而不是内存地址。
  • 对于可变对象,函数内部的修改会影响原始对象。
  • 对于不可变对象,函数内部的修改不会影响原始对象,除非显式地将参数重新赋值为一个新的对象。

7.解释 Python filter功能如何工作?

  • filter() 函数是 Python 的内置函数之一,用于过滤序列,从中提取符合特定条件的元素。
  • filter() 函数接受两个参数:一个函数和一个可迭代对象。
    传入的函数用于判断可迭代对象中的每个元素是否符合条件,返回布尔值(True 或 False)。filter() 会返回一个迭代器,包含所有使函数返回 True 的元素。

8.字符串乘法如何工作?

'cat' * 3
#=> 'catcatcat'
#该字符串将自身连接3次

d9.列表乘法如何工作?

[1,2,3] * 2
#=> [1, 2, 3, 1, 2, 3]
#输出包含重复两次的[1,2,3]内容的列表。

重点题详解

.解释reduce函数的工作原理?

reduce() 函数是 Python 的 functools 模块中的一个函数,它用于将一个函数应用于可迭代对象的元素,从而将其缩减(reduce)为单一的值。reduce() 函数通常用于更复杂的数据处理,比如累加、累乘或者更复杂的数据聚合操作。

工作原理

reduce() 函数的基本语法如下:

reduce(function, iterable[, initializer])
  • function 是一个接受两个参数的函数,它将被应用到 iterable 的元素上。
  • iterable 是一个可迭代对象,比如列表、元组等。
  • initializer 是可选的,如果提供,它将作为 reduce() 函数的初始值。

工作步骤

  1. 初始化:如果提供了 initializer,则将其作为第一个累积值。如果没有提供 initializer,则从 iterable 中取出第一个元素作为累积值。

  2. 迭代reduce() 函数将 function 应用到累积值和 iterable 的下一个元素上。每次应用后,function 的返回值成为下一次迭代的累积值。

  3. 继续应用:这个过程一直持续到 iterable 中的所有元素都被处理完毕。

  4. 返回结果:最终的累积值就是 reduce() 函数的返回值。

示例

假设我们有一个列表 [1, 2, 3, 4],我们想要计算所有元素的累加和。

from functools import reduce

numbers = [1, 2, 3, 4]
sum = reduce(lambda x, y: x + y, numbers)
print(sum)  # 输出: 10

在这个例子中:

  • function 是一个匿名函数 lambda x, y: x + y,它接受两个参数 xy,并返回它们的和。
  • iterable 是列表 [1, 2, 3, 4]
  • 没有提供 initializer,所以 reduce() 会从列表中取出第一个元素(1)作为初始累积值。

工作流程如下:

  • 第一次迭代:function(1, 2) 返回 3,累积值为 3。
  • 第二次迭代:function(3, 3) 返回 6,累积值为 6。
  • 第三次迭代:function(6, 4) 返回 10,累积值为 10。

最终,reduce() 返回 10。

注意事项

  • 如果 iterable 为空,并且没有提供 initializerreduce() 会引发 TypeError
  • reduce() 函数通常用于更复杂的数据处理,而不是简单的累加或累乘,因为这些操作可以直接使用内置的 sum()map() 函数。

实现逻辑详解

reduce() 函数的实现逻辑可以通过迭代地应用一个二元函数(即接受两个参数的函数)来实现。下面是一个简化的 reduce() 函数的实现,展示了其基本逻辑:

from functools import reduce

def my_reduce(function, iterable, initializer=None):
    # 如果提供了 initializer,则将其作为累积值
    if initializer is not None:
        accumulator = initializer
        iter_iterable = iter(iterable)
    else:
        # 没有提供 initializer,从 iterable 中取出第一个元素作为累积值
        accumulator = next(iter(iterable))
        iter_iterable = iter(iterable)

    # 迭代地应用 function 到累积值和 iterable 的下一个元素
    for element in iter_iterable:
        accumulator = function(accumulator, element)

    return accumulator

# 示例使用
numbers = [1, 2, 3, 4]
print(my_reduce(lambda x, y: x + y, numbers))  # 输出: 10
  1. 初始化累积值

    • 如果提供了 initializer 参数,那么直接使用它作为累积值(accumulator)。
    • 如果没有提供 initializer,那么使用 iter() 函数将 iterable 转换为迭代器,并使用 next() 函数从迭代器中取出第一个元素作为累积值。
  2. 迭代应用函数

    • 使用 iter() 函数将 iterable 转换为迭代器(如果已经取出了第一个元素,那么直接使用剩余的迭代器)。
    • 使用 for 循环遍历迭代器中的每个元素。
    • 在每次迭代中,将 function 应用到累积值和当前的元素上,并将结果更新为新的累积值。
  3. 返回结果

    • 循环结束后,返回最终的累积值。

错误处理

  • 如果 iterable 为空,并且没有提供 initializer,那么在尝试使用 next() 函数获取第一个元素时,会抛出 StopIteration 异常。在实际的 reduce() 函数实现中,这种情况会引发 TypeError

这个简化的实现展示了 reduce() 函数的核心逻辑,即通过迭代地应用一个二元函数来逐步缩减 iterable 为一个单一的值。这种模式在处理复杂的数据聚合操作时非常有用。

更多资料干货、行业内幕 长期免费更新中!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值