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

函数基础专题

专题说明

本专题系统讲解Python函数的核心知识,包括函数的定义与调用、参数传递(位置参数、关键字参数、默认参数、可变参数)、返回值机制、作用域规则、匿名函数(lambda)以及高阶函数的基本概念。

学习目标

  1. 掌握Python函数的定义语法与调用方式
  2. 理解不同参数类型的传递规则与作用域
  3. 熟练使用默认参数、可变参数和关键字参数
  4. 掌握return返回值与多值返回机制
  5. 了解lambda匿名函数与高阶函数的基础用法

学习内容

  • 函数定义:def关键字、函数名、参数列表、函数体
  • 参数传递:位置参数、关键字参数、默认参数、*args、**kwargs
  • 返回值:单值返回、多值返回(元组)、无返回值(None)
  • 作用域:局部变量、全局变量、global与nonlocal关键字
  • 高级特性:lambda匿名函数、函数作为一等对象

学习建议

  1. 先掌握基本函数定义与调用,再深入学习参数传递机制
  2. 重点理解可变参数*args和**kwargs的打包与解包
  3. 注意区分参数默认值使用可变对象的陷阱
  4. 通过实际编码练习掌握函数的返回值与作用域规则

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

📝 配套习题(20 题)

1
多选题

关于Python函数的定义与调用,以下哪些说法是正确的

A

函数使用def关键字定义,可以有参数和返回值

B

函数必须先定义后调用,否则会报错

C

函数名可以作为参数传递给其他函数

D

函数可以返回另一个函数作为结果

E

函数定义时参数名不能重复

F

函数可以没有返回值语句,此时返回None

G

调用函数时必须提供所有定义的参数

H

函数体内可以定义嵌套函数

2
单选题

以下哪个是正确的Python函数定义语法?

A

function add(a, b): return a + b

B

def add(a, b) { return a + b }

C

def add(a, b): return a + b

D

def add(a, b) -> return a + b

3
多选题

关于Python函数的位置参数和关键字参数,以下哪些说法是正确的

A

位置参数按顺序传递,参数值对应参数位置

B

关键字参数按名称传递,可以不按参数顺序

C

关键字参数必须在位置参数之后传递

D

同一个参数不能既用位置方式又用关键字方式传递

E

关键字参数使代码更清晰易读

F

位置参数调用时可以指定参数名变成关键字参数

G

函数定义时的参数顺序影响位置参数调用方式

H

使用关键字参数可以避免参数顺序错误

4
单选题

以下哪个函数调用方式是正确的

A

func(a=1, 2, 3) 关键字参数在位置参数之前

B

func(1, a=2, 3) 关键字参数在中间

C

func(1, 2, a=3) 关键字参数在位置参数之后

D

func(1, a=2, b=3) 同一参数多次传递

5
多选题
A

默认参数在函数定义时指定默认值

B

调用函数时可以省略有默认值的参数

C

默认参数必须在非默认参数之后定义

D

默认参数值在函数定义时求值,只计算一次

E

不应使用可变对象(如列表、字典)作为默认值

F

默认参数可以使用前序参数的值

G

调用时可以覆盖默认参数值

H

默认参数使函数调用更灵活

6
单选题
A

def greet(name, greeting="Hello"): return f"{greeting}, {name}"

B

def add(a, b, c=0): return a + b + c

C

def append_item(item, items=[]): items.append(item); return items

D

def process(data, flag=True): return data if flag else None

7
多选题

关于Python函数的返回值,以下哪些说法是正确的

A

函数使用return语句返回值,无return时返回None

B

函数可以返回多个值,实际上是返回元组

C

多返回值可以用多个变量接收,实际上是元组解包

D

return语句立即结束函数执行

E

函数可以返回任意类型的对象

F

return后面可以没有值,此时返回None

G

函数只能有一个return语句执行

H

多返回值必须用元组语法(return a, b)形式

8
单选题
A

result = func() 使用单个变量接收元组

B

a, b = func() 使用多个变量解包

C

a, b, c = func() 变量数量必须匹配返回值数量

D

以上都是正确方式

9
多选题
A

*args接收任意数量的位置参数,打包为元组

B

args是约定名称,可以使用其他名称如*numbers

C

*args参数之后不能有普通位置参数

D

*args之后可以有默认参数和关键字参数

E

可以用将列表或元组解包传递给args

F

函数内使用args(不带*)访问接收到的参数元组

G

*args可以接收零个参数,此时args为空元组

H

*args只能放在参数列表最后

10
多选题

函数参数中混合使用*args,以下哪些定义是正确的

A

def func(a, b, *args): pass 位置参数后接*args

B

def func(*args, a): pass *args后接位置参数

C

def func(a, *args, b=10): pass *args后接默认参数

D

def func(*args, **kwargs): pass 只有可变参数

E

def func(a, b, *args, **kwargs): pass 完整参数顺序

F

def func(a=1, *args): pass 默认参数在*args之前

G

def func(*args, a, **kwargs): pass *args中间有位置参数

