• Day04-Python函数的定义和使用


    简介

    此系列主要记录若干年前学习Python的心路历程,本文为第四章Python函数的定义和使用

    函数的定义和使用:

    定义

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

    使用方式:

    def <函数名>(<参数(0个或多个)>):
        <函数体>
        return <返回值>
    
    • 1
    • 2
    • 3

    例如:

    #求n的阶乘
    def cal(N):
        ans = 1
        for i in range(1,N+1):
            ans *= i
        return ans
    n = eval(input("请输入一个整数:"))
    print("{}的阶乘为{}".format(n,cal(n)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    函数中的可选参数:

    使用方式:

    def <函数名> (<非可选参数> , <可选参数>): #非可选参数一定要放在可选参数之前
        <函数体>
        return <返回值>
    
    • 1
    • 2
    • 3

    在上述代码中进行更改,例如:

    #计算N的阶乘整除m,如果函数中不传入参数m,那么m默认为1,所以将m称为可选参数
    def cal(N,m = 1):
        ans = 1
        for i in range(1,N+1):
            ans *= i
        return ans // m
    n,m = eval(input("请分别输入两个整数:(用逗号隔开)"))
    print("结果为{}".format(cal(n,m)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    函数中的可变参数:

    使用方式:

    # 这与C/C++中的数组传地址有些类似,*参数可以类比于传入一个首地址
    def <函数名> (<参数> , *参数): 
        <函数体>
        return <返回值>
    
    • 1
    • 2
    • 3
    • 4

    例如:

    #计算n的阶乘然后再分成与1,2,3,4相乘
    #方法1:
    def cal(N,*m):
        ans = 1
        for i in range(1,N+1):
            ans *= i
        for i in range(len(m)):
            ans *= m[i]
        return ans
    n= eval(input("请输入一个整数:"))
    print("结果为{}".format(cal(n,1,2,3,4)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    #方法2:
    def cal(N,*m):
        ans = 1
        for i in range(1,N+1):
            ans *= i
        for i in m:
            ans *= i
        return ans
    n= eval(input("请输入一个整数:"))
    print("结果为{}".format(cal(n,1,2,3,4)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    函数的返回值:

    return保留字用来传递返回值,函数可以有返回值也可以没有返回值,return 可以传递0个返回值,也可以传递多个返回值
    例如:

    #计算n!,n! * m , n! / m
    def cal(N , M = 1):
        ans = 1
        for i in range(1,N+1):
            ans *= i
        return ans , ans * M , ans // M
    n , m = eval(input("请分别输入两个整数:(用逗号隔开)"))
    a,b,c = cal(n,m)
    print("{}! = {},{}! * {} = {},{}! / {} = {}".format(n,a,n,m,b,n,m,c))
    #输入5,2对应输出结果为:5! = 120,5! * 2 = 240,5!/2 = 60
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    局部变量和全局变量:

    局部变量

    函数内部使用变量叫做局部变量

    全局变量

    函数外部使用变量酒窖全局变量
    Tips:全局变量和局部变量即使名字是相同的也是不同的变量
    例如:

    #可以看到有两个ans变量,但输出结果为3628800 50,所以全局变量和局部变量即使名字一样但也是不同的变量
    n,ans = 10,50
    def cal(n):
        ans = 1
        for i in range(1,n+1):
            ans *= i
        return ans
    print(cal(n),ans)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果想要在函数中使用全局变量,我们可以使用global保留字声明,例如:

    n,ans = 10,10
    def cal(n):
        global ans      #这里的ans就是10
        for i in range(1,n+1):
            ans *= i
        return ans
    print(cal(n),ans)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    -局部变量为组合数据类型且未创建,等同于全局变量
    例如:

    ls = ["F","f"]
    def func(a):
        ls.append(a)
    func("c")
    print(ls)
    #输出结果为:["F","f","c"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    lambda函数

    使用方式:

    <函数名> = lambda <参数>: <表达式>
    例如:

    f = lambda x,y : x + y
    print(f(10,20))
    #输出结果为30
    
    • 1
    • 2
    • 3

    实例:

    #七段数码管
    import turtle as t
    import time as ti
    def drawline(draw):
        t.pendown() if draw else t.penup()
        t.fd(40)
        t.right(90)
    def init(n):
        t.penup()
        t.fd(n)
    def drawdigit(digit):
        drawline(True) if digit in [2,3,4,5,6,8,9] else drawline(False)
        drawline(True) if digit in [0,1,3,4,5,6,7,8,9] else drawline(False)
        drawline(True) if digit in [0,2,3,5,6,8,9] else drawline(False)
        drawline(True) if digit in [0,2,6,8] else drawline(False)
        t.left(90)
        drawline(True) if digit in [0,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,1,2,3,4,7,8,9] else drawline(False)
        t.left(180)
        init(15)
    def drawdata(s):
        t.pencolor("red")
        for c in s:
            if c == '-':
                t.write("年",font = ("Arial" , 25 , "normal"))
                t.pencolor("green")
                t.fd(60)
            elif c == '=':
                t.write("月",font = ("Arial" , 25 , "normal"))
                t.pencolor("blue")
                t.fd(60)
            elif c == '+':
                t.write("日",font = ("Arial" , 25 , "normal"))
            else:
                drawdigit(eval(c))
                
    def main():
        t.setup(1000,350,200,200)
        t.hideturtle()
        t.speed(0)
        s = ti.strftime('%Y-%m=%d+',ti.gmtime())
        init(-300)
        t.pensize(5)
        drawdata(s)
        t.done()
        
    main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
  • 相关阅读:
    「UG/NX」Block UI 从列表选择部件SelectPartFromList
    平衡二叉树c语言版
    使用 Python 发送带附件的电子邮件教程
    RocketMQ(4.9.4)学习笔记 - 安装部署
    Linux 基础指令
    SpringSecurity 认证实战
    mysql 常见锁的类型
    前端传字符串的开始时间和 结束时间,数据库时间字段是 timestamp,Java 代码如何写
    【WSN定位】基于matlab灰狼算法优化无线传感器非测距定位【含Matlab源码 2008期】
    MKcms漏洞合集
  • 原文地址:https://blog.csdn.net/qq_43591839/article/details/126826119