在MOOC上,学习了北京理工大学嵩天老师的Python语言程序设计,此为学习笔记记录,备查,备翻阅复习。
函数的定义和作用
- 系统自带函数:python内嵌函数、标准库函数
- 自定义函数
使用def定义函数,python定义函数不需要定义返回类型。
- 形式参数:定义函数时,函数名后面圆括号中的标量,简称形参。只在函数内部有效。
- 实际参数:调用函数时,函数名后面圆括号中的变量,简称“实参”。在函数调用时,实际参数都必须要先初始化。
使用return语句,结束函数调用,并将结果返回给调用者。return语句是可选的,可以出现在函数体的任意位置,如果没有return语句,函数在函数体结束位置将控制权返回给调用方。这也就是其他语言的“过程”。
函数的调用和返回值
函数可以通过返回值传递信息,函数也可以通过参数传递信息。
return语句:程序退出该函数,并返回到函数被调用的地方
无返回值的return语句,等价于 return None
改变参数值的函数
- python的参数是通过值来传递的
- 如果变量是可变对象(如列表 或者 图形对象),返回到调用程序后,该对象会呈现被修改后的状态。
函数与递归
使用函数可以使程序可读性大大增强。
递归的定义:函数定义中使用函数自身的方法。
阶乘的递归定义:n! = n*(n-1)!
递归都有一个基例结尾,如0!=1。构造一个正确的递归函数,需要有一个基例,基例不需要递归。
阶乘函数的代码
def fact(n):
if n == 0:
return 1
else:
return fact(n-1)*n
字符串反转,可以采用递归的方法实现。
def reverse(s):
if s == "":
return s
else:
return reverse(s[1:]) + s[0]
函数实例分析
turtle库
想象在屏幕中间(0,0)处有一只小乌龟,是一个XY坐标系。
绘制一个五角星
from turtle import Turtle
p = Turtle()
p.speed(3)
p.pensize(5)
p.color("black","yellow")
# p.fillcolor("red")
p.begin_fill()
for i in range(5):
p.forward(200)
p.right(144)
p.end_fill()
任务 绘制一棵树
# drawtree.py
from turtle import Turtle, mainloop
def tree(plist, l, a, f):
""" plist is list of pens
l is length of branch
a is half of the angle between 2 branches
f is factor by which branch is shortened
from level to level."""
if l > 5: #
lst = []
for p in plist:
p.forward(l)#沿着当前的方向画画Move the turtle forward by the specified distance, in the direction the turtle is headed.
q = p.clone()#Create and return a clone of the turtle with same position, heading and turtle properties.
p.left(a) #Turn turtle left by angle units
q.right(a)# turn turtle right by angle units, nits are by default degrees, but can be set via the degrees() and radians() functions.
lst.append(p)#将元素增加到列表的最后
lst.append(q)
tree(lst, l*f, a, f)
def main():
p = Turtle()
p.color("green")
p.pensize(5)
#p.setundobuffer(None)
p.hideturtle() #Make the turtle invisible. It’s a good idea to do this while you’re in the middle of doing some complex drawing,
#because hiding the turtle speeds up the drawing observably.
#p.speed(10)
# p.getscreen().tracer(1,0)#Return the TurtleScreen object the turtle is drawing on.
p.speed(10)
#TurtleScreen methods can then be called for that object.
p.left(90)# Turn turtle left by angle units. direction 调整画笔
p.penup() #Pull the pen up – no drawing when moving.
p.goto(0,-200)#Move turtle to an absolute position. If the pen is down, draw line. Do not change the turtle’s orientation.
p.pendown()# Pull the pen down – drawing when moving. 这三条语句是一个组合相当于先把笔收起来再移动到指定位置,再把笔放下开始画
#否则turtle一移动就会自动的把线画出来
#t = tree([p], 200, 65, 0.6375)
t = tree([p], 200, 65, 0.6375)
main()