目录
一、课程内容
- 函数的定义
- 函数的创建及调用
- 含单个参数的函数
二、知识点
1、函数的定义及作用
①函数的概念:
函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
②函数的作用:
可以加强代码的复用性,提高程序编写的效率
2、函数的创建及调用
①函数的创建:
在python中,创建函数需要使用def关键字来定义它,后接函数名、参数列表、冒号,从第二行开始是函数体,函数体需要进行缩进,通常是4个英文空格。例如:
def func():
print("hello")
②函数名的明明要求:
a.函数名可以由字母、数字和下划线组成,但不能以数字作为开头
b.函数的名字尽量表达出函数的功能
③空函数
当我们创建函数时,如果没有想好怎么写函数体的代码,可以使用pass语句。pass是跳过的意思,它可以起到占位符的作用
def func1():
pass
④函数的调用
函数定义好了,需要进行调用。如果不调用它,则不会产生任何效果
def func():
print("hello")
func()
输出为:
hello
3、含单个参数的函数
1. 使用Tab键进行多行缩进
- 在大多数文本编辑器和IDE中,选中多行文本后,按下Tab键可以一次性将这些行向右缩进一个制表符宽度。12
- 如果需要减少缩进,可以按下Shift + Tab组合键,将选中的多行文本向左移动一个制表符宽度。
在python中,给函数设置参数非常简单,只需要在函数名后面的“()”中添加上参数,然后在函数体中使用参数即可。
python中设置的参数其实就相当于一个变量,然后直接在函数体中调用变量就可以了。
在python中,定义参数时,不用定义参数的数据类型。
设置参数时,参数时没有实际值的,我们称它为形参;当调用的时候,会另外给它传一个实际的参数,这个参数才会在函数体中生效,我们称它为实参。
例如:
def print_name(name):
print("我的名字是"+name)
print_name("乐乐")
输出为:
我的名字是乐乐
在这个案例中,name是形参,相当于一个变量。当调用时,传入的“乐乐”就是实参。
4、太阳花代码解析
太阳花的代码为(拓展知识):
import turtle
turtle.speed(0)
turtle.up()
turtle.right(90)
turtle.forward(200)
turtle.down()
turtle.right(180)
# 花茎
turtle.pensize(8)
turtle.pencolor("green")
turtle.forward(100)
# 花叶
turtle.setheading(45)
turtle.circle(-120,60)
turtle.setheading(-135)
turtle.circle(-120,60)
turtle.setheading(135)
turtle.circle(120,60)
turtle.setheading(-45)
turtle.circle(120,60)
turtle.setheading(90)
turtle.forward(200)
# 花
turtle.pensize(1)
turtle.pencolor('orange')
turtle.fillcolor('yellow')
turtle.begin_fill()
# 画20个正方形
for i in range(20):
# 绘制正方形
for j in range(4):
turtle.forward(80)
turtle.left(90)
# 每次画完正方形调整画笔角度以免重复
turtle.left(18)
turtle.end_fill()
turtle.hideturtle()
我们把它分解开,画花的部分,我们在以前的课程里学过,代码如下:
# 花
turtle.pensize(1)
turtle.pencolor('orange')
turtle.fillcolor('yellow')
turtle.begin_fill()
# 画20个正方形
for i in range(20):
# 绘制正方形
for j in range(4):
turtle.forward(80)
turtle.left(90)
# 每次画完正方形调整画笔角度以免重复
turtle.left(18)
turtle.end_fill()
画花叶和花茎的代码如下:
import turtle
turtle.speed(0)
turtle.up()
turtle.right(90)
turtle.forward(200)
turtle.down()
turtle.right(180)
# 花茎
turtle.pensize(8)
turtle.pencolor("green")
turtle.forward(100)
# 花叶
turtle.setheading(45)
turtle.circle(-120,60)
turtle.setheading(-135)
turtle.circle(-120,60)
turtle.setheading(135)
turtle.circle(120,60)
turtle.setheading(-45)
turtle.circle(120,60)
turtle.setheading(90)
turtle.forward(200)
我们画太阳花时,画笔移动到一个地点后,开始画太阳花,这是,我们需要把画笔下移,从花的地步开始画:
import turtle
# 画笔向下移动一段距离
turtle.up()
turtle.right(90)
turtle.forward(200)
turtle.down()
turtle.right(180)
此时画笔由A点向下移动,接着画笔会先画花茎的下班部分,以及花叶:
代码为:
# 花茎
turtle.pensize(8)
turtle.pencolor("green")
turtle.forward(100)
# 花叶
turtle.setheading(45)
turtle.circle(-120,60)
turtle.setheading(-135)
turtle.circle(-120,60)
turtle.setheading(135)
turtle.circle(120,60)
turtle.setheading(-45)
turtle.circle(120,60)
这里主要说一下花叶的画法,我们以右边的花叶为例(左边也是同样的原理):
简单来说,花叶就是由两个圆的相交部分组成:
把它们相交的部分取出来,就得到了我们的叶子:
它的实现代码是这样的:
import turtle
turtle.setheading(45)
turtle.circle(-120,60)
turtle.setheading(-135)
turtle.circle(-120,60)
关于这一段代码,我们先来讲解circle():
它的第一个参数是圆的半径;
如果半径是正数,那么turtle会逆时针画圆,
如果是个负数,那么turtle会顺时针画圆,
第二个参数是圆的弧度,例如circle(-120, 60)就是取圆心角为60度的弧长,在turtle的官方文档中把弧长也叫作步长。
这里的半径-120和弧长60同学们是可以随意设置的,只需要花叶两边的大小和弧长一样即可(花叶的两边弧长不一样也能画出花叶,但是花叶就不会对称,而且计算难度会很复杂),它们的主要作用是设置花叶的大小。
接下来我们说一下画花叶的setheading(45)和setheading(-135)。这两个角度的数值是相互关联的,如果设置不正确,那么画的花叶就不会重合在一起。
首先,当画笔准备画花叶时,我们不一定能够控制好画笔的朝向,所以需要用setheading()重置画笔的朝向。
我们知道,花叶和花茎之间肯定是有一定的倾斜角的,这个时候我们需要设置一个角度达到倾斜的效果,这个角度,同学们可以自己设置想要的数值。
接下来我们来说第二个setheading():
这个角度需要根据第一个角度的数值进行设定,具体原理看下图:
这里我们以x和y轴的交点O作为画笔画花叶的起始位置,当画笔setheading(45)之后,会得到直线L1的朝向(L1和水平方向的夹角为45°,L1也是圆2的切线),此时我们进行画圆,会得到圆2,但我们只取60弧度,到达图中有小箭头的位置,这个时候,我们需要画花叶的另一半,依然使用setheading()调整画笔的方向,L2是一条水平线,
如果我们这时候依然使用setheading(45)画第二条弧,那么会得到下面的结果:
很明显,我们需要把第二条弧旋转180°,才能与第一条弧合起来形成一张花叶,所以这里第二个setheading()的角度与第一个是互为补角的关系,由于turtle里面,向左转为正数,向右方旋转为负数,所以如果第一个角设置为45°,那么第二个setheading设置的角度就需要是-135°
四、延伸
python本身内置了一些常用的函数,以便于我们使用。同学们定义自己的函数时,尽量不要与python的内置函数重名,否则会覆盖python的内置功能。
具体每一个内置函数的功能,同学们可以自行查看python的官方文档: