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


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

    1 def line_without_moving():
    2     turtle.forward(100)
    3     turtle.backward(100)

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

    1 def line_without_moving(length):
    2     turtle.forward(length)
    3     turtle.backward(length)

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

     1 import turtle
     2  
     3  
     4 def line_without_moving(length):
     5     turtle.forward(length)
     6     turtle.backward(length)
     7  
     8  
     9 line_without_moving(100)
    10 turtle.right(90)
    11 line_without_moving(150)
    12 turtle.right(90)
    13 line_without_moving(200)
    14 turtle.right(90)
    15 line_without_moving(250)
    16  
    17  
    18 turtle.exitonclick()

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

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

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

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

     1 import turtle
     2  
     3 def hexagon():
     4   for i in range(6):
     5       turtle.forward(50)
     6       turtle.left(60)
     7  
     8 def honeycomb():
     9     for i in range (6):
    10         hexagon()
    11         turtle.forward(50)
    12         turtle.right(60)
    13  
    14 honeycomb()
    15  
    16 turtle.exitonclick()

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

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

     1 import turtle
     2  
     3 def hexagon(size):
     4   for i in range(6):
     5       turtle.forward(size)
     6       turtle.left(60)
     7  
     8 def honeycomb(size):
     9     for i in range (6):
    10         hexagon(size)
    11         turtle.forward(size)
    12         turtle.right(60)
    13  
    14 honeycomb(80)
    15  
    16 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 行。

    【练习】

    _images/shapes.png

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

    【提示】

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

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

  • 相关阅读:
    git生成sshkey
    Linux中假设系统丢失了ls命令
    Linux中rpm包管理器
    Linux软件包分类
    VI编辑器
    Java多线程——多线程方法详解
    Maven 无法下载依赖包的解决方法---三步dao!!!
    7. SOFAJRaft源码分析—如何实现一个轻量级的对象池?
    动手造轮子:实现简单的 EventQueue
    java中的string对象深入了解
  • 原文地址:https://www.cnblogs.com/ipaomi/p/7976536.html
Copyright © 2020-2023  润新知