python day 9 函数 —实例:七段数码管的绘制

函数

一、函数的理解和定义

1.函数是一段具有特定功能的、可重用的语句组

2.函数是执行特定功能的代码的封装,将函数内部的代码与主体代码分离开

3.输入(实参形参)、处理(语句)、输出(return

4.两个作用:降低编程难度、实现代码复用

5.函数是IPOimport process output

二、def return

1.函数可以有参数,也可以没有参数,当运行函数时,不管有没有返回值,整个函数都会运行一遍,最后如果有返回值,return返回值。Return 0 也表示程序什么都不返回

2.局部变量,就是用来占位的,本身并不是真正的变量,所以即使和全局变量重名,也没有关系。

3.global保留字:在函数内部使用全局变量。很形象:让global 后的变量,变成全球都是使用的,而不仅仅是在函数里面使用的。

4.函数中没有创建列表,却操作了列表,这是列表默认是全局变量,不需要global。但如果创建了,该列表就是局部变量了,局部变量不return出来的话,就被释放了,也就没什么用了。

5.#global 须写在def后的第一行!

三、参数传递

1.即可以是,位置传参,也可以是关键字传参

2.可选参数传递:有默认值的参数(default argument),在用户看来,就是可以输入,也可以不输入直接使用默认值的参数,即可选参数。位置在

3.可变参数传递:*a   参数的数量不确定。也就是说,a是组合数据类型(一般是tuple),是一个可以容纳多个变量的容器。

4.关键参数:传参时,必须使用赋值语句,a =

5.python参数顺序:正常参数(可以有多个)>默认参数>可变参数>关键字参数

(1)所有正常参数,必须在默认参数前面

(2)如果有可变参数,那么默认参数一定会被重新赋值,即使是可变参数,无参数传递进去,这时print(可变参数) 得  ( )  即空元组

(3) 在可变参数后面,一定是关键字参数,需要使用赋值语句传参。

(4)关键字参数也有,可选关键字参数(默认关键字参数),和可变关键字参数(**a)(通常是字典类型)

def io (a,c,b=1,*d,f,g=3,**h):

    print(a,b,c,d,f,g,h)

s = io(2,10,12,f=1,g=2,h=34,i=57,j=23)

print(s)

>>>2 12 10 () 1 2 {'h': 34, 'i': 57, 'j': 23}

四、lambda保留字 函数

1.格式:函数名 = lambda 变量1,变量2, expression

2.例如:f    =  lambda  sr s//r

f(10,3) = 3

3.谨慎使用lambda保留字

(1)Lambda定义的函数,主要用作参数

(2)有一些固定的使用方式

(3)建议使用def

五、实例:七段数码管绘制

1.If True :

Expression1

就是执行expression1   至于为什么不直接写expression1,是因为还有

If False

Expression2

即,在只有两种选择的时候,可以分别使用true false作为分支条件

2. 第一版

import turtle as t

def drawline(draw):

    t.pendown() if draw else t.penup()

    t.fd(40)

    t.right(90)

def drawdigit(digit):

    drawline(True) if digit in [2,3,4,5,6,8,9] else drawline(False)

    drawline(True) if digit in [0,3,4,5,6,7,8,9] else drawline(False)

    drawline(True) if digit in [0,2,3,5,6,8] else drawline(False)

    drawline(True) if digit in [0,1,2,6,8] else drawline(False)

    t.left(90)

    drawline(True) if digit in [0,1,4,5,6,8,9] else drawline(False)

    drawline(True) if digit in [0,2,3,5,6,7,8,9] else drawline(False)

    drawline(True) if digit in [0,2,3,4,7,8,9] else drawline(False)

    t.left(180)

    t.penup()

    t.fd(20)

def drawdate(date):

    for i in date:

        drawdigit(eval(i))

def main():

    t.setup(800,350,200,200)

    t.penup()

    t.fd(-300)

    t.pensize(5)

    drawdate('20191127')

    t.hideturtle()

    t.done()

main()

 

  

3.第二版

import turtle as t

import time

def drawgap():

    t.penup()

    t.fd(5)

def drawline(draw):

    t.pendown() if draw else t.penup()

    t.fd(40)

    t.right(90)

def drawdigit(digit):

    drawgap()

    drawline(True) if digit in [2,3,4,5,6,8,9] else drawline(False)

    drawgap()

    drawline(True) if digit in [0,3,4,5,6,7,8,9] else drawline(False)

    drawgap()

    drawline(True) if digit in [0,2,3,5,6,8,9] else drawline(False)

    drawgap()

    drawline(True) if digit in [0,1,2,6,8] else drawline(False)

    t.left(90)

    drawgap()

    drawline(True) if digit in [0,1,4,5,6,8,9] else drawline(False)

    drawgap()

    drawline(True) if digit in [0,2,3,5,6,7,8,9] else drawline(False)

    drawgap()

    drawline(True) if digit in [0,2,3,4,7,8,9] else drawline(False)

    t.seth(0)

    t.penup()

    t.fd(20)

def drawdate(date):

    for i in date:

        if i == '-':

            t.write('',font=("Arial",18,"normal"))

            t.pencolor('green')

            t.fd(40)

        elif i =='=':

                t.write('',font=("Arial",18,"normal"))

                t.pencolor("blue")

                t.fd(40)

        elif i == '+':

                t.write('',font=("Arial",18,"normal"))

        else:

                drawdigit(eval(i))

def main():

    t.penup()

    t.fd(-300)

    for i in range(10):

        drawdigit(i)

        t.seth(0)

        t.penup()

        t.fd(20)

def main2():

    t.setup(800,350,200,200)

    t.penup()

    t.fd(-350)

    t.pensize(5)

    t.pencolor('red')

    drawdate(time.strftime('%Y-%m=%d+',time.gmtime()))

    t.hideturtle()

    t.done()

main2()

 

六、Thoughts

1.函数:模块化思维,分而治之,“封装”,“接口”

2.规则化思维:不写特定场景下的函数,使用参数控制,让一个函数,能做一类事情,而不是一件事情

3.高内聚低耦合

原文地址:https://www.cnblogs.com/cfqlovem-521/p/11945522.html