Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第一部分:Python基础:第五章:函数和模块:第一节:函数定义和调用】

本文主要是介绍Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第一部分:Python基础:第五章:函数和模块:第一节:函数定义和调用】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第一部分:Python基础:第五章:函数和模块:第一节:函数定义和调用】

  • 第五章:函数定义和调用
    • 第一节:函数定义和调用以及参数和返回值
      • 1. 函数定义
      • 2. 函数调用
      • 3. 参数
      • 4. 返回值
      • 5.变量作用域
      • 6.python有关函数定义和调用方面的面试题
        • 面试题1
        • 面试题3
        • 面试题4
        • 面试题5
        • 面试题6
        • 面试题7
        • 面试题8
        • 面试题9
        • 面试题10

第五章:函数定义和调用

第一节:函数定义和调用以及参数和返回值

Python函数是组织代码的一种方式,它可以实现特定的功能,并且可以被重复调用。以下是对函数定义、调用、参数和返回值的详细解析:

1. 函数定义

函数通过关键字def定义,后跟函数名和圆括号中的参数列表,并以冒号结尾。新的代码行表示函数开始,并且缩进的代码块表示函数体。

def function_name(parameter1, parameter2):"""函数文档字符串(docstring):描述函数的作用"""# 执行代码块return result
  • 函数名(function_name):应当反映函数所进行的操作或返回的结果。
  • 参数(parameter1, parameter2):用以接收外部传递给函数的值。参数是可选的,一个函数也可以没有任何参数。
  • 函数文档字符串: 说明函数的行为和参数信息,方便理解和使用,推荐写在函数开始的地方。
  • 函数体: 实现函数功能的代码段。
  • return语句: 返回函数的结果。如果函数不需要返回值或者没有return语句,函数将返回None

2. 函数调用

函数定义之后,可通过函数名来调用并执行函数。调用时需要提供必要的参数,除非函数已经定义了默认参数。

# 定义函数
def greet(name):"""简单问候函数"""return f"Hello, {name}!"# 调用函数
message = greet("Alice")
print(message) # 输出: Hello, Alice!

3. 参数

参数是传递给函数的值,它们在函数内部用于完成特定的任务。函数参数的类型主要有以下几种:

  • 位置参数: 必须按照正确的顺序传递参数。
  • 关键字参数: 指定参数名称来传递参数,不需要按照位置顺序。
  • 默认参数: 在函数定义时,可以给参数一个默认值。在调用时,如果未提供该参数,则使用默认值。
  • 可变位置参数(*args): 允许函数接受任意数量的位置参数,这些参数将被打包成一个元组。
  • 可变关键字参数(**kwargs): 允许函数接受任意数量的关键字参数,这些参数将被打包成一个字典。
# 参数的例子
def student(name, age=18, *courses, **scores):print(f"Student: {name}, Age: {age}")print("Courses:", courses)print("Scores:", scores)# 使用位置参数和关键字参数调用函数
student("Bob", 19, "Math", "Physics", Math=80, Physics=90)

4. 返回值

Python函数可以返回零个、一个或多个值。如果没有明确指定返回值,则默认返回None

  • 没有返回值:相当于返回None
  • 返回一个值:直接返回那个值
  • 返回多个值:以元组的形式返回
def no_return():print("Nothing is returned explicitly.")def single_return():return "Python"def multiple_return():return 1, 2, 3  # 返回一个元组result = no_return()  # None
print(result)result = single_return()  # "Python"
print(result)result = multiple_return()  # (1, 2, 3)
print(result)

在函数中,return语句也可以用来提前退出函数,不必执行余下的代码。当函数执行到return语句时,函数立即结束,并将return后面的表达式结果返回给调用者。

5.变量作用域

在Python中,变量的作用域决定了在哪个部分的代码可以访问哪些变量。

  • 局部变量:在函数内部定义的变量,只能在该函数的内部访问。
  • 全局变量:在函数外定义的变量,可以在程序的任何地方访问。
# 全局变量
x = "global x"def test():# 局部变量y = "local y"print(y)print(x)test()   # 打印局部变量y和全局变量x
print(x)  # 正确,全局变量可以在这里访问
print(y)  # 错误,抛出异常,因为y是在函数test内定义的局部变量

