Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

 

本文主要是作为Python中函数的一些题目,方便学习完Python的函数之后进行一些知识检验,感兴趣的小伙伴可以试一试,含选择题、判断题、实战题、填空题,答案在第五章

在做题之前可以先学习或者温习一下Python的函数,推荐阅读下面这篇文章:

Python全网最全基础课程笔记(十二)——函数,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!-CSDN博客

通过这些题目,学习者可以检验自己对Python字典基础知识的掌握程度。

编程不仅是技术的堆砌,更是灵魂的创造,每一次代码的跳动,都是向世界宣告你的不凡!

  • 博客主页:长风清留扬-CSDN博客
  • 系列专栏:Python基础专栏
  • 每天更新大数据相关方面的技术,分享自己的实战工作经验和学习总结,尽量帮助大家解决更多问题和学习更多新知识,欢迎评论区分享自己的看法
  • 感谢大家点赞👍收藏⭐评论

第一章 选择题

1. 在Python中,定义一个函数时使用的关键字是?
A. def
B. function
C. func
D. create

2. 下列哪个不是Python函数的基本组成部分?
A. 函数名
B. 冒号(:)
C. 返回值
D. 缩进块

3. Python中,函数可以通过什么方式返回多个值?
A. 使用逗号分隔多个值
B. 使用列表或元组
C. 以上两者都可以
D. 只能返回一个值,不能返回多个

4. 哪个关键字用于调用Python中的函数?
A. call
B. execute
C. 函数名后加括号及参数(如果有)
D. invoke

5. 下列哪个是Python中的匿名函数(也称为lambda函数)的示例?
A. def my_func(x): return x*2
B. lambda x: x*2
C. function(x) { return x*2; }
D. anon_func = def(x) x*2

6. 在Python中,哪个内置函数用于获取函数的文档字符串?
A. doc()
B. docstring()
C. help()
D. __doc__

7. 如果一个函数没有定义返回值,那么它默认返回什么?
A. None
B. 0
C. 函数名
D. True

8. 下列哪个参数在函数定义时,允许你在函数调用时传递任意数量的参数给函数?
A. *args
B. **kwargs
C. 两者都是
D. 都不是,Python不支持这种参数

9. 哪个函数可以用来过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表?
A. map()
B. filter()
C. reduce()
D. lambda()

10. Python中,使用*操作符作为函数调用时的参数,其作用是什么?
A. 传递一个列表作为参数
B. 将字典的键值对作为参数传递给函数
C. 将序列解包为位置参数
D. 调用函数的递归形式

11. 在Python中,哪个函数可以用来检查一个对象是否可调用?
A. callable()
B. is_callable()
C. can_call()
D. is_function()

12. 当你想要在函数内部修改一个从外部传入的可变对象(如列表),你应该怎么做?
A. 直接修改它,因为Python传递的是对象的引用
B. 返回一个新的对象
C. 使用全局变量
D. 传入对象的索引和值,让函数进行修改

13. 下列哪个是Python函数中的关键字参数(Keyword Argument)的示例?
A. func(10, 20)
B. func(x=10, y=20)
C. func(*args)
D. func(**kwargs)

14. 在Python中,递归函数是什么?
A. 调用自身的函数
B. 调用其他函数的函数
C. 永远不返回的函数
D. 不能被调用的函数

15. 哪个内置函数可以用来将函数作为参数传递给另一个函数?
A. apply()
B. map()
C. filter()
D. 以上都不是,Python不直接有这样的函数,但可以使用其他方式实现

16. 下列哪个不是Python中定义函数时可选的组成部分?
A. 参数列表
B. 文档字符串(docstring)
C. 返回值类型注解(在Python 3.5+中)
D. 函数体中的全局变量声明

17. 在Python中,如果你想在函数内部修改全局变量,你应该怎么做?
A. 直接修改它
B. 使用global关键字声明
C. 将其作为参数传入函数
D. 返回一个修改后的新变量

18. 哪个内置函数可以用来返回函数对象的名称?
A. name()
B. __name__
C. function_name()
D. get_name()

19. 下列哪个是Python中局部变量的特点?
A. 只能在函数外部访问
B. 只能在定义它的函数内部访问
C. 可以在程序的任何地方访问
D. 以上都不是

20. Python中,*args**kwargs在函数定义时的顺序是怎样的?
A. *args必须在**kwargs之前
B. **kwargs必须在*args之前
C. 它们可以互换位置
D. 它们不能同时使用

21. Python中,如何定义一个不接受任何参数的函数?
A. def my_func(x=None):
B. def my_func():
C. def my_func(x):
D. def my_func(*):

22. 下列哪个函数用于将一个函数作为参数,并对其可迭代对象的每个元素执行该函数?
A. filter()
B. map()
C. reduce()
D. lambda()

23. 在Python中,如何定义一个只接受关键字参数的函数?
A. 在参数列表前加上*
B. 在参数列表前加上**
C. 在函数定义时不使用位置参数
D. 使用*args**kwargs,但只在函数体内使用**kwargs

24. 哪个内置函数可以用来将可迭代对象中的所有元素累积(结合)为一个单独的值?
A. sum()
B. reduce()(注意:reduce()在Python 3中需要从functools模块导入)
C. accumulate()
D. combine()

25. 在Python中,嵌套函数指的是什么?
A. 在另一个函数内部定义的函数
B. 调用自己的函数
C. 定义在类中的函数
D. 接受另一个函数作为参数的函数

26. Python中,闭包(Closure)是如何形成的?
A. 当一个内部函数引用了其外部函数作用域中的变量时
B. 当一个函数返回另一个函数时
C. 两者都是(即,当内部函数引用了外部变量,并且这个内部函数被返回时)
D. 都不是

