python入门-函数的使用范围: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())
# 请在此添加代码,求两个正整数的最小公倍数
#********** Begin *********#
#********** End **********#
# 调用函数,并输出a,b的最小公倍数
print(lcm(a,b))

测试说明

本关的测试文件是src/step3/scope.py,测试过程如下:

平台自动编译生成scope.exe;
平台运行scope.exe,并以标准输入方式提供测试输入;
平台获取scope.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step3/scope.py的样例测试集:

测试输入:
5
6
预期输出:
30

测试输入:
8
10
预期输出:
40

测试输入:
16
24
预期输出:
48

测试输入:
132
214
预期输出:
14124
代码

# 输入两个正整数a,b
a = int(input())
b = int(input())

# 请在此添加代码,求两个正整数的最小公倍数
#********** Begin *********#

def lcm(a,b):
    def gcd(a,b):
    
        x = a % b
        while (x != 0):
              a = b
              b = x
              x = a % b
        return b
    c= gcd(a,b)
    d=int(a*b/c)
    return d




#********** End **********#

# 调用函数,并输出a,b的最小公倍数
print(lcm(a,b))


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值