理解参数、返回值和作用域是编写高效的、易于维护和理解的Python程序的关键。

6.python有关函数定义和调用方面的面试题

面试题1

面试题目:
请解释Python中的装饰器(decorator),并编写一个简单的装饰器示例,该装饰器记录函数执行的时间。

面试考题知识点:

  • 装饰器的概念和作用
  • 使用装饰器增强函数功能
  • 计时操作

答案或代码:

import timedef time_decorator(func):def wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")return resultreturn wrapper@time_decorator
def example_function():print("Executing example function.")time.sleep(2)  # 模拟耗时操作example_function()

答案或代码解析:
在这个例子中,time_decorator是一个装饰器,它接受一个函数func作为参数,并返回一个新的函数wrapperwrapper函数执行实际被装饰的函数,并在执行前后分别获取当前时间,从而计算出func的执行时间。通过在example_function函数定义前使用@time_decorator语法,我们将time_decorator应用于example_function,使其在调用时自动执行装饰器逻辑。

这个装饰器示例展示了如何使用装饰器来增强函数的功能,而不修改原有函数的代码。装饰器广泛用于日志记录、性能测试、事务处理、缓存等场景。

面试题3

面试题目:
请编写一个Python函数,该函数能够接受任意数量的命名关键字参数,并打印出参数名和对应的值。

面试考题知识点:

  • 命名关键字参数
  • 可变参数
  • 函数的参数解包

答案或代码:

def print_named_args(**kwargs):for name, value in kwargs.items():print(f"{name}: {value}")# 调用函数示例
print_named_args(first_name="John", last_name="Doe")

答案或代码解析:
在这个例子中,print_named_args函数使用**kwargs语法定义,这允许它接受任意数量的命名关键字参数。函数体内部,我们遍历kwargs字典的项,这个字典包含了所有传递给函数的命名关键字参数。然后,我们打印出每个参数的名字和对应的值。

这种方法的优点是可以接受不确定数量的参数,使得函数调用非常灵活。命名关键字参数常用于需要传递配置选项或属性等场景。

面试题4

面试题目:
在Python中,什么是lambda函数?请提供一个使用lambda函数进行排序的示例。

面试考题知识点:

  • lambda函数的定义和使用
  • 列表排序
  • 使用自定义函数进行排序

答案或代码:

# 定义一个包含元组的列表
data = [("apple", 3), ("banana", 2), ("cherry", 1)]# 使用lambda函数进行排序
sorted_data = sorted(data, key=lambda x: x[1])print(sorted_data)  # 输出: [('cherry', 1), ('banana', 2), ('apple', 3)]

答案或代码解析:
在这个例子中,我们首先定义了一个包含元组的列表。然后,我们调用内置的sorted函数对列表进行排序,并传递一个lambda函数作为key参数。这个lambda函数接受一个元素(在这里是一个元组),并返回一个用于排序的值(在这里是元组的第二个元素,即数字)。因此,sorted函数会根据元组的第二个元素进行排序。

lambda函数是Python中一种简洁的创建小型匿名函数的方式。它们通常在需要一个小函数作为参数的地方使用,例如在这个例子中的sorted函数。lambda函数的主要限制是它们只能包含一个表达式,不能包含复杂的逻辑,但在许多情况下,这是足够的。

面试题5

面试题目:
请解释Python中的闭包,并提供一个闭包的实例。

面试考题知识点:

  • 闭包的概念
  • 闭包的使用和优点

答案或代码:

def outer_function(x):def inner_function(y):return x + yreturn inner_functionclosure = outer_function(10)
print(closure(5))  # 输出: 15

答案或代码解析:
在这个例子中,outer_function是一个外部函数,它接受一个参数x,并定义了一个内部函数inner_function。内部函数inner_function可以访问外部函数outer_function的参数和变量。当我们调用outer_function时,它返回inner_function,这就形成了一个闭包。

闭包是一种特殊的函数,它记住了当它被创建时在其所在的作用域中的变量。在上述示例中,inner_function记住了outer_function的参数x的值。即使在outer_function执行完毕后,inner_function依然能够访问到x的值。这是因为闭包封装了外部函数的局部变量,并使得这些变量在外部函数执行完毕后仍然可访问。