27. 哪个内置函数可以用来获取函数对象的内存地址?
A. id()
B. address()
C. memory_location()
D. location()

28. 下列哪个参数类型允许你传递任意数量的关键字参数给函数?
A. *args
B. **kwargs
C. 两者都可以
D. 两者都不可以

29. 在Python中,如何给函数添加类型注解(Type Hints)来指定参数和返回值的类型?
A. 在参数名和冒号之间添加类型
B. 在参数名之后、等号之前添加类型
C. 在函数定义结束后,使用特殊的注释语法
D. 使用typing模块中的类型别名

30. 下列哪个是Python中装饰器(Decorator)的典型用途?
A. 修改或增强函数的功能,而不需要修改函数的内部代码
B. 定义类的特殊方法
C. 递归调用函数
D. 声明函数的文档字符串

31. 在Python中,如何定义一个返回多个值的函数?
A. 使用逗号分隔返回值
B. 使用列表或元组作为返回值
C. 定义一个包含多个return语句的函数
D. 以上都是

32. 哪个内置函数可以用来检查一个对象是否是某个类的实例?
A. isinstance()
B. type()
C. issubclass()
D. class()

33. Python中的匿名函数是通过什么方式定义的?
A. 使用def关键字
B. 使用lambda关键字
C. 不能直接定义匿名函数
D. 使用@符号

34. 下列哪个是Python中生成器函数的特点?
A. 使用return语句返回值
B. 使用yield语句返回值
C. 总是返回列表
D. 不能被迭代

35. 在Python中,如何定义一个函数,使其能够接收任意数量的位置参数?
A. 使用*args
B. 使用**kwargs
C. 使用*符号作为函数名
D. 定义一个没有参数的函数

36. 下列哪个是Python中递归函数的终止条件(基准情形)的重要性?
A. 防止无限递归
B. 确保函数能够处理所有情况
C. 提高函数执行效率
D. 以上都是

37. 在Python中,如何调用一个函数并捕获其返回值?
A. 将函数名放在赋值语句的左侧
B. 使用print()函数打印函数的返回值
C. 直接在函数名后加括号调用,并将结果赋值给变量
D. 以上都可以,但通常使用C选项

38. 哪个内置函数可以用来获取函数的文档字符串?
A. doc()
B. docstring()
C. __doc__
D. get_doc()

39. 在Python中,如何定义一个装饰器?
A. 使用@符号和函数名
B. 定义一个接受函数作为参数的函数,并返回一个新的函数
C. 使用def关键字定义一个特殊的函数
D. 以上都是定义装饰器的方式,但B选项最准确

40. 下列哪个不是Python中函数参数的类型?
A. 位置参数
B. 关键字参数
C. 默认参数
D. 静态参数

第二章 判断题

1. Python中的函数必须有一个返回值。

2. 使用def关键字可以定义函数。

3. 函数内部定义的变量只能在函数内部访问。

4. 函数的参数可以是任意类型的数据,包括其他函数。

5. return语句只能出现在函数的末尾。

6. 匿名函数(lambda函数)可以有多条执行语句。

7. Python中的函数可以嵌套定义,即在一个函数内部定义另一个函数。

8. 函数的文档字符串(docstring)应该紧跟在函数定义的第一行。

9. *args用于接收任意数量的位置参数,而**kwargs用于接收任意数量的关键字参数。

10. 递归函数必须有一个或多个基准情形(终止条件),以防止无限递归。

11. 函数的参数在函数被调用时才会被赋值。

12. Python中的函数参数传递默认是按值传递的,即使是列表或字典这样的可变类型。

13. 函数的返回值类型必须和函数定义时指定的返回类型一致(假设使用了类型注解)。

14. 装饰器是一个特殊的函数,它可以接受一个函数作为参数并返回一个新的函数。

15. Python中的全局变量在函数内部可以直接修改,而无需使用global关键字。

16. Python中的函数可以没有参数。

17. 函数名可以是Python中的任何有效标识符。

18. 在函数内部定义的局部变量在函数外部是不可见的。

19. Python函数可以嵌套调用,即在一个函数内部调用另一个函数。

20. 使用yield语句的函数是生成器函数,它返回一个生成器对象。

21. 函数的返回值可以是任意类型,包括None。

22. 关键字参数在函数调用时必须按照函数定义中的顺序提供。

23. 在Python中,可以通过locals()函数获取当前函数的所有局部变量。

24. 递归函数必须谨慎使用,以避免栈溢出错误。

25. 匿名函数(lambda函数)不能用作装饰器。

26. Python中的*args**kwargs可以同时在函数定义中使用。

27. 函数的文档字符串(docstring)是可选的,但它对代码的可读性和可维护性非常有帮助。

28. 函数可以修改通过参数传递的不可变类型(如整数、浮点数)的值。

29. 在Python中,可以使用*操作符来解包列表或元组,作为位置参数传递给函数。

30. 装饰器可以改变函数的名称、文档字符串等属性。

31. 在Python中,所有函数都是对象。

32. 函数可以拥有属性,就像其他对象一样。

33. Python的闭包(Closure)是一个包含了额外作用域的函数。

34. globals()函数返回当前全局符号表的字典。

35. 函数默认参数的值只在函数定义时计算一次。

36. Python的内置函数(如len()print())不能被重写或覆盖。

37. 使用map()函数可以对可迭代对象中的每个元素应用一个函数。

38. filter()函数用于过滤序列,过滤掉那些不符合条件的元素。

39. 嵌套函数中的外部函数必须先被调用,内部函数才能被调用。

40. 装饰器本质上是一个函数,但它返回一个函数对象,而不是执行被装饰的函数。

41. 在Python中,函数参数名在函数体内部是局部的,但在函数外部是全局的。

