Python语言程序设计MOOC-05周 函数

2020-06-21

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