outer_function(10)被调用时,它返回了inner_function的引用,此时inner_function闭包了(或者说记住了)变量x的值为10。因此,当我们通过变量closure调用inner_function(5)时,它能够使用记住的x的值(即10),并将其与传入的参数y(即5)相加,得到结果15。

闭包的优点包括:

  • 提高代码的模块化和抽象程度。
  • 允许隐藏状态(即闭包内部变量),只通过提供的函数来操作。
  • 可以根据外部函数的参数动态地创建不同行为的函数。

闭包在Python中是一个强大的概念,广泛应用于回调函数、装饰器等场景。

面试题6

面试题目:
如何在Python中使用*args**kwargs?请编写一个函数,它能同时接受任意数量的位置参数和命名关键字参数,并打印出所有参数的值。

面试考题知识点:

  • *args的用法
  • **kwargs的用法
  • 函数参数的不定长列表

答案或代码:

def print_args_and_kwargs(*args, **kwargs):if args:print("Positional arguments are:", args)if kwargs:print("Keyword arguments are:", kwargs)# 调用函数示例
print_args_and_kwargs(1, 2, 3, first_name="John", last_name="Doe")

答案或代码解析:
在这个例子中,print_args_and_kwargs函数使用了*args来接受任意数量的位置参数,并使用了**kwargs来接受任意数量的命名关键字参数。函数内部,我们分别检查argskwargs是否有内容,如果有,就分别打印出位置参数和关键字参数的值。

*args收集额外的位置参数并将其存储在一个元组中。**kwargs收集所有额外的关键字参数并将它们存储在一个字典中。这使得函数能够处理不确定数量的参数,增加了函数的灵活性和可用性。

面试题7

面试题目:
请解释Python中的类型注解(type hints)并提供一个使用类型注解的函数示例。

面试考题知识点:

  • 类型注解的概念
  • 类型注解在函数中的应用
  • 类型检查的好处

答案或代码:

def add_numbers(a: int, b: int) -> int:return a + b# 调用函数示例
result = add_numbers(5, 10)
print(result)  # 输出: 15

答案或代码解析:
在这个例子中,add_numbers函数使用了类型注解来指定参数ab应该是int类型,同时指定返回值也是int类型。类型注解通过在参数名后添加冒号:和类型名称来实现,返回值类型则通过在函数声明的末尾使用->符号后跟类型名称来指定。

类型注解是Python 3.5及以后版本引入的特性,它允许程序员为函数参数和返回值指定预期的数据类型。类型注解本身不会对Python代码的运行时行为产生任何影响,也就是说,它们不会导致自动的类型检查或强制类型转换。但是,类型注解可以被第三方工具和IDE用来进行类型检查,从而帮助开发者发现潜在的错误。此外,类型注解也可以作为代码文档的一部分,增加代码的可读性和可维护性。

面试题8

面试题目:
在Python中,什么是递归函数?请编写一个使用递归计算阶乘的函数。

面试考题知识点:

  • 递归函数的概念
  • 递归函数的使用
  • 阶乘的计算

答案或代码:

def factorial(n: int) -> int:if n == 0:return 1else:return n * factorial(n - 1)# 调用函数示例
print(factorial(5))  # 输出: 120

答案或代码解析:
在这个例子中,factorial函数使用了递归来计算阶乘。阶乘函数的定义是:n的阶乘等于n乘以(n-1)的阶乘,直到n为0时,0的阶乘定义为1。这个定义直接转化为了递归函数的形式。在factorial函数中,首先检查基准情况,即当n等于0时,按照阶乘的定义,返回1。如果n不为0,函数调用自身(递归调用),参数为n-1,并将返回值与n相乘。

递归函数是自己调用自己的函数。在使用递归时,非常重要的一点是定义一个明确的终止条件(基准情况),否则函数将会无限递归下去,最终导致栈溢出错误。在这个阶乘函数的示例中,终止条件是当n等于0时。

递归是一种强大的编程技术,允许简洁地解决一些看似复杂的问题,尤其是那些可以分解为相同问题的较小子问题的情况。然而,递归也可能导致较高的计算成本和内存使用,特别是当递归深度很大时。因此,在实际应用中,应当仔细权衡递归和迭代解决方案的利弊。

面试题9

面试题目:
在Python中,如何使用默认参数?请编写一个使用默认参数的函数。