42. __name__属性对于函数来说是可选的,它不是每个函数都必须有的。

43. 匿名函数(lambda函数)可以作为map()filter()函数的参数。

44. 递归函数必须有至少一个基准情形,否则会导致无限递归。

45. 在Python中,可以通过help(function_name)来获取函数的帮助信息,包括文档字符串。

第三章 填空题

1. Python中定义函数的关键字是 _______。

2. 函数定义的一般形式是 def 函数名(参数列表):,其中def是_______的缩写。

3. 函数通过关键字_______返回结果。

4. 如果函数没有返回值,或者没有执行到return语句,则默认返回_______。

5. 在Python中,可以通过_______函数获取当前函数的局部变量字典。

6. 匿名函数(也称为lambda函数)使用_______关键字定义。

7. *args用于在函数定义中接收_______数量的位置参数。

8. **kwargs用于在函数定义中接收_______数量的关键字参数。

9. 装饰器是一种特殊的函数,它可以接受一个函数作为_______,并返回一个新的函数对象。

10. Python中,函数的_______属性包含了函数的文档字符串。

第四章 实战题

题目1:计算并返回学生成绩的平均分

题目描述
编写一个Python函数calculate_average,该函数接收一个包含学生分数的列表作为参数,计算这些分数的平均分(保留两位小数),并返回结果。假设分数列表中的每个元素都是有效的浮点数,且列表不为空。

学生分数列表:scores = [85.5, 92.0, 78.5, 88.0]

解题思路

  1. 遍历分数列表,将所有分数累加到一个变量中。
  2. 使用列表长度(即学生人数)来除以总分,得到平均分。
  3. 使用round()函数保留两位小数。

题目2:反转字符串

题目描述
编写一个Python函数reverse_string,该函数接收一个字符串作为参数,返回该字符串的反转版本。

字符串示例:s = "hello world" 

解题思路

  1. 使用字符串切片功能,通过[::-1]来实现字符串的反转。

题目3:计算斐波那契数列的第10项

题目描述
编写一个Python函数fibonacci,该函数接收一个整数10作为参数,并返回斐波那契数列的第10项。斐波那契数列是一个每项都是前两项和的数列,且第一项和第二项都定义为1。

解题思路

  1. 如果10小于等于1,直接返回1(因为斐波那契数列的前两项都是1)。
  2. 使用循环或递归计算第10项的值。为了简洁和效率,这里我们使用循环。

题目4:判断字符串是否为回文

题目描述
编写一个Python函数is_palindrome,该函数接收一个字符串作为参数,并判断该字符串是否为回文(即正读和反读都相同的字符串)。如果是回文,则返回True;否则返回False

两个字符串示例:

s = "A man, a plan, a canal: Panama"

s2 = "racecar" 

解题思路

  1. 去除字符串两端的空格,并将字符串转换为小写(或大写),以忽略大小写和首尾空格的差异。
  2. 比较字符串和其反转字符串是否相等。

题目5:找出列表中的最大和最小值

题目描述
编写一个Python函数find_max_min,该函数接收一个整数列表作为参数,并返回一个包含两个元素的元组,第一个元素是列表中的最大值,第二个元素是列表中的最小值。

整数列表示例:numbers = [3, 1, 4, 1, 5, 9, 2, 6] 

解题思路

  1. 初始化两个变量来分别存储最大值和最小值,可以初始化为列表的第一个元素。
  2. 遍历列表中的每个元素,更新最大值和最小值变量。
  3. 返回包含最大值和最小值的元组。

第五章 答案

选择题

1. A (def)

  • def 是Python中定义函数的关键字。

2. C (返回值)

  • 返回值不是函数定义的基本组成部分,函数可以不返回任何值(即隐式返回None)。

3. C (以上两者都可以)

  • 你可以在Python函数中使用逗号分隔返回多个值,这些值会被Python自动打包成元组。同时,你也可以显式地返回一个列表或元组来返回多个值。

4. C (函数名后加括号及参数(如果有))

  • 在Python中,调用函数是通过在函数名后加括号(可包含参数)来实现的。

5. B (lambda x: x*2)

  • lambda 是Python中定义匿名函数的关键字,它可以接收任意数量的参数但只能有一个表达式。

6. D (__doc__)

  • __doc__ 是一个特殊属性,用于存储函数的文档字符串。虽然 help() 函数可以用来查看对象的帮助信息,但直接获取文档字符串是通过 __doc__ 属性。

7. A (None)

  • 如果函数没有定义返回值(即没有 return 语句),则函数执行完毕后默认返回 None

8. C (两者都是)

  • *args 允许你将一个不定长度的参数序列传递给函数,这些参数在函数内部被打包成一个元组。**kwargs 允许你传递不定长度的关键字参数,这些参数在函数内部被打包成一个字典。

9. B (filter())

  • filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新迭代器。

10. C (将序列解包为位置参数)

  • 在Python函数调用时,使用 * 操作符可以将一个可迭代对象(如列表、元组)解包为位置参数传递给函数。

11. A (callable())

  • callable() 函数用于检查一个对象是否是可调用的。如果对象是一个函数、方法、实现了 __call__() 方法的类的实例等,则返回 True

12. A (直接修改它,因为Python传递的是对象的引用)

  • 在Python中,当你将一个可变对象(如列表)作为参数传递给函数时,实际上传递的是对象的引用(或地址)。因此,函数内部对对象的修改会反映到原始对象上。

13. B (func(x=10, y=20))

  • 关键字参数允许你通过参数名来指定参数的值,而不是通过位置。在函数调用时,关键字参数必须放在位置参数之后。

14. A (调用自身的函数)

  • 递归函数是一种直接或间接地调用自身的函数。它通常用于解决可以分解为更小、相似子问题的问题。

15. D (以上都不是,Python不直接有这样的函数,但可以使用其他方式实现)

  • Python没有一个内置的apply()函数来直接将函数作为参数传递(尽管在Python 2中有,但在Python 3中已被移除)。但可以使用其他方式(如使用*args**kwargs)来实现类似的功能。

16. D (函数体中的全局变量声明)

  • 在Python中,函数定义时可以包含参数列表、文档字符串、返回值类型注解(在Python 3.5+中)等可选组成部分,但不需要在函数体内部声明全局变量。全局变量的声明通常在函数外部进行,如果需要在函数内部修改全局变量,则可以使用global关键字。

17. B (使用global关键字声明)

  • 在Python中,如果你想要在函数内部修改全局变量,你需要在函数内部使用global关键字来声明这个变量是全局的。

18. B (__name__)

  • 在Python中,每个函数对象都有一个__name__属性,它包含了函数的名称。这个属性可以被用来获取或检查函数的名称。

19. B (只能在定义它的函数内部访问)

  • 局部变量是定义在函数内部的变量,它们只能在定义它们的函数内部被访问。

20. A (*args必须在**kwargs之前)

  • 在Python函数定义时,*args必须位于**kwargs之前。这是因为位置参数(*args展开成位置参数)在关键字参数(**kwargs展开成关键字参数)之前被处理。

21. B (def my_func():)

  • 当一个函数不接受任何参数时,其参数列表应该为空。

22. B (map())

  • map() 函数将指定的函数应用于可迭代对象的所有项,并返回一个迭代器,该迭代器包含应用函数后的结果。

23. C (在函数定义时不使用位置参数)

  • 要定义一个只接受关键字参数的函数,你需要在函数定义时只使用关键字参数(即,不使用位置参数),并在调用时明确指定参数名。

24. B (reduce(),注意:在Python 3中需要从functools模块导入)

  • reduce() 函数会对参数序列中元素进行累积。但是,在Python 3中,reduce() 函数被移到了functools模块中。

25. A (在另一个函数内部定义的函数)

  • 嵌套函数是指在另一个函数内部定义的函数。

26. C (两者都是)

  • 闭包是一个内部函数,它引用了其外部函数作用域中的变量,并且这个内部函数被返回或传递给了其他函数/作用域。

27. A (id())

  • id() 函数用于获取对象(包括函数对象)的唯一标识符,通常是一个整数值,表示对象的内存地址。

28. B (**kwargs)

  • **kwargs 允许你传递任意数量的关键字参数给函数。

29. A (在参数名和冒号之间添加类型)

  • 在Python中,你可以通过在参数名和冒号之间添加类型来给函数添加类型注解。从Python 3.5开始,这种类型注解是可选的,并且主要用于静态类型检查器和IDE中的代码分析。

30. A (修改或增强函数的功能,而不需要修改函数的内部代码)

  • 装饰器是Python中用于修改或增强函数功能的一种高级技术,它允许你在不修改函数内部代码的情况下,给函数添加新的功能。

31. D (以上都是)

  • 在Python中,你可以通过逗号分隔多个值来返回一个元组,这实际上是返回了多个值。你也可以直接返回一个列表或元组来包含多个值。此外,一个函数可以有多个return语句,但通常只执行到第一个return语句就会结束函数并返回结果。

32. A (isinstance())

  • isinstance() 函数用于检查一个对象是否是一个已知的类型,类似类型的对象或者实现了特定接口的对象。

33. B (使用lambda关键字)

  • Python中的匿名函数是通过lambda关键字来定义的。这些函数通常用于需要函数对象的地方,但又不想正式命名一个函数的场合。

34. B (使用yield语句返回值)

  • 生成器函数使用yield语句来返回一个值给调用者,并保留当前执行状态,以便下次从该位置继续执行。

35. A (使用*args)

  • 在Python中,*args用于接收任意数量的位置参数,并将它们作为一个元组传递给函数。

36. A (防止无限递归)

  • 递归函数的终止条件(也称为基准情形)是递归能够停止的关键。没有终止条件,递归将会无限进行下去,最终导致栈溢出错误。

37. C (直接在函数名后加括号调用,并将结果赋值给变量)

  • 在Python中,调用函数通常是通过在函数名后加括号来实现的,并且可以将结果赋值给变量以捕获返回值。

38. C (__doc__)

  • 在Python中,每个函数对象都有一个__doc__属性,它包含了函数的文档字符串。你可以通过访问这个属性来获取函数的文档字符串。

39. D (以上都是定义装饰器的方式,但B选项最准确)

  • 装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。虽然@符号和def关键字在定义装饰器时也会用到,但B选项最准确地描述了装饰器的核心特征。

40. D (静态参数)

  • Python中函数参数的类型主要包括位置参数、关键字参数、默认参数等,但并没有“静态参数”这一说法。静态参数可能是指静态类型注解(在Python 3.5+中通过类型提示实现),但这与函数参数的类型分类不同。

判断题

1. 错误。

  • 解析:Python中的函数可以没有返回值,如果没有使用return语句或return语句后没有跟任何值,则函数默认返回None

2. 正确。

  • 解析:在Python中,使用def关键字后跟函数名和圆括号(可能包含参数)以及冒号来定义函数。

3. 正确。

  • 解析:函数内部定义的变量(局部变量)默认只能在函数内部访问,除非它们被显式地返回或作为参数传递给其他函数。

4. 正确。

  • 解析:Python函数的参数非常灵活,可以是任意类型的数据,包括其他函数、列表、字典等复杂数据结构。

