这个例子主要是用于理解Python的“模块编程思想”。
Python直接翻译是“蟒蛇”的意思,因此,利用Python绘制图形程序绘制一条蟒蛇十分有趣。
实例代码2.1是“Python蟒蛇绘制”代码以及效果,如下:
- #e2.1DrawPython.py
- import turtle
- turtle.setup(650,350,200,200)
- turtle.penup()
- turtle.fd(-250)
- turtle.pendown()
- turtle.pensize(25)
- turtle.pencolor("purple")
- turtle.seth(-40)
- for i in range(4):
- turtle.circle(40,80)
- turtle.circle(-40,80)
- turtle.circle(40, 80/2)
- turtle.fd(40)
- turtle.circle(16,180)
- turtle.fd(40 * 2/3)
实例2.1与实例1.1有两个显著的不同。第一,这个程序没有使用显式的用户输入输出,即没有input()函数和print()函数;第二,这个程序绝大多数代码都是<a>.<b>()形式,代码行中没有赋值语句。
<a>.<b>()是Python编程的一种典型表达形式,它可以表示调用一个对象<a>的方法<b>(),也可以表示调用一个函数库<a>中的函数<b>()。
实例代码2.1中使用了用于绘制图形的turtle库,并在第二行中通过保留字import引用这个函数库。
import turtle
实例代码2.1的第3行到第16行调用了turtle(汉语翻译为“乌龟”)库中的若干函数来绘制蟒蛇图形,所有被调用函数都使用了<a>.<b>()形式。这种通过使用函数库并利用库中函数进行编程的方法是Python语言最重要的特点,称为“模块编程”。
使用import引用函数库有两种方式,但对函数的使用方式略有不同。
第一种引用库函数的方法如以下:
import <库名>
此时,程序可以调用库名函数中的所有函数,使用库中函数的格式如下:
<库名>.<函数名>(<函数参数>)
第二种引用函数库的方法如下:
from <库名> import <函数名,函数名…,函数名>
from <库名> import * #其中,*是通配符,表示所有函数
此时,调用该库的函数时不在需要使用库名,直接使用如下格式:
<函数名>(<函数参数>)
采用第二种库引用方式修改实例代码2.2完成Python蟒蛇绘制,代码如下
- #e2.2DrawPython.py
- from turtle import *
- setup(650,350,200,200)
- penup()
- fd(-250)
- pendown()
- pensize(25)
- pencolor("purple")
- seth(-40)
- for i in range(4):
- circle(40,80)
- circle(-40,80)
- circle(40, 80/2)
- fd(40)
- circle(16,180)
- fd(40 * 2/3)
实例代码2.2和2.1运行结果相同,不同的是调用turtle库中函数时不再采用<a>.<b>()方式,而是直接使用函数名。由于该实例中只用到了turtle库中的steup()、penup()、fd()、pendown()、pensize()、pencolor()、seth()、circle()等8个函数,第2行的import语句也可以写成如下形式:
- from turtle import steup,penup,fd,pendown
- from turtle import pensize,pencolor,seth,circle
l两种函数库引用方式各有优点。第一种采用<a>.<b>()方式调用库中函数,能够显式标明函数来源,在引用较多库时代码可读性更好。第二种利用保留字直接引用库中函数,可以使代码更加简洁,在这种只引用一个库的情况下效果更好。
需要注意的是:第一种引用方式,Python解释器将<a>.<b>整体作为函数名。当采用第二种方式时,Python解释器将<b>作为函数名。这可能产生一种情况,假设用户以及定义了一个函数<b>,库中的函数名<b>将会与用户自定义的函数名冲突。由于要求函数名命名唯一,所以,当函数名冲突时Python解释器会以最近的函数定义为准。为避免可能的命名冲突,最好使用第一种库引用方式,使用<a>.<b>()方式调用库函数。