上一个教程中,咪博士带大家学习了函数的使用。例如,line_without_moving 函数,可以让海龟先画出一条线段,然后再回来起点。

 def line_without_moving():
turtle.forward(100)
turtle.backward(100)

但是,这个函数还是有一些局限性的。譬如,海龟所画线段的长度是固定的,这样就显得不够灵活。那么有什么办法,让函数变得更灵活一些呢?答案就是使用参数。

 def line_without_moving(length):
turtle.forward(length)
turtle.backward(length)

对比前后 2 段代码,新版的 line_without_moving 在函数声明的地方(第 1 行),在小括号里面写上了 length;又将函数体中(第 2, 3 行)的数字 100 替换成 length。这里的 length 就称为函数的参数,我们在函数调用时,可以向函数参数传递不同的值,这样函数体中用到 length 参数的地方,也就间接地用到我们提供的值啦。

 import turtle

 def line_without_moving(length):
turtle.forward(length)
turtle.backward(length) line_without_moving(100)
turtle.right(90)
line_without_moving(150)
turtle.right(90)
line_without_moving(200)
turtle.right(90)
line_without_moving(250) turtle.exitonclick()

运行上面这段画十字型的代码,我们看到构成十字型的 4 条线段长短不一。这是因为我们在调用 line_without_moving 函数时,使用了不同的参数(第 9, 11, 13, 15 行)。

关于函数参数,咪博士要提醒大家的是,函数参数只能在本函数内部(即本函数体中)使用。函数之外,函数参数就无效了。例如,函数 line_without_moving 的参数 length 就只能在 line_without_moving 函数中使用,你不能在其他的地方使用它。

还记得上个教程中,咪博士给大家留的那个画蜂巢的作业吗?聪明的你,是不是已经画出来了呢?

下面是咪博士的代码,代大家参考。

 import turtle

 def hexagon():
for i in range(6):
turtle.forward(50)
turtle.left(60) def honeycomb():
for i in range (6):
hexagon()
turtle.forward(50)
turtle.right(60) honeycomb() turtle.exitonclick()

现在,蜂巢的大小的固定的。使用这节课的知识,通过函数参数,我们可以很方便地控制蜂巢的大小。

下面是咪博士改进后的代码。通过参数 size,我们可以自由地控制蜂巢的大小。

 import turtle

 def hexagon(size):
for i in range(6):
turtle.forward(size)
turtle.left(60) def honeycomb(size):
for i in range (6):
hexagon(size)
turtle.forward(size)
turtle.right(60) honeycomb(80) turtle.exitonclick()

这里我们将六边形的边长(参数 size)设置为 80,让蜂巢变得更大一些。

参数的传递过程如下:

  • 第 14 行,我们在调用函数 honeycomb  时,将 80 传递给了 honeycomb 的参数 size
  • 函数 honeycomb 接受了 80 这个参数值(第 8 行),因此函数 honeycomb 中,所有使用到参数 size 的地方(第 10, 11 行),都得到了 80 这个值
  • 函数 honeycomb 中,又将 80 这个值传递给被调用的函数,第 10 传递给函数 hexagon, 第 11 行传递给函数 turtle.forward
  • 函数 hexagon 接受了 80 个参数值(第 3 行),因此函数 hexagon 中,所有使用到参数 size 的地方(第 5 行),都得到了 80 这个值
  • ……

这里,咪博士要提醒大家的是:函数 hexagon 和 honeycomb 中都有参数 size,这 2 个 size 虽然同名,而且在参数传递的过程中,都被赋予相同的值(80),但它们不是同一个参数!hexagon 中的参数 size,其作用域(即有效范围)是第 3-6 行;honeycomb 中的参数 size,其作用域是第 8-12 行。

【练习】

尝试编写一个带参数的函数,实现任意正多边形的绘制

【提示】

  • 设计一个名为 draw_polygon 的函数来绘制任意正多边形
  • draw_polygon 接受 2 个参数 sides 和 length(多个参数之间用英文逗号分隔)
  • sides 用于控制正多边形的边数(内角)
  • length 用于控制正多边的边长(大小)
 def draw_polygon(sides, length):
pass

原文链接:http://www.ipaomi.com/2017/11/22/python-零基础-快速入门-趣味教程-咪博士-海龟绘图-turtle-5-参/

Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 5. 参数的更多相关文章

  1. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环

    条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...

  2. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件

    前面的教程中,我们已经可以让小海龟绘制出各种图形了.但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的.这一节中,咪博士将教大家如何让海龟响应用户的输入. im ...

  3. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数

    什么样的程序员才是优秀的程序员?咪博士认为“慵懒”的程序员才是真正优秀的程序员.听起来不合逻辑?真正优秀的程序员知道如何高效地工作,而不是用不止境的加班来完成工作任务.函数便是程序员高效工作的利器之一 ...

  4. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环

    在前面的教程中,咪博士留了一道练习题给大家—-画正方形,相信聪明的你应该已经画出来了. 下面是咪博士实现的代码. 是不是跟你的代码很像呢? import turtle turtle.forward(2 ...

  5. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量

    大家在中学就已经学过变量的概念了.例如:我们令 x = 100,则可以推出 x*2 = 200 试试下面这段 Python 代码 import turtle turtle.shape("tu ...

  6. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友

    Python (Windows 下) 自带了一个非常有趣的 海龟绘图程序 (turtle),它是本系列课程的主角. 在 PyCharm 中,新建一个项目,然后在代码编辑器中输入 import turt ...

  7. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作

    一.关于 Python Python 是全球使用人数增长最快的编程语言!它易于入门.功能强大,从 Web 后端 到 数据分析.人工智能,到处都能看到 Python 的身影. Python 有两个主要的 ...

  8. Python 零基础快速入门!

    “人生苦短,我学python”是编程届的名言.用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言.拥有了某一个语言的功底,再来学习另外一种语言应该是十分快速的.编程理念都 ...

  9. 序言 - PHP零基础快速入门

    我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...

随机推荐

  1. <转>大型分布式网站术语浅析

    夜半睡起看书,看到一篇关于分布式网站性能优化术语的文章,个人觉得不错,分享出来... 原文地址:大型分布式网站术语分析 一.I/O优化 1.增加缓存,减少磁盘的访问次数. 2.优化磁盘的管理系统,设计 ...

  2. node通过http.request向其他服务器上传文件

    function upload(callback) { let boundaryKey = '----' + new Date().getTime(); // 用于标识请求数据段 let option ...

  3. C++模板的特化

    C++类模板的三种特化,讲得比较全面 By SmartPtr(http://www.cppblog.com/SmartPtr/) 针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型(全特化) ...

  4. ASP.NET的生命周期

    我主要参考了这些文章 ASP.NET应用程序与页面生命周期, IIS处理Asp.net请求和 Asp.net页面生命周期 asp.net页面的生命周期 页面生命周期开始 (一)页面生命周期的主要阶段包 ...

  5. NoSql的三大基石:CAP理论&BASE&最终一致性

    关系型数据库的局限 NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战: 1.高并发 一个最典型的就是电商网站,例如双11, ...

  6. Java Mongo 自定义序列化笔记

    从insert方法入手 1. org.springframework.data.mongodb.repository.support.SimpleMongoRepository.java   inse ...

  7. Ceph分布式存储集群-硬件选择

    在规划Ceph分布式存储集群环境的时候,对硬件的选择很重要,这关乎整个Ceph集群的性能,下面梳理到一些硬件的选择标准,可供参考: 1)CPU选择Ceph metadata server会动态的重新分 ...

  8. Spring RPC 入门学习(2)-获取Map对象

    Spring RPC传递Map用例编写 1. 新建RPC接口类 package com.cvicse.ump.rpc.interfaceDefine; import java.util.Map; pu ...

  9. 002-打开文件管理规范-20190406.bat

    rem 002-打开文件管理规范-20190406.bat start /max https://www.cnblogs.com/delphixx/p/10652763.htmlcopy %~0 C: ...

  10. Web系统页面打印技术实现与分析

    1 Web页面打印概述应用WEB化,不论对开发商,还是对用户来说,实在是一种很经济的选择,因为基于WEB的应用,客户端的规则很简单,容易学习,容易维护,容易发布.在WEB系统中,打印的确是个烦人的问题 ...