5. 错误。

  • 解析:return语句可以在函数中的任何位置出现,一旦执行到return语句,函数就会结束并返回指定的值(如果有的话)。

6. 错误。

  • 解析:匿名函数(lambda函数)只能包含一条表达式,不能包含多条语句。

7. 正确。

  • 解析:Python支持函数的嵌套定义,即在一个函数内部定义另一个函数。

8. 错误。

  • 解析:虽然文档字符串(docstring)通常紧跟在函数定义之后,但它不是必须位于第一行。它应该是一个字符串字面量,作为函数定义中的第一个语句。

9. 正确。

  • 解析:*args用于接收任意数量的位置参数,并将它们作为元组传递给函数;**kwargs用于接收任意数量的关键字参数,并将它们作为字典传递给函数。

10. 正确。

  • 解析:递归函数必须有一个或多个基准情形(也称为终止条件),以确保递归能够停止,从而防止无限递归导致的栈溢出错误。

11. 正确。

  • 解析:在Python中,函数的参数在函数被调用时才会被赋予实际的值。

12. 正确。

  • 解析:Python中的函数参数传递默认是按值传递的,但这里的“值”对于可变类型(如列表、字典)来说,是对象的引用(或内存地址)。因此,如果在函数内部修改了可变类型的参数,这些修改会影响到原始对象。但是,从参数传递的角度来看,仍然是按值传递的。

13. 错误。

  • 解析:虽然Python 3.5+引入了类型注解,但这些注解主要用于静态类型检查器和IDE中的代码分析,它们不会强制要求函数的返回值类型与指定的类型一致。

14. 正确。

  • 解析:装饰器是Python中的一个高级特性,它允许你在不修改原有函数代码的情况下,给函数添加新的功能。装饰器本质上是一个函数,它接受一个函数作为参数并返回一个新的函数。

15. 错误。

  • 解析:在Python中,如果在函数内部想要修改全局变量的值,需要使用global关键字来声明该变量是全局的。否则,Python会将其视为一个新的局部变量。

16. 正确。

  • 解析:Python中的函数可以没有参数,这样的函数被称为无参函数。

17. 正确。

  • 解析:函数名需要遵守Python的标识符命名规则,即可以包含字母、数字和下划线,但不能以数字开头,且不能与Python的保留关键字冲突。

18. 正确。

  • 解析:函数内部定义的局部变量在函数外部是不可见的,这是局部作用域的基本规则。

19. 正确。

  • 解析:Python支持函数的嵌套调用,即在一个函数内部可以调用另一个函数。

20. 正确。

  • 解析:使用yield语句的函数被称为生成器函数,它执行时会返回一个生成器对象,该对象支持迭代操作。

21. 正确。

  • 解析:函数的返回值可以是任意类型,包括Python中的基本数据类型(如整数、浮点数、字符串等)和复杂数据类型(如列表、字典、自定义对象等),当然也可以是None

22. 错误。

  • 解析:关键字参数在函数调用时不需要按照函数定义中的顺序提供,它们是通过参数名来指定的。

23. 正确。

  • 解析:locals()函数用于返回当前局部符号表的字典,它包含了当前函数的所有局部变量(包括函数参数和函数内部定义的变量)。

24. 正确。

  • 解析:递归函数需要谨慎使用,因为不恰当的递归可能会导致栈溢出错误。在设计递归函数时,必须确保有明确的基准情形来停止递归。

25. 错误。

  • 解析:虽然匿名函数(lambda函数)通常用于简单的场景,但理论上它们也可以用作装饰器,只要它们满足装饰器的要求(即接受一个函数作为参数并返回一个新的函数)。然而,由于它们的表达能力有限,这种做法并不常见。

26. 正确。

  • 解析:在Python中,*args**kwargs可以同时在函数定义中使用,以接收任意数量的位置参数和关键字参数。

27. 正确。

  • 解析:虽然函数的文档字符串(docstring)是可选的,但它对代码的可读性和可维护性非常有帮助。它通常用于描述函数的功能、参数、返回值和可能的异常等信息。

28. 错误。

  • 解析:在Python中,不可变类型(如整数、浮点数、字符串和元组)的值一旦创建就不能被修改。尝试在函数内部修改通过参数传递的不可变类型的值会导致创建一个新的对象,而原始对象保持不变。

29. 正确。

  • 解析:在Python中,可以使用*操作符来解包列表或元组,作为位置参数传递给函数。这样做可以将列表或元组中的元素作为单独的位置参数传递给函数。

30. 错误。

  • 解析:装饰器通常用于在不修改原始函数定义的情况下给函数添加额外的功能。它们通过接收一个函数并返回一个新的函数来实现这一点。然而,装饰器本身不会改变原始函数的名称、文档字符串等属性,除非在返回的新函数中显式地设置了这些属性。通常,装饰器会保留原始函数的这些属性,或者使用functools.wraps等工具来自动处理这些属性的复制。

31. 正确。

  • 解析:在Python中,函数是第一类对象,这意味着它们可以被赋值给变量、作为参数传递给其他函数、从其他函数返回,以及被包含在数据结构中。

32. 正确。

  • 解析:函数可以像其他对象一样拥有属性。这些属性可以是任意类型的值,并通过标准的点号(.)访问方式来访问。

33. 正确。

  • 解析:闭包是一个函数值,它引用了其外部作用域的一个或多个变量。换句话说,闭包是一个包含了额外作用域的函数。

34. 正确。

  • 解析:globals()函数返回当前全局符号表的字典,这个字典包含了当前模块中定义的所有全局变量和全局作用域中可用的内置名称。

35. 正确。

  • 解析:函数默认参数的值只在函数定义时计算一次,并且在后续的函数调用中保持不变,除非显式地修改了这些参数的值。