H

def func(a, *args, b, **kwargs): pass *args后有位置参数

11
填空题

在函数定义中,使用!!1*!!符号接收可变数量的位置参数,参数被打包为!!2元组!!。约定使用!!3args!!作为参数名,但可以使用其他名称。在函数体内访问参数时使用!!4args!!(不带*)。在函数调用时,使用!!5*!!符号可以将列表或元组!!6解包!!传递给*args参数。*args之后不能有普通!!7位置!!参数,但可以有!!8默认!!参数或!!9关键字!!参数。

12
多选题

关于Python的关键字可变参数kwargs,以下哪些说法是正确的**?

A

**kwargs接收任意数量的关键字参数,打包为字典

B

kwargs是约定名称,可以使用其他名称如**options

C

**kwargs必须在所有参数定义的最后

D

函数体内使用kwargs(不带**)访问接收到的参数字典

E

可以用将字典解包传递给kwargs

F

**kwargs可以接收零个参数,此时kwargs为空字典

G

**kwargs的键是参数名(字符串),值是传入的值

H

**kwargs可以放在*args之前

13
多选题

函数参数中混合使用kwargs,以下哪些定义是正确的**?

A

def func(a, b, **kwargs): pass 位置参数后接**kwargs

B

def func(a, b=10, **kwargs): pass 默认参数后接**kwargs

C

def func(*args, **kwargs): pass *args和**kwargs组合

D

def func(a, *args, **kwargs): pass 位置参数、*args、**kwargs组合

E

def func(**kwargs, a): pass **kwargs后接位置参数

F

def func(a, **kwargs, b): pass **kwargs中间有参数

G

def func(a=1, b=2, **kwargs): pass 多个默认参数后接**kwargs

H

def func(a, *, b, **kwargs): pass 关键字分隔符和**kwargs

14
填空题

在函数定义中,使用!!1**!!符号接收可变数量的关键字参数,参数被打包为!!2字典!!。约定使用!!3kwargs!!作为参数名,但可以使用其他名称。在函数体内访问参数时使用!!4kwargs!!(不带**)。字典的!!5键!!是参数名(字符串),!!6值!!是传入的参数值。在函数调用时,使用!!7**!!符号可以将字典!!8解包!!传递给**kwargs参数。**kwargs必须放在参数列表!!9最后!!。

15
多选题

Python变量作用域遵循LEGB规则,以下哪些说法是正确的

A

L(Local):函数内部定义的局部变量

B

E(Enclosing):外层嵌套函数的作用域

C

G(Global):模块级别的全局变量

D

B(Built-in):Python内置名称空间

E

变量查找顺序:Local -> Enclosing -> Global -> Built-in

F

函数内可以直接修改全局变量

G

使用global关键字可以在函数内修改全局变量

H

使用nonlocal关键字可以修改外层函数的变量

16
多选题

关于global和nonlocal关键字的使用,以下哪些说法是正确的

A

global用于在函数内声明和修改全局变量

B

nonlocal用于在嵌套函数内修改外层函数的变量

C

global声明的变量如果不存在,会创建新的全局变量

D

nonlocal声明的变量必须已存在于外层作用域

E

global可以在任何地方使用

F

nonlocal只能在嵌套函数内使用

G

一个函数可以同时使用global和nonlocal

H

使用global和nonlocal时要谨慎,避免代码难以理解

17
单选题
A

输出:2, 3

B

输出:3, 3

C

输出:2, 1

D

输出:2, 2

18
填空题

Python变量查找遵循!!1LEGB!!规则,顺序是Local -> !!2Enclosing!! -> !!3Global!! -> !!4Built-in!!。在函数内直接给变量赋值会创建!!5局部!!变量。使用!!6global!!关键字可以声明并修改全局变量。使用!!7nonlocal!!关键字可以修改!!8外层!!函数的变量。global关键字可以!!9创建!!不存在的全局变量,而nonlocal要求变量必须!!10已存在!!于外层作用域。nonlocal只能在!!11嵌套!!函数内使用。

19
多选题
A

递归函数必须有基准条件(Base Case)终止递归

B

每次递归调用必须使问题规模缩小,向基准条件靠近

C

Python默认递归深度限制是1000层

D

可以使用sys.setrecursionlimit()修改递归深度限制

E

递归函数可能导致栈溢出(Stack Overflow)

F

递归比循环效率总是更高

G

递归可以用来解决分治问题,如快速排序

H

递归必须有递归调用自身

20
多选题

以下哪些是经典的递归函数应用场景

A

计算阶乘:n! = n × (n-1)!

B

计算斐波那契数列:F(n) = F(n-1) + F(n-2)

C

二分查找:每次将搜索范围减半

D

快速排序:分治策略排序

E

树遍历:遍历树的节点结构

F

计算最大公约数(GCD):欧几里得算法

G

汉诺塔问题:移动盘子

H

简单的累加求和:不适合用递归

← 上一个专题 元编程专题
下一个专题 → 函数进阶专题

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

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

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

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