zoukankan      html  css  js  c++  java
  • 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.高内聚低耦合

  • 相关阅读:
    python_Memcached
    python_day10_IO多路复用
    java_list,set,map集合
    python3.0_day9_scoket基础之篇
    redis.conf配置文件详解
    Java_数组
    面向接口编程初识(转)
    SSH三种框架及表示层、业务层和持久层的理解(转)
    解决win10磁盘占用过大的问题(亲测有效)
    ORA-12541:TNS:无监听程序
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/11945522.html
Copyright © 2011-2022 走看看