任务描述

函数是有使用范围的,在一个模块中,我们可以定义很多函数和变量,但我们希望有的函数和变量别人可以使用,有的函数和变量仅仅可以在模块内部使用。这就是Python作用域的相关问题。

本关的目标就是让读者了解并掌握函数的使用范围,即Python作用域的相关知识。

相关知识

在Python中,正常的函数和变量名是公开的(public),都是可以被直接引用的,比如:abs()abcdir()等。

类似__xxx__这种格式的变量是特殊变量,允许被直接引用,但是会被用作特殊用途,比如__author____name__就是属于特殊变量。hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己编程定义的变量一般不会用这种变量名。

类似_xxx__xxx这种格式的函数和变量就是非公开的(private),不应该被直接引用。

补充:_xxx的函数和变量是protected,我们直接从外部访问不会产生异常。__xxx的函数和变量是private,我们直接从外部访问会报异常,我们要注意前缀符合的区别。

我们要注意用词的区别,我们说的是private函数和变量是“不应该”被直接引用,而不是“不能”被直接引用,这是因为在Python种并没有一种方法可以真正完全限制访问private函数或变量。但是我们为了养成良好的编程习惯,是不应该引用private函数或变量的。

private函数的作用是隐藏函数的内部逻辑,让函数有更好的封装性。

例如:

def _private_1(name):return 'Hello, %s' % namedef _private_2(name):return 'Hi, %s' % namedef 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,测试过程如下:

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

以下是平台对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 = aelse:smaller = bfor i in range(1, smaller + 1):if a % i == 0 and b % i == 0:gcd = ireturn gcddef lcm(a, b):gcd = _gcd(a, b)lcm = int(a * b / gcd)return lcm#********** End **********##调用函数,并输出a,b的最小公倍数
print(lcm(a,b))

Python入门之函数结构——第3关:函数的使用范围:Python作用域相关推荐

  1. python入门到精通需要学多久-史上最详细python学习路线-从入门到精通,只需5个月时间...

    针对Python的初学者,从无到有的Python语言如何入门,主要包括了:Python的简介,如何下载Python,如何安装Python,如何使用终端.Shell,IDE等各种开发环境进行Python ...

  2. (Python入门)学习笔记一,初次接触尝试使用Python——环境搭建与配置

    (Python入门)学习笔记一,初次接触尝试使用Python 早就耳闻Python大名,搞大数据.做人工智能.整机器学习,就得了解Python.之前一直没有去了解,现在由于之前一个项目涉及到一点Pyt ...

  3. 【Python入门教程】第38篇 filter()函数

    本篇我们将会学习使用 Python 内置的 filter() 函数过滤列表中的元素. filter() 函数简介 有时候我们需要对列表中的元素进行遍历并基于指定条件选择某些元素. 加入存在以下列表: ...

  4. Python入门基础知识函数式编程之匿名函数

    今天跟大家分享的是关于学习Python需要了解的入门基础知识.一起看一看吧! 一.Python 简介 Python定义:是一个免费.开源.跨平台.动态.面向对象的编程语言. Python程序的执行(运 ...

  5. python入门的小问题:计算复利函数

    复利计算公式:最终本息和=本金*(1+利率)^年数 def getValue(b,r,n): #函数定义b:本金,r:利率,n:贷款/存款年份amount = b * pow((1 + r * 0.0 ...

  6. Python入门--程序控制-选择结构

    选择和循环 三大流程 顺序结构:按照顺序依次逐行执行代码的过程.自左向右,自上而下. 选择结构:程序按照不同的条件执行不同的处理代码的过程. 循环结构:程序按照指定的条件,如果条件满足就重复指定一端处 ...

  7. python的内置数据结构可变不可变_如何在Python中实现不可变的数据结构?

    问题 您需要在Python中实现不可变的数据结构. 介绍.. 当您要防止多个人同时在并行编程中修改一条数据时,不可变数据结构非常方便.可变数据结构(例如Array)可以随时更改,而可变数据结构则不能更 ...

  8. 《大话之Python入门到爬虫实战》(1)加载Python!获得神器!

    先赞再看,养成习惯!!!你的支持是对我最大帮助!

  9. python入门只需20分钟-史上最详细python学习路线-从入门到精通,只需5个月时间...

    针对Python的初学者,从无到有的Python语言如何入门,主要包括了:Python的简介,如何下载Python,如何安装Python,如何使用终端.Shell,IDE等各种开发环境进行Python ...

最新文章

  1. 不可思议的纯 CSS 实现鼠标跟随效果
  2. 最短路[Dijkstra和堆优化的Dijkstra][Bellman-Ford和SPFA][Floyd最短路](更新中)
  3. debug工具_Jupyter官方神器:可视化 Debug 工具!
  4. mysql 事务 视图 存储过程 触发器
  5. 静态存储区、堆和栈的区别
  6. 机器学习:Multinoulli分布与多项式分布
  7. 使用windows 7加入windows server 2008的域!
  8. 报告 | 斯坦福2019 AI年度报告出炉!700亿美元投入AI,自动驾驶融资最多
  9. java 输出字符集合里的字_Java基础 -- 字符串(格式化输出、正则表达式)(示例代码)...
  10. initializer element is not a compile-time constant
  11. 吴江智慧城市产业化“航母”起航
  12. WeChat 隐私政策
  13. iOS动画——流光文字
  14. mysql 导出 客户端_MySQL 导出数据 导入数据
  15. matlab如何导入大量数据
  16. wps折线图如何画多条折线_wps word如何绘制一有一条线的折线图
  17. python hist函数_Python pandas.DataFrame.hist函数方法的使用
  18. 如何理解范德波尔方程
  19. KDD CUP 2022 风能预测赛题冠军方案分享
  20. 自习室预约小程序有哪些功能?

热门文章

  1. a1a2b1b2c1c2语言级别区分,欧标是什么?怎么分的等级呢?
  2. 图书馆管理系统(二)
  3. NPOS配置及相关应用说明
  4. string::npos的用法
  5. pelican学习笔记(四)——pelican-themes
  6. nginx负载均衡的配置
  7. Lasso regression(稀疏学习,R)
  8. 项目0:泰坦尼克生还者预测
  9. gumbo库应用与按装
  10. 空间坐标乘旋转矩阵_三维空间中的旋转变换与旋转矩阵