这个主题考什么
- 区分打印一个值和返回一个值。
- 追踪参数、默认值以及局部与全局名字。
- 用 lambda 写短回调,同时不隐藏主要逻辑。
常见错误
- 调用方需要返回值时,函数里却只用了 print。
- 使用 [] 这样的可变默认值,结果发现它跨调用保留。
- 忘记没有 return 的函数会返回 None。
样题
从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。
-
1. 小明写了个打印菜单的函数,里面没有 return 语句。调用后返回什么?
显示答案
答案
C. None解析: 没有 return 的函数仍然会返回值,这个值就是 None。它与打印不同:调用得到 None,而 print 早已把文本送到屏幕。
-
2. 🧋 小明写了个打印菜单的函数,def f(): pass 的返回值?
显示答案
答案
A. None解析: pass 什么也不做,没有 return 语句,调用结果仍是 None。只靠副作用起作用的函数总是返回 None。
-
3. 🧋 小明在函数里修改全局的奶茶总数,以下代码输出什么? count=0 def f(): global count count+=1 f() print(count)
显示答案
答案
B. 1解析: 声明之后函数体能重新绑定模块级的 count,count += 1 把外层的 0 改成 1。没有 global 这一行会抛 UnboundLocalError。
-
4. 函数没有写 return,调用结果是什么?
显示答案
答案
C. None解析: 没有 return 或者只写空 return 的函数,隐式结果都是 None。它不是 0,也不是空字符串。
-
5. 小明函数内定义的临时变量(如一杯奶茶的配料),称为 ___ 变量
显示答案
答案
局部解析: 函数内部赋值的名字存在于那次调用的局部命名空间,调用返回后消失;文件其他地方看不到它,也不会互相污染,调用栈一退就没了。
-
6. 🧋 小明函数内的临时变量,函数内部定义的变量称为 ___ 变量
显示答案
答案
局部解析: 局部变量只能在创建它的函数内访问;所以不同函数可以放心复用 total 这类常见名字而不会冲突,作用域互不干扰。
-
7. 接收任意数量位置参数,横线填什么?
def total(*____): return sum(prices)显示答案
答案
prices解析: 星号把所有多出来的位置参数收进元组 prices;sum() 再求和,参数名前的 * 就是全部语法,名字可以随意取。
-
8. 函数套函数调用,输出什么?
def f(x): return x * 2 print(f(f(3)))显示答案
答案
12解析: 内层 f(3) 先执行得到 6,外层再把它翻倍成 12;参数总在所属调用之前求值,嵌套调用永远从里往外。
-
9. 函数带默认参数,两次调用分别返回什么?
def add_one(x=2): return x + 1 print(add_one(), add_one(5))显示答案
答案
3 6解析: add_one() 使用默认值 2 得到 3,add_one(5) 覆盖默认值得到 6。默认值只在省略实参时生效。
-
10. 闭包保存外层变量,outer(2)(3) 输出多少?
def outer(x): def inner(y): return x + y return inner print(outer(2)(3))显示答案
答案
5解析: outer(2) 返回闭包 inner,它记住了 x=2,再用 3 调用得到 5。outer 返回后 x 仍被闭包保留。
常见问题
print 和 return 有什么区别?
print 把文字写到控制台;return 把值交回调用方,让其他表达式继续使用。
为什么可变默认参数有风险?
默认对象在函数定义时只创建一次,修改会跨调用保留。可以用 None 作为默认值,在函数内部再创建新对象。
继续保持练习节奏。
完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。