36. 错误。

  • 解析:虽然大多数Python的内置函数都是用C语言实现的,并且不能被直接重写或覆盖,但是用户可以通过定义与内置函数同名的函数来“隐藏”它们(在相同的作用域内)。然而,这并不是重写或覆盖内置函数,而是简单的名称冲突。

37. 正确。

  • 解析:map()函数接收两个参数:一个函数和一个可迭代对象。然后,它将对可迭代对象中的每个元素应用该函数,并返回一个包含所有应用结果的迭代器。

38. 正确。

  • 解析:filter()函数接收两个参数:一个函数和一个可迭代对象。这个函数用于判断可迭代对象中的元素是否满足某个条件(即函数返回True)。filter()函数返回一个迭代器,该迭代器只包含满足条件的元素。

39. 错误。

  • 解析:嵌套函数中的内部函数可以在外部函数被调用之前定义,但它通常需要在外部函数的作用域内被调用(除非它被返回或以其他方式被外部函数的作用域之外的代码访问)。然而,这并不要求外部函数必须先被调用;内部函数可以作为返回值返回,或者在外部函数内部的其他地方被调用。

40. 正确。

  • 解析:装饰器是一个接受函数作为参数并返回一个新函数的函数。它不会执行被装饰的函数,而是返回一个新的函数对象,这个新函数在被调用时会执行装饰器内部定义的逻辑,并(通常)会调用原始函数。

41. 错误。

  • 解析:函数参数名在函数体内部是局部的,它们只在该函数的作用域内可见。然而,函数名本身(而不是其参数名)在函数定义之后可以在全局作用域中被访问,前提是该函数没有在嵌套作用域内定义。

42. 错误。

  • 解析:在Python中,每个函数都有一个__name__属性,该属性包含了函数的名称。这是每个函数都必须有的,它对于调试、文档化以及在某些情况下进行反射(reflection)非常有用。

43. 正确。

  • 解析:匿名函数(lambda函数)由于其简洁性,经常被用作map()filter()函数的参数。这些函数期望一个可调用对象作为参数,而lambda函数恰好是一个简洁的可调用对象。

44. 正确。

  • 解析:递归函数必须有一个或多个基准情形(也称为终止条件),以防止无限递归。如果没有基准情形,递归调用将永远不会停止,导致栈溢出错误。

45. 正确。

  • 解析:在Python中,help()函数是一个内置函数,用于获取关于对象(如函数、模块、类等)的帮助信息。对于函数来说,这通常包括函数的文档字符串(如果存在的话)以及函数参数的信息。通过help(function_name),可以方便地获取有关特定函数的帮助信息。

填空题

1. Python中定义函数的关键字是 def

  • 解析:def 是 Python 中定义函数的关键字,后面跟函数名和圆括号内的参数列表。

2. 函数定义的一般形式是 def 函数名(参数列表):,其中def是 define(定义)的缩写。

  • 解析:def 是 define 的缩写,用于定义一个函数。

3. 函数通过关键字 return 返回结果。

  • 解析:return 关键字用于从函数中返回值。

4. 如果函数没有返回值,或者没有执行到 return 语句,则默认返回 None

  • 解析:在 Python 中,如果没有 return 语句或没有返回值被明确指定,函数将隐式返回 None

5. 在Python中,可以通过 locals() 函数获取当前函数的局部变量字典。

  • 解析:locals() 函数返回当前局部符号表的字典,包含当前函数的局部变量。

6. 匿名函数(也称为lambda函数)使用 lambda 关键字定义。

  • 解析:lambda 关键字用于创建匿名函数,即没有名称的函数。

7. *args用于在函数定义中接收 不定 数量的位置参数。

  • 解析:*args 是一个特殊语法,允许函数接收任意数量的位置参数,这些参数被存储在一个名为 args 的元组中。

8. **kwargs用于在函数定义中接收 不定 数量的关键字参数。

  • 解析:**kwargs 是一个特殊语法,允许函数接收任意数量的关键字参数,这些参数被存储在一个名为 kwargs 的字典中。

9. 装饰器是一种特殊的函数,它可以接受一个函数作为 参数,并返回一个新的函数对象。

  • 解析:装饰器是一种高级Python特性,它允许你通过“包装”另一个函数来增强该函数的功能,而不改变其内部实现。

10. Python中,函数的 __doc__ 属性包含了函数的文档字符串。

  • 解析:每个函数都有一个 __doc__ 属性,它包含了函数的文档字符串(如果有的话),这是一个字符串,用于描述函数的功能和用法。

实战题

题目1:计算并返回学生成绩的平均分

题目描述
编写一个Python函数calculate_average,该函数接收一个包含学生分数的列表作为参数,计算这些分数的平均分(保留两位小数),并返回结果。假设分数列表中的每个元素都是有效的浮点数,且列表不为空。

解题思路

  1. 遍历分数列表,将所有分数累加到一个变量中。
  2. 使用列表长度(即学生人数)来除以总分,得到平均分。
  3. 使用round()函数保留两位小数。

答案代码

def calculate_average(scores):  """  计算并返回学生成绩的平均分  参数:  scores (list of float): 包含学生分数的列表  返回:  float: 学生成绩的平均分,保留两位小数  """  # 初始化总分  total_score = 0  # 遍历分数列表  for score in scores:  total_score += score  # 计算平均分并保留两位小数  average_score = round(total_score / len(scores), 2)  return average_score  # 示例运行  
scores = [85.5, 92.0, 78.5, 88.0]  
print(f"学生成绩的平均分为: {calculate_average(scores)}")
#运行结果:学生成绩的平均分为: 86.00

题目2:反转字符串

题目描述
编写一个Python函数reverse_string,该函数接收一个字符串作为参数,返回该字符串的反转版本。

解题思路

  1. 使用字符串切片功能,通过[::-1]来实现字符串的反转。

答案代码

def reverse_string(s):  """  反转字符串  参数:  s (str): 要反转的字符串  返回:  str: 反转后的字符串  """  # 使用字符串切片功能反转字符串  reversed_s = s[::-1]  return reversed_s  # 示例运行  
s = "hello world"  
print(f"原字符串: {s}, 反转后的字符串: {reverse_string(s)}")
# 运行结果:原字符串: hello world, 反转后的字符串: dlrow olleh

题目3:计算斐波那契数列的第10项

题目描述
编写一个Python函数fibonacci,该函数接收一个整数10作为参数,并返回斐波那契数列的第10项。斐波那契数列是一个每项都是前两项和的数列,且第一项和第二项都定义为1。

解题思路

  1. 如果10小于等于1,直接返回1(因为斐波那契数列的前两项都是1)。
  2. 使用循环或递归计算第10项的值。为了简洁和效率,这里我们使用循环。

答案代码

def fibonacci(n):  """  计算斐波那契数列的第10项  参数:  n (int): 斐波那契数列的项数  返回:  int: 斐波那契数列的第10项  """  # 如果n小于等于1,直接返回1  if n <= 1:  return 1  # 初始化前两个数  a, b = 1, 1  # 循环计算第n项  for _ in range(2, n):  a, b = b, a + b  return b  # 示例运行  
n = 10  
print(f"斐波那契数列的第{n}项是: {fibonacci(n)}")
# 运行结果:斐波那契数列的第10项是: 55

题目4:判断字符串是否为回文

题目描述
编写一个Python函数is_palindrome,该函数接收一个字符串作为参数,并判断该字符串是否为回文(即正读和反读都相同的字符串)。如果是回文,则返回True;否则返回False

解题思路

  1. 去除字符串两端的空格,并将字符串转换为小写(或大写),以忽略大小写和首尾空格的差异。
  2. 比较字符串和其反转字符串是否相等。

答案代码

def is_palindrome(s):  """  判断字符串是否为回文  参数:  s (str): 待判断的字符串  返回:  bool: 如果字符串是回文则返回True,否则返回False  """  # 去除字符串两端的空格,并转换为小写  s = s.strip().lower()  # 比较字符串和其反转字符串是否相等  return s == s[::-1]  # 示例运行  
s = "A man, a plan, a canal: Panama"  
print(f"\"{s}\" 是回文吗? {is_palindrome(s)}")  # 另一个示例  
s2 = "racecar"  
print(f"\"{s2}\" 是回文吗? {is_palindrome(s2)}")
# 运行结果
# "A man, a plan, a canal: Panama" 是回文吗? False
# "racecar" 是回文吗? True

题目5:找出列表中的最大和最小值

题目描述
编写一个Python函数find_max_min,该函数接收一个整数列表作为参数,并返回一个包含两个元素的元组,第一个元素是列表中的最大值,第二个元素是列表中的最小值。

整数列表示例:numbers = [3, 1, 4, 1, 5, 9, 2, 6] 

解题思路

  1. 初始化两个变量来分别存储最大值和最小值,可以初始化为列表的第一个元素。
  2. 遍历列表中的每个元素,更新最大值和最小值变量。
  3. 返回包含最大值和最小值的元组。
def find_max_min(numbers):  """  找出列表中的最大和最小值  参数:  numbers (list of int): 整数列表  返回:  tuple: 包含两个元素的元组,第一个元素是最大值,第二个元素是最小值  """  if not numbers:  # 如果列表为空,则返回一个特定的值或抛出异常  return (None, None)  # 初始化最大值和最小值为列表的第一个元素  max_val = min_val = numbers[0]  # 遍历列表中的每个元素  for num in numbers[1:]:  # 从第二个元素开始遍历  if num > max_val:  max_val = num  if num < min_val:  min_val = num  # 返回最大值和最小值的元组  return (max_val, min_val)  # 示例运行  
numbers = [3, 1, 4, 1, 5, 9, 2, 6]  
print(f"列表中的最大值是: {find_max_min(numbers)[0]}, 最小值是: {find_max_min(numbers)[1]}")
# 运行结果:列表中的最大值是: 9, 最小值是: 1

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一次安装Pytorch

1、新版本的Anaconda内置的python版本是3.12&#xff0c; 目前 Windows 上的 PyTorch 仅支持 Python 3.8-3.11;不支持 Python 2.x。 1、创建运行环境 在不创建虚拟环境的情况下&#xff0c;不建议使用最新的Python和Anaconda。 在几次失败后&#xff0c;我使用的是Anaconda3-2…

Java反序列化利用链篇 | CC6链分析(通用版CC链)

文章目录 CC6和CC1之间的区别CC6的调用链构造CC6的payload完成TiedMapEntry.getValue()完成TiedMapEntry.hashCode()完成HashMap.hash()及HashMap.readObject()解决hash()方法提前触发的问题 系列篇其他文章&#xff0c;推荐顺序观看~ Java反序列化利用链篇 | JdbcRowSetImpl利…

【python计算机视觉编程——10.OpenCV】

python计算机视觉编程——10.OpenCV 10.OpenCV10.2 OpenCV基础知识10.2.1 读取和写入图像10.2.2 颜色空间10.2.3 显示图像及结果 10.3 处理视频10.3.1 视频输入10.3.2 将视频读取到NumPy数组中 10.4 跟踪10.4.1 光流10.4.2 Lucas-Kanade算法使用跟踪器使用发生器 10.5 更多示例…

Jmeter进行http接口测试,这一篇就搞定

