Python期末考答疑
Question 1
下面代码的输出结果是:______________
n = 2
def f(a):
n = bool(a - 2)
return n
b = f(2)
print(n, b)
A. 2 0
B. False False
C. 2 False
D. 0 False
1. 解析
代码输出结果是 C. 2 False
。
代码解析:
设置变量 n 的值为 2。
定义函数
f(a)
,该函数计算n = bool(a - 2)
。- 如果
a-2
为 0(即 a 为 2),n 的值为 False(因为bool(0)
为 False)。否则,n 的值为 True。
- 如果
调用函数
f(2)
,将返回值赋给变量 b。因为a-2
为 0,所以 n 的值为 False,b 的值也为 False。打印变量 n 和 b。n 的值为 2(在函数外部的全局变量 n),b 的值为 False。
所以,输出结果为 "2 False
",对应选项C。
2. 代码的逐行注释
# 定义一个全局变量 n 并赋值为 2
n = 2
# 定义一个函数 f,接受一个参数 a
def f(a):
# 计算 a-2 的结果,如果 a-2 为 0,则 bool(a-2) 为 False,否则为 True。
# 将计算结果赋值给局部变量 n
n = bool(a - 2)
# 返回局部变量 n 的值
return n
# 调用函数 f 并传入参数 2,将返回值赋给变量 b
# 因为传入的参数 a 为 2,所以 a-2 为 0,bool(0) 为 False,所以 b 的值为 False
b = f(2)
# 打印全局变量 n 和变量 b 的值,输出 "2 False"
print(n, b)
这个代码的主要目的是展示全局变量和局部变量之间的区别。在函数 f 中,局部变量 n 的值依赖于传入的参数 a,而全局变量 n 的值始终保持为 2。最后,print 语句将分别输出全局变量 n 和变量 b 的值,即 "2 False"。
Question 2
下面代码的输出结果是:______________
a = 1
def fun(a):
a = a + 2
return a
print(a, fun(a))
A.1, 1
B.1, 3
C.3, 3
D.3, 1
1. 解析
下面是这段代码的详细解析和注释:
# 定义一个变量 a 并赋值为 1
a = 1
# 定义一个名为 fun 的函数,接受一个参数 a
def fun(a):
# 在函数内部,将参数 a 的值增加 2,并将结果赋值给局部变量 a
a = a + 2
# 返回局部变量 a 的值
return a
# 调用 print 函数,输出全局变量 a 的值(1)和 fun 函数的返回值(传入 a,即 1+2=3)
print(a, fun(a))
这段代码的输出结果是:1 3
在这段代码中,首先定义了一个全局变量 a
并赋值为 1。接着定义了一个名为 fun
的函数,该函数接受一个参数 a
。在函数内部,将参数 a
的值增加 2,并将结果赋值给局部变量 a
。最后,返回局部变量 a
的值。
当我们调用 print(a, fun(a))
时,首先输出全局变量 a
的值,即 1。然后调用 fun
函数并将全局变量 a
传递给它,所以函数内部的局部变量 a
的值为 1 + 2 = 3,函数返回 3。因此,输出结果为 1 3
。
2. 在什么情况下,全局的值会改变?
当你在全局作用域内直接修改全局变量的值,或者在函数内部使用 global
关键字声明该变量为全局变量并修改它时,全局变量的值会改变。下面是一个例子:
# 定义一个全局变量 count 并赋值为 0
count = 0
# 定义一个名为 increment_count 的函数,该函数不接受任何参数
def increment_count():
# 使用 global 关键字声明 count 为全局变量,这样就可以在函数内部修改它的值
global count
# 将全局变量 count 的值加 1
count += 1
# 打印初始的全局变量 count 的值
print("Initial count:", count) # 输出:Initial count: 0
# 调用 increment_count 函数,修改全局变量 count 的值
increment_count()
# 打印修改后的全局变量 count 的值
print("Updated count:", count) # 输出:Updated count: 1
在这个例子中,我们定义了一个全局变量 count
并赋值为 0。然后我们定义了一个名为 increment_count
的函数,该函数使用 global
关键字声明 count
为全局变量。这样,在函数内部就可以修改全局变量 count
的值。我们调用 increment_count
函数将 count
的值加 1,从而改变全局变量的值。最后,我们分别在调用函数前后打印全局变量 count
的值,可以看到全局变量的值已经改变。
Question 3
下面代码的输出结果是:______________
img1 = [12, 34, 56, 78]
img2 = [1, 2, 3, 4, 5]
def modi():
img1 = img2
print(img1)
modi()
print(img1)
A. [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
B. [12, 34, 56, 78]
[1, 2, 3, 4, 5]
C. [12, 34, 56, 78]
[12, 34, 56, 78]
D. [1, 2, 3, 4, 5]
[12, 34, 56, 78]
选项 B 是正确的答案。下面是代码的详细解析和注释:
img1 = [12,34,56,78] # 定义全局变量 img1
img2 = [1,2,3,4,5] # 定义全局变量 img2
def modi():
img1 = img2 # 这里是在函数内部创建了一个局部变量 img1,不会影响全局变量 img1 的值
print(img1) # 打印局部变量 img1 的值,即 [1, 2, 3, 4, 5]
modi() # 调用 modi 函数,输出 [1, 2, 3, 4, 5]
print(img1) # 打印全局变量 img1 的值,即 [12, 34, 56, 78]
输出结果为:
[1, 2, 3, 4, 5]
[12, 34, 56, 78]
在函数 modi()
中,我们对局部变量 img1
进行了赋值,这不会影响全局变量 img1
的值。因此,当我们分别打印 modi()
函数中的局部变量 img1
和全局变量 img1
时,输出结果分别是 [1, 2, 3, 4, 5]
和 [12, 34, 56, 78]
。
函数的全局变量、局部变量的相互关系、相互影响
函数的全局变量和局部变量是 Python 中变量作用域的两个主要类型。它们之间的关系和相互影响主要体现在以下几个方面:
- 变量作用域:
全局变量:全局变量是在函数之外定义的变量,它在整个程序的生命周期内都是可见的。全局变量可以在程序的任何地方被访问,包括在函数内部。
局部变量:局部变量是在函数内部定义的变量,它只在函数内部可见。函数执行完成后,局部变量会被销毁,不能在函数外部访问。
- 作用域规则:
当在函数内部访问一个变量时,Python 首先会在函数的局部作用域查找这个变量。如果在局部作用域找不到这个变量,Python 会在全局作用域查找。如果还是找不到,那么会报错。
- 相互影响:
局部变量与全局变量之间的相互影响主要表现在以下几个方面:
- 如果在函数内部直接给一个全局变量赋值,那么 Python 会认为你在创建一个与全局变量同名的局部变量,而不是修改全局变量的值。这时,全局变量不会受到影响。
- 如果需要在函数内部修改全局变量的值,需要使用
global
关键字声明。这样,你就可以在函数内部直接修改全局变量的值,而不是创建一个局部变量。 - 如果在函数内部访问一个变量,而这个变量既没有在函数内部定义,也没有在全局作用域定义,那么 Python 会报错。
下面举一个例子来说明全局变量和局部变量之间的相互关系和相互影响:
x = 10 # 全局变量
def func1():
x = 5 # 在函数内部创建一个局部变量 x
print("In func1, x =", x) # 打印局部变量 x
def func2():
global x # 声明 x 为全局变量
x = 20 # 修改全局变量 x 的值
print("In func2, x =", x) # 打印全局变量 x
func1() # 调用 func1,输出:In func1, x = 5
func2() # 调用 func2,输出:In func2, x = 20
print("Outside functions, x =", x) # 输出:Outside functions, x = 20
在这个例子中,我们首先定义了一个全局变量 x
。在 func1()
中,我们创建了一个与全局变量同名的局部变量 x
,并打印它。这时,全局变量 x
的值不受影响,因为我们在函数内部创建了一个局部变量 x
。
在 func2()
中,我们使用 global
关键字声明了全局变量 x
,然后修改了它的值。这时,我们在函数内部直接修改了全局变量 x
的值,而不是创建一个局部变量。所以当我们调用 func2()
时,全局变量 x
的值被修改为 20。
最后,我们在函数外部打印全局变量 x
,输出结果为 20,这是因为在 func2()
中我们修改了全局变量 x
的值。
总结一下,全局变量和局部变量之间的相互关系和相互影响主要体现在变量的作用域、作用域规则以及变量值的修改。在函数内部,如果需要修改全局变量的值,需要使用 global
关键字声明;否则,创建一个同名的局部变量不会影响全局变量的值。
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】

AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Linux、Web 全栈」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
