Python⼊门之函数结构——第3关:函数的使⽤范围:Python
作⽤域
任务描述
函数是有使⽤范围的,在⼀个模块中,我们可以定义很多函数和变量,但我们希望有的函数和变量别⼈可以使⽤,有的函数和变量仅仅可以在模块内部使⽤。这就是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())
python新手函数# 请在此添加代码,求两个正整数的最⼩公倍数
#********** Begin *********#
#********** End **********#
#调⽤函数,并输出a,b的最⼩公倍数
print(lcm(a,b))
测试说明
本关的测试⽂件是src/step3/scope.py,测试过程如下:
1. 平台⾃动编译⽣成;
2. 平台运⾏,并以标准输⼊⽅式提供测试输⼊;
3. 平台获取输出,并将其输出与预期输出对⽐。如果⼀致则测试通过,否则测试失败。
以下是平台对src/step3/scope.py的样例测试集:
测试输⼊:
5
6
预期输出:
30
测试输⼊:
8
10
预期输出:
40
测试输⼊:
16
24
预期输出:
48
测试输⼊:
132
214
预期输出:
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))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论