函数和模块的使用
1.函数就是一些可以重复工作的代码,搞在一起,省事,
2.关键字是def
格式:
def foo():
#do what you want
#return what you want
3.参数的定义 就是在函数 foo()
的括号里加上想传的参数 比如
def addtest1(a):# 标准玩法
c = a + 8
print(c)
def addtest2(a=2):# 可以赋值初值的玩法
c = a + 8
print(c)
def addtest3(*args):# 可变变量玩法
sum = 0
for val in args:
# do something
4.模块化管理,这个比较好玩,Python中每个文件就代表了一个模块(module),我们在不同的模块中可以有同名的函数,在使用函数的时候我们通过import
关键字导入,例子如下
from day005 import addtestfromanother
import day005 as day005
5.入口函数,加个下面的判断,不然会执行所有的函数,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是“__main__”。
想这个样子
if __name__ == '__main__':
day005code()
6.上代码
#这是一个 可以动的钟
# coding=utf-8
import turtle
from datetime import *
from day005 import addtestfromanother
import day005 as day005
# 抬起画笔,向前运动一段距离放下
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown()
def mkHand(name, length):
# 注册Turtle形状,建立表针Turtle
turtle.reset()
Skip(-length * 0.1)
# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
turtle.begin_poly()
turtle.forward(length * 1.1)
# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
turtle.end_poly()
# 返回最后记录的多边形。
handForm = turtle.get_poly()
turtle.register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
# 重置Turtle指向北
turtle.mode("logo")
# 建立三个表针Turtle并初始化
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand")
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
# 建立输出文字Turtle
printer = turtle.Turtle()
# 隐藏画笔的turtle形状
printer.hideturtle()
printer.penup()
def SetupClock(radius):
# 建立表的外框
turtle.reset()
turtle.pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20)
Skip(radius + 20)
if i == 0:
turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-20)
else:
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-radius - 20)
else:
turtle.dot(5)
Skip(-radius)
turtle.right(6)
def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return "%s %d%d" % (y, m, d)
def Tick():
# 绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)
# 20ms后继续调用tick
turtle.ontimer(Tick, 20)
def functes(x):
def line(y):
return 5*y - x
return line
def addtest():
c = 8
print(c)
def addtest1(a):
c = a + 8
print(c)
def addtest2(a=2):
c = a + 8
print(c)
def addtest3(*args):
sum = 0
for val in args:
sum += val
print(sum)
def main():
#测试闭包,理解下
line = functes(1000)
print(line(1))
#函数的定义,理解一波
addtest()
addtest1(10)
addtest2()
addtest2(3)
addtest3(1,2,3,4,5)
addtestfromanother(111)
day005.addtestfromanother(123)
# 下面就是除了一个好玩的小钟
# 打开/关闭龟动画,并为更新图纸设置延迟。
# turtle.tracer(False)
# Init()
# SetupClock(160)
# turtle.tracer(True)
# Tick()
# turtle.mainloop()
if __name__ == "__main__":
main()
执行结果:
-995
8
18
10
11
15
come form day 005:result 1111
come form day 005:result 1123
有个用turtle做了个电子表的,去掉注释就行了,效果是这样的
image.png
文集传送门 学习python100天
整个学习python100天的目录传送门
无敌分割线
再最后面附上大神的链接传送门
网友评论