全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

函数进阶专题

专题说明

Python函数不仅是代码组织的工具,更是支持函数式编程的一等公民。本专题从函数作为对象的基本特性出发,深入讲解闭包、lambda、高阶函数、参数机制和functools工具,帮助学习者全面掌握Python函数的高级用法。

学习目标

  1. 理解函数作为一等公民的特性和应用场景
  2. 掌握闭包的概念、原理和常见用途
  3. 熟练使用lambda表达式和高阶函数
  4. 掌握可变参数、关键字参数和参数解包机制
  5. 了解装饰器基本原理和functools工具库

学习内容

本专题涵盖以下核心知识点:

函数作为对象

  • 函数赋值给变量
  • 函数作为参数传递
  • 函数作为返回值
  • 函数存储在数据结构中

闭包与作用域

  • 闭包的定义和形成条件
  • LEGB作用域查找规则
  • 闭包捕获外部变量
  • 常见陷阱:循环变量捕获

lambda表达式

  • lambda语法和基本用法
  • lambda与普通函数的区别
  • lambda在排序和过滤中的应用
  • lambda的局限性

高阶函数

  • map、filter、reduce函数
  • sorted函数的高级用法
  • 自定义高阶函数
  • 函数式编程思维

参数机制

  • 位置参数与关键字参数
  • *args和**kwargs
  • 参数解包
  • 强制关键字参数

functools工具

  • partial偏函数
  • wraps保留函数元信息
  • lru_cache缓存装饰器
  • singledispatch单分派泛型

学习建议

  1. 先掌握函数的基本用法,再学习高级特性
  2. 理解闭包的作用域机制是学习高阶函数的基础
  3. 多使用lambda和高阶函数简化代码
  4. 注意参数解包的语法,避免常见错误

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
判断题

Python中函数是一等公民,可以像普通对象一样赋值给变量、作为参数传递、作为返回值返回,甚至存储在数据结构中。

A

B

2
单选题

以下代码执行后,输出是什么?

Python
def greet():
    return 'hello'

greet_alias = greet
print(greet_alias())
A

'hello'

B

None

C

报错:greet_alias不是函数

D

'greet'

3
填空题

Python函数是________,可以像普通对象一样:赋值给______、作为______传递给其他函数、作为______从函数返回、存储在________中(如列表、字典)。

4
单选题

以下哪种方式可以将函数作为参数传递给另一个函数?

A

apply_func(greet()) 传递函数返回值

B

apply_func(greet) 传递函数对象本身

C

apply_func('greet') 传递函数名字符串

D

以上都可以传递函数

5
判断题

高阶函数是指接收函数作为参数或返回函数作为结果的函数,map、filter、reduce都是Python中的高阶函数。

A

B

6
单选题

执行list(map(lambda x: x * 2, [1, 2, 3]))的结果是:

A

[2, 4, 6]

B

[1, 2, 3]

C
D

[(1, 2), (2, 4), (3, 6)]

7
单选题

执行list(filter(lambda x: x > 5, [1, 3, 6, 8, 2]))的结果是:

A

[6, 8]

B

[True, True, False, False, True]

C

[1, 3, 6, 8, 2]

D

[True, False, True, True, False]

8
单选题

执行reduce(lambda x, y: x + y, [1, 2, 3, 4])的结果是(需从functools导入reduce):

A

[1, 2, 3, 4]

B

10

C

[3, 5, 7]

D

(1, 2, 3, 4)

9
填空题

map(func, iterable)对每个元素应用函数,返回______filter(func, iterable)保留函数返回______的元素,返回______reduce(func, iterable)_________模块导入,将序列______计算得到一个值。三者都是______函数。

10
多选题

以下关于map和filter函数的说法,哪些是正确的?

A

map返回一个列表

B

map返回一个迭代器(惰性计算)

C

filter返回一个迭代器(惰性计算)

D

需要用list()转换才能看到具体结果

E

reduce返回一个单一值

11
判断题

lambda表达式用于创建匿名函数,语法简洁,只能包含单个表达式,不能包含语句块。

A

B

12
单选题

以下哪个lambda表达式语法正确,能计算两个数的乘积?

A

lambda x, y: x * y

B

lambda (x, y): x * y

C

lambda x, y: return x * y

D

def lambda(x, y): x * y

13
填空题

lambda表达式语法:______ ______ ______ ______。lambda只能包含______表达式,不能包含______块和______关键字。lambda常作为________的参数使用。

14
单选题

执行(lambda x, y: x + y)(5, 3)的结果是:

A

8

B

(5, 3)

C

lambda函数对象

D

报错

15
判断题

functools.partial可以固定函数的部分参数,创建一个新的函数,新函数调用时只需传递剩余参数。

A

B

16
单选题

以下代码执行后,结果是什么?

Python
from functools import partial

def multiply(x, y):
    return x * y

double = partial(multiply, y=2)
print(double(5))
A

10

B

5

C

2

D

报错

17
填空题

functools.partial(函数, ________)创建偏函数。偏函数______了部分参数,调用时只需传递______参数。partial常用于简化________设置、适配____________的函数调用。

18
判断题

闭包是指一个函数引用了外部函数的变量,并且该函数可以在外部函数执行后被调用,仍然能够访问这些外部变量。

A

B

19
单选题

以下代码执行后,输出是什么?

Python
def counter():
    count = 0
    def increment():
        count += 1
        return count
    return increment

c = counter()
print(c())
A

1

B

0

C

报错:UnboundLocalError

D

None

20
填空题

闭包是指内部函数______了外部函数的变量,外部函数执行后,内部函数仍能______这些变量。读取外部变量可以直接访问,修改外部变量需要使用________关键字声明。闭包的变量存储在___________属性中。

← 上一个专题 函数基础专题
下一个专题 → 变量与数据类型专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库