jmeter-http接口测试脚本 jmeter进行http接口测试的主要步骤&#xff08;1.添加线程组 2.添加http请求 3.在http请求中写入接口的URL&#xff0c;路径&#xff0c;请求方式&#xff0c;参数 4.添加查看结果树 5.调用接口&#xff0c;查看返回值&#xff09; 针对接口添加heade…

2025年最新大数据毕业设计选题-基于Hive分析相关

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向&#xff0c;比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向&#xff0c;比如民宿分析、电商行为分析、天气分析等等。。。…

09年408考研真题解析-计算机网络

[题34]在无噪声情况下&#xff0c;若某通信链路的带宽为3kHz&#xff0c;采用4个相位&#xff0c;每个相位具有4种振幅的QAM调制技术,则该通信链路的最大数据传输速率是&#xff08;B&#xff09; A.12 kbps B.24 kbps C.48 kbps D.96 kbps 解析&#xff…

基于协同过滤+SpringBoot+Vue的剧本杀服务平台系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤JavaSpringBootV…

Java 技巧 如何在IDEA2024 中快速打出System.out.println();

1.基本用法 键入sout回车 回车后变成&#xff1a; 2.打印变量 快速打印变量,以打印变量名为set为例&#xff0c;set.sout回车&#xff0c; 回车后变成

Java 每日一刊(第13期):this super static

“优秀的代码不仅仅是给机器看的&#xff0c;更是给人看的。” 前言 这里是分享 Java 相关内容的专刊&#xff0c;每日一更。 本期将为大家带来以下内容&#xff1a; this 关键字super 关键字static 关键字 this 关键字 this 关键字是 Java 中最常见的关键字之一&#xf…

pg入门18—如何使用pg gis

1. 下载postgre gis镜像 2. 运行镜像 docker run -p 15432:5432 -d -e POSTGRES_PASSWORDAb123456! postgis/postgis:12-3.4-alpine 3. 使用gis # 进入容器&#xff0c;登录pgdocker exec -it bash# 登录数据库psql -U postgres# 创建数据库CREATE DATABASE mygeotest;# 使用…

计算机毕业设计之:教学平台微信小程序(

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Linux —— 多线程

一、本篇重点 1.了解线程概念&#xff0c;理解线程与进程区别与联系 2.理解和学会线程控制相关的接口和操作 3.了解线程分离与线程安全的概念 4.学会线程同步。 5.学会互斥量&#xff0c;条件变量&#xff0c;posix信号量&#xff0c;以及读写锁 6.理解基于读写锁的读者写…

用 HTML + JavaScript DIY 一个渐进式延迟法定退休年龄测算器

为减轻社会和个人因退休年龄变化带来的冲击&#xff0c;近日&#xff0c;全国人民代表大会常务委员会正式发布了关于实施渐进式延迟法定退休年龄的重要决定。 根据该决定&#xff0c;我国将同步启动对男、女职工法定退休年龄的延迟计划。这一调整将采取渐进式的方式进行&#…

第十二周:机器学习笔记

第十二周周报 摘要Abstract机器学习1. Recurrent Neural Network&#xff08;下&#xff09;1.1 RNN的Loss Function怎么求&#xff1f;1.2 RNN奇怪的特性1.3 如何解决 RNN 梯度消失或者爆炸1.4 RNN 其他应用 Pytorch学习1. 现有的网络模型使用以及其修改1.1 在VGG16模型添加Mo…

python-3n+1数链/233

一&#xff1a;3n1数链题目描述 在计算机科学上&#xff0c;有很多类问题是无法解决的&#xff0c;我们称之为不可解决问题。然而&#xff0c;在很多情况下我们并不知道哪一类问题可以解决&#xff0c;哪一类问题不可解决。现在我们就有这样一个问题&#xff0c;问题如下&#…

win11 wsl2安装ubuntu22最快捷方法

操作系统是win11&#xff0c;wsl版本是wsl2&#xff0c;wsl应该不用多介绍了&#xff0c;就是windows上的虚拟机&#xff0c;在wsl上可以很方便的运行Linux系统&#xff0c;性能棒棒的&#xff0c;而且wsl运行的系统和win11主机之间的文件移动是无缝的&#xff0c;就是两个系统…

第二十节:学习Redis缓存数据库实现增删改查(自学Spring boot 3.x的第五天)

这节记录下如何使用redis缓存数据库。 第一步&#xff1a; 先在服务器端安装redis&#xff0c; 下载地址&#xff1a;Releases tporadowski/redis GitHub。 第二步&#xff1a; 安装redis客户端可视化管理软件redisDesktopmanager Redis Desktop Manager - Download 第…

C++ tracy性能分析(二)

环境搭建 项目根目录下 git clone https://github.com/wolfpld/tracy cmake 配置 add_definitions("-DTRACY_ENABLE") add_subdirectory(tracy) include_directories(${TRACY_PUBLIC_DIR}) target_link_libraries(project TracyClient) test.cpp //#define TRACY_C…

完整版:NacosDocker 安装

第一步&#xff1a;先直接通过命令安装 Nacos docker run --name nacos2.2.3 -d -p 8848:8848 -e MODEstandalone f151dab7a111 第二步&#xff1a;创建 Docker 挂载目录 # 创建 log 目录 mkdir -p /root/nacos 第三步&#xff1a;将 Docker 容器的文件复制到挂载目录中 …

[Linux] Linux进程PCB内部信息的深入理解

标题&#xff1a;[Linux] Linux进程PCB内部信息的深入理解 个人主页&#xff1a;水墨不写bug &#xff08;图片来自网络&#xff09; 目录 一.查看进程 二.认识并了解进程的关键信息 I&#xff0c;PID/PPID II&#xff0c;exe III&#xff0c;cwd 三、fork&#xff08;&…