面试考题知识点:

  • 默认参数的概念和使用
  • 默认参数在函数定义中的位置

答案或代码:

def greet(name, greeting="Hello"):print(f"{greeting}, {name}!")# 调用函数示例
greet("Alice")  # 输出: Hello, Alice!
greet("Bob", "Good morning")  # 输出: Good morning, Bob!

答案或代码解析:
在这个例子中,greet函数接受两个参数:namegreeting。其中,greeting是一个默认参数,如果在调用函数时没有提供greeting的值,那么它的值将为默认值"Hello"。

默认参数允许函数在调用时省略某些参数,而不会导致错误。如果省略了带有默认值的参数,函数将使用参数的默认值。在上述示例中,当我们只传入一个参数调用greet函数时(如greet("Alice")),greeting参数的值将为其默认值"Hello"。

默认参数在函数定义中的位置很重要。默认参数必须位于所有非默认(必需)参数之后。如果试图在必需参数之前或之间放置默认参数,Python将引发语法错误。

默认参数可以提高函数的灵活性,使其在不同的上下文中具有不同的行为。然而,应当注意默认参数的值只在函数定义时计算一次,而不是在每次调用函数时计算。因此,如果默认参数的值是可变的(例如列表或字典),并且在函数内部修改了这个值,那么这个修改将在函数的后续调用中保持有效。这可能导致一些非预期的行为。

面试题10

面试题目:
Python中的函数可以作为其他函数的参数或返回值吗?请提供一个高阶函数(high-order function)的示例,这个函数接受一个函数作为参数,并返回一个新的函数。

面试考题知识点:

  • 高阶函数的概念
  • 在Python中函数作为一等公民的特性
  • 函数作为参数和返回值的使用

答案或代码:

def make_multiplier(factor):def multiplier(n):return n * factorreturn multiplier# 使用高阶函数创建新的函数
double = make_multiplier(2)
print(double(5))  # 输出: 10

答案或代码解析:
在这个例子中,make_multiplier是一个高阶函数,它接受一个参数factor,并返回一个新的函数multipliermultiplier函数接受一个参数n,并返回n * factor

这个例子展示了在Python中,函数可以作为一等公民,这意味着函数可以被赋值给变量,可以作为参数传递给其他函数,也可以作为其他函数的返回值。这种特性使得Python能够方便地使用高阶函数和函数式编程风格。

在上述示例中,当我们调用make_multiplier(2)时,它返回了一个新的函数multiplier,而且这个新函数"记住了"参数factor的值为2。因此,当我们通过变量double调用multiplier(5)时,它能够使用记住的factor的值(即2),并将其与传入的参数n(即5)相乘,得到结果10。

高阶函数在许多场景中都非常有用。例如,它们可以用于创建配置化的函数,或者在不改变原有函数的情况下增加新的功能(如日志记录,性能监控等),这是装饰器模式的一个常见应用。此外,高阶函数也是函数式编程中的一个核心概念,它允许我们以更抽象的方式处理数据和操作,有助于编写更清晰、更简洁的代码。

通过使用高阶函数,我们可以将一些操作抽象成函数,然后将这些函数作为参数传递给其他函数,从而实现更加动态和灵活的编程模式。这种方式不仅可以提高代码的重用性,还可以帮助我们以更加声明式的风格来编程,关注于我们想要做什么,而不是如何去做。

总之,Python中的高阶函数是一种强大的工具,它利用了函数作为一等公民的特性,为编程提供了更多的灵活性和表达力。

这篇关于Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第一部分:Python基础:第五章:函数和模块:第一节:函数定义和调用】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/993445

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

《纳瓦尔宝典》是纳瓦尔·拉维坎特(Naval Ravikant)的智慧箴言

《纳瓦尔宝典》是一本由埃里克·乔根森(Erik Jorgensen)编著的书籍,该书于2022年5月10日由中信出版社出版。这本书的核心内容围绕硅谷知名天使投资人纳瓦尔·拉维坎特(Naval Ravikant)的智慧箴言,特别是关于财富积累和幸福人生的原则与方法。 晓北斗推荐 《纳瓦尔宝典》 基本信息 书名:《纳瓦尔宝典》作者:[美] 埃里克·乔根森译者:赵灿出版时间:2022