Python零基础快速入门趣味教程005-参数

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 函数中使用,你不能在其他的地方使用它。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,我们可以自由地控制蜂巢的大小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

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()

参数的传递过程如下:

第 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 用于控制正多边的边长(大小)

1
2
def draw_polygon(sides, length):
pass