• 函数和常用模块【day04】:函数参数及调用(二)


    本节内容

    1、为什么要有参数

    2、返回值

    3、有参数函数调用

    一、为什么要有参数?

    无参数实现

    def CPU报警邮件()
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接
    
    def 硬盘报警邮件()
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接
    
    def 内存报警邮件()
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接
     
    while True:
     
        if cpu利用率 > 90%:
            CPU报警邮件()
     
        if 硬盘使用空间 > 90%:
            硬盘报警邮件()
     
        if 内存占用 > 80%:
            内存报警邮件()

    有参数实现

    def 发送邮件(邮件内容)
    
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接
    
     
    while True:
     
        if cpu利用率 > 90%:
            发送邮件("CPU报警了。")
     
        if 硬盘使用空间 > 90%:
            发送邮件("硬盘报警了。")
     
        if 内存占用 > 80%:
            发送邮件("内存报警了。")

    二、返回值

    之前在day3-函数介绍中提到了return关键字,但是那个只是提到,并没有详细的介绍的return关键字的用法,下面我们就来详细的阐述一下。

    1、return作用

      return其实有两个作用:

    需要用一个变量来接受程序结束后返回的结果
    它是作为一个结束符,终止程序运行

    def test():
        print("in the test_1")
        return 0
        print("the end") #结果中没有打印
     
    x = test()
    print(x)
     
    #输出
    in the test_1 #第一次打印
    0 #结果返回值

    注:从上面的代码可以看出,return 0后面的代码就不执行了,只执行return前面的代码;变量x接受了test()函数结束后的返回结果

    2、返回多个值

      上面我们试了返回一个常量值,或者说一个对象值,下面我们来试试,不返回值,或者说返回多个值得情况
    从上面的例子可以看出:

    # __auther__ == luoahong
    
    def test_1():
        print("in the test_1")
    
    def test_2():
        print("in the test_2")
        return 0
    
    def test_3():
        print("in the test_3")
        return 1,"hello",["xiedi","shuaigao"],{"name":"xiedi"}
    
    x = test_1()
    y = test_2()
    z =test_3()
    print(x)
    print(y)
    print(z)
    
    #输出
    in the test_1
    in the test_2
    in the test_3
    None #x的值
    0  #y的值
    (1,"hello",["xiedi","shuaigao"],{"name":"xiedi"}) #z的值 

    没有定义,返回值数=0,返回:None
    只定义了1个返回值,返回值=1 ,返回:定义的那个值,或者说定义的那个object
    定义了2个以上,返回值 > 1,返回:1个元组(tuple)
    提问:这边我们不经意的要问,为什么要有返回值?

    因为我们想要想要这个函数的执行结果,这个执行结果会在后面的程序运行过程中需要用到。

    三、有参数函数调用

     在此之前,我们演示的函数都是没有带参数的,下面我们就来说说带参数的函数。在讲之前,我们先来说一下,什么是形参,什么是实参吧!

    形参:指的是形式参数,是虚拟的,不占用内存空间,形参单元只有被调用的时才分配内存单元
    实参:指的是实际参数,是一个变量,占用内存空间,数据传递单向,实参传给形参,形参不能传给实参
    代码如下:

    1、位置参数

    从上面的例子可以看出,实际参数和形式参数是一一对应的,如果调换位置,x和y被调用的时,位置也会互换,代码如下:
    那有些同学会说,那我多一个或者少一个参数,总归没事了吧!那我看看行不行呢?

    ①多一个参数

    def test(x,y):
        print(x)
        print(y)
    print("--------多一个参数----")
    test(1,2,3)
     
    #输出
    --------多一个参数----
    Traceback (most recent call last):
      File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
        test(1,2,3)
    TypeError: test() takes 2 positional arguments but 3 were given  #test()函数需要传两个实参,你传了三个实参

    ②少一个参数

    def test(x,y):
        print(x)
        print(y)
    print("--------少一个参数----")
    test(1)
     
    #输出
    --------少一个参数----
    Traceback (most recent call last):
      File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
        test(1)
    TypeError: test() missing 1 required positional argument: 'y'  #没有给y参数传实参

    2、关键字参数

     到这边有些小伙伴不经意的要说,像这种位置参数,有点死,我不想这么干,万一我传错了咋办,对吧!OK,没有问题,下面我们就来讲讲关键字传参。

     关键字传参不需要一一对应,只需要你指定你的哪个形参调用哪一个实参即可,代码如下:

    def test(x,y):
        print(x)
        print(y)
     
    print("--------互换前------")
    test(x=1,y=2)
    print("--------互换后------")
    test(y=2,x=1)
     
    #输出
    --------互换前------
    1
    2
    --------互换后------
    1
    2

    但是,这是又有小伙伴要问了,那我可不可以位置参数和关键字参数结合起来用呐?接下来,我们就来探讨一下。

    ①位置参数在前,关键字参数在后

    def test(x,y):
        print(x)
        print(y)
     
    test(1,y=2)
     
    #输出
    1
    2

    我擦这样是可以的,那我试试这种情况,我把后面关键字不传给y,我传给x,代码如下:

    def test(x,y):
        print(x)
        print(y)
     
    test(1,x=2)
     
    #输出
    Traceback (most recent call last):
      File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>
        test(1,x=2)
    TypeError: test() got multiple values for argument 'x' #给x形参传的值过多

    报错的意思是:给形参x传的值过多。这种报错的原因是:实参1已经传给了形参x,后面的x=2又传了一次,所以报错。

    ②关键字在前,位置参数在后

    def test(x,y):
        print(x)
        print(y)
     
    test(y=2,1)
     
    #输出
    File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8
        test(y=2,1)
                ^
    SyntaxError: positional argument follows keyword argument # 关键字参数在位置参数的前面

    我去,看来这样不行。那我位置参数放前面,中间放关键字参数总行了吧!代码如下:

    def test(x,y,z):
        print(x)
        print(y)
     
    test(1,y=2,3)
     
    #输出
     File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8
        test(1,y=2,3)
                  ^
    SyntaxError: positional argument follows keyword argument

    还是一样的错误,我去,那我只能把关键字参数放最后试试!

    def test(x,y,z):
        print(x)
        print(y)
        print(z)
     
    test(1,2,z=3)
     
    #输出
    1
    2
    3

    那我最后两个用关键字参数呐?

    def test(x,y,z):
        print(x)
        print(y)
        print(z)
     
    test(1,z=2,y=3)
     
    #输出
    1
    3
    2

    总结:

    既有关键字,又有位置参数时,是按位置参数的顺序来
    关键字参数是不能写在位置参数的前面的

  • 相关阅读:
    day50——前端简介、标签分类、常用标签
    day46——约束条件、表与表建 关系、修改表的完整语法
    day45——存储引擎、数据类型、约束条件
    day44——存储数据的发展、数据库分类、mysql
    Ⅰ:计算机核心基础
    Ⅶ:基本数据类型及内置方法
    Ⅶ:作业
    Ⅵ:深浅copy
    Ⅵ:流程控制
    Ⅳ:运算符
  • 原文地址:https://www.cnblogs.com/luoahong/p/9889426.html
Copyright © 2020-2023  润新知