任务描述
函数是有使用范围的,在一个模块中,我们可以定义很多函数和变量,但我们希望有的函数和变量别人可以使用,有的函数和变量仅仅可以在模块内部使用。这就是Python作用域的相关问题。
本关的目标就是让读者了解并掌握函数的使用范围,即Python作用域的相关知识。
在Python中,正常的函数和变量名是公开的(public),都是可以被直接引用的,比如:abs()、abc、dir()等。
类似__xxx__这种格式的变量是特殊变量,允许被直接引用,但是会被用作特殊用途,比如__author__、__name__就是属于特殊变量。hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己编程定义的变量一般不会用这种变量名。
类似_xxx和__xxx这种格式的函数和变量就是非公开的(private),不应该被直接引用。
补充:_xxx的函数和变量是protected,我们直接从外部访问不会产生异常。__xxx的函数和变量是private,我们直接从外部访问会报异常,我们要注意前缀符合的区别。
我们要注意用词的区别,我们说的是private函数和变量是“不应该”被直接引用,而不是“不能”被直接引用,这是因为在Python种并没有一种方法可以真正完全限制访问private函数或变量。但是我们为了养成良好的编程习惯,是不应该引用private函数或变量的。
private函数的作用是隐藏函数的内部逻辑,让函数有更好的封装性。
例如:
def _private_1(name):
return \'Hello, %s\' % name
def _private_2(name):
return \'Hi, %s\' % name
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
我们在上述程序块里公开了greeting()函数,greeting()函数需要使用_private_1()和_private_2()函数,读者并不需要知道greeting()函数中的内部实现细节。所以我们可以将内部逻辑用private函数隐藏起来。这是一种十分常用的代码封装的方法。
小结:为了让程序的封装性更好,我们一般都限定函数的使用范围,一般我们把外部需要使用的函数定义为public函数,而把只在内部使用,而外部不需要引用的函数定义成private函数。
本关的编程任务是补全src/step3/scope.py文件的代码,实现相应的功能。具体要求如下:
- 编写程序,功能是求两个正整数的最小公倍数;
- 要求实现方法:先定义一个
private函数_gcd()求两个正整数的最大公约数,再定义public函数lcm()调用_gcd()函数求两个正整数的最小公倍数。 - 调用函数
lcm(),并将输入的两个正整数的最小公倍数输出。
本关涉及的代码文件src/step3/scope.py的代码框架如下:
#coding=utf-8
#输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最小公倍数
#********** Begin *********#
#********** End **********#
#调用函数,并输出a,b的最小公倍数
print(lcm(a,b))
本关的测试文件是src/step3/scope.py,测试过程如下:
- 平台自动编译生成
scope.exe; - 平台运行
scope.exe,并以标准输入方式提供测试输入; - 平台获取
scope.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step3/scope.py的样例测试集:
测试输入:56
预期输出:30
测试输入:810
预期输出:40
测试输入:1624
预期输出:48
测试输入:132214
预期输出:14124
开始你的任务吧,祝你成功!
路程中会遇到很多很多麻烦困难,我们需要承受,更要去解决,俞敏洪说过一句话:坚持下去,不是我们有足够的坚强,而是我们已经无法选择。
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
参考答案
#coding=utf-8
#输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最小公倍数
#********** Begin *********#
def _gcd(a, b):
if a < b:
smaller = a
else:
smaller = b
for i in range(1, smaller + 1):
if a % i == 0 and b % i == 0:
gcd = i
return gcd
def lcm(a, b):
gcd = _gcd(a, b)
lcm = int(a * b / gcd)
return lcm
#********** End **********#
#调用函数,并输出a,b的最小公倍数
print(lcm(a,b))
继续阅读与本文标签相同的文章
-
88%中国员工相信AI超过经理 人见多了就更喜欢狗?
2026-05-18栏目: 教程
-
删库不要跑,我站起来还可以删
2026-05-18栏目: 教程
-
拼硬件真过时了?卡萨帝冰箱乌镇全讲场景
2026-05-18栏目: 教程
-
哈弗F7有AI更便捷 全球最流行的交互方式了解一下
2026-05-18栏目: 教程
-
浙江移动成今年世界互联网大会高级合作伙伴
2026-05-18栏目: 教程
