• 05-python中函数的使用


    函数:就是让程序模块化,把具有独立功能的代码块当成一个整体封装成一个函数

    首先打印一个佛主看看:

    print("                            _ooOoo_  ")
    print("                           o8888888o  ")
    print("                           88  .  88  ")
    print("                           (| -_- |)  ")
    print("                            O\ = /O  ")
    print("                        ____/`---'\____  ")
    print("                      .   ' \| |// `.  ")
    print("                       / \||| : |||// \  ")
    print("                     / _||||| -:- |||||- \  ")
    print("                       | | \\\ - /// | |  ")
    print("                     | \_| ''\---/'' | |  ")
    print("                      \ .-\__ `-` ___/-. /  ")
    print("                   ___`. .' /--.--\ `. . __  ")
    print("                ."" '< `.___\_<|>_/___.' >'"".  ")
    print("               | | : `- \`.;`\ _ /`;.`/ - ` : | |  ")
    print("                 \ \ `-. \_ __\ /__ _/ .-` / /  ")
    print("         ======`-.____`-.___\_____/___.-`____.-'======  ")
    print("                            `=---='  ")
    print("  ")
    print("         .............................................  ")
    print("                  佛祖镇楼                  BUG辟易  ")
    print("          佛曰:  ")
    print("                  写字楼里写字间,写字间里程序员;  ")
    print("                  程序人员写程序,又拿程序换酒钱。  ")
    print("                  酒醒只在网上坐,酒醉还来网下眠;  ")
    print("                  酒醉酒醒日复日,网上网下年复年。  ")
    print("                  但愿老死电脑间,不愿鞠躬老板前;  ")
    print("                  奔驰宝马贵者趣,公交自行程序员。  ")
    print("                  别人笑我忒疯癫,我笑自己命太贱;  ")
    print("                  不见满街漂亮妹,哪个归得程序员?")

    那么这个时候我们想打印很多遍佛主的话,总不能一直复制粘贴,所以我们需要定义一个打印佛主函数:

    def print_fozhu():  #首先在开始定义打印佛主的函数,函数名为print_fozhu
        print("                            _ooOoo_  ")
        print("                           o8888888o  ")
        print("                           88  .  88  ")
        print("                           (| -_- |)  ")
        print("                            O\ = /O  ")
        print("                        ____/`---'\____  ")
        print("                      .   ' \| |// `.  ")
        print("                       / \||| : |||// \  ")
        print("                     / _||||| -:- |||||- \  ")
        print("                       | | \\\ - /// | |  ")
        print("                     | \_| ''\---/'' | |  ")
        print("                      \ .-\__ `-` ___/-. /  ")
        print("                   ___`. .' /--.--\ `. . __  ")
        print("                ."" '< `.___\_<|>_/___.' >'"".  ")
        print("               | | : `- \`.;`\ _ /`;.`/ - ` : | |  ")
        print("                 \ \ `-. \_ __\ /__ _/ .-` / /  ")
        print("         ======`-.____`-.___\_____/___.-`____.-'======  ")
        print("                            `=---='  ")
        print("  ")
        print("         .............................................  ")
        print("                  佛祖镇楼                  BUG辟易  ")
        print("          佛曰:  ")
        print("                  写字楼里写字间,写字间里程序员;  ")
        print("                  程序人员写程序,又拿程序换酒钱。  ")
        print("                  酒醒只在网上坐,酒醉还来网下眠;  ")
        print("                  酒醉酒醒日复日,网上网下年复年。  ")
        print("                  但愿老死电脑间,不愿鞠躬老板前;  ")
        print("                  奔驰宝马贵者趣,公交自行程序员。  ")
        print("                  别人笑我忒疯癫,我笑自己命太贱;  ")
        print("                  不见满街漂亮妹,哪个归得程序员?")
    
    print_fozhu()    #然后在下面调用print_fozhu函数
    print_fozhu()

    带有参数的函数

    首先我们来定义一个函数来计算两个数的总和:

    def sum():  #表示定义一个函数,函数名为sum
        a = 20
        b = 30
        sum = a+b
        print("%d+%d=%d"%(a,b,sum))
    
    sum()  #在下面调动这个函数

    这样会不会有点太死板了,我们希望能够从键盘输入a和b去获取这两个数的总和,那么需要怎么做呢?

    def sum(a,b):  #在上面定义搞一个函数,函数名为sum,并且携带两个参数a,b,用来接收的叫做形参
        sum = a+b
        print("%d+%d=%d"%(a,b,sum))
    
    num1 = int(input("第1个值:"))    #input键盘输入的值是字符串类型,需要用int()转换成整形
    num2 = int(input("第2个值:"))
    sum(num1,num2)  #在调用sum函数时,等于把num1和num2传到sum()函数里去,调用时的传的参数叫做实参

    root@test:~/codes# python3 01-带有参数的函数-input.py
    第1个值:    10
    第2个值:50
    10+50=60

    return的作用:所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果

    比如:我给了我的朋友22块钱,让他帮我去买一包烟,然后朋友买完回来了把烟交给我,这个烟就是返回值

    其次,在获取键盘输入时,也是这种道理:

    In [1]: name = input("Name:")
    Name:laowang
    
    In [2]: name
    Out[2]: 'laowang'  #相当于才从键盘获取了一个值,然后拿给了name

    那么,我们现在来举一个例子来说明return的作用:

    def get_wendu():    #这里定义一个获取温度的函数get_wendu
        wendu = 22    #定义一个wendu变量
        print("当前的室温是%d"%wendu)
    
    def get_wendu_huashi():  #定义一个获取华氏温度的函数get_wendu_huashi
        wendu = wendu + 2  #假设华氏温度=温度+2
        print("当前的室温(华氏)是%d"%wendu)
    
    get_wendu_huashi()  #调用刚刚定义的函数,get_wendu_huashi

    让我们看一下运行结果:
    Traceback (most recent call last):
      File "02-获取温度.py", line 10, in <module>
        get_wendu_huashi()
      File "02-获取温度.py", line 7, in get_wendu_huashi
        wendu = wendu + 2
    UnboundLocalError: local variable 'wendu' referenced before assignment  #这句话表示在声明变量wendu之前就已经对其调用,定位到错误的地方了

    让我来解释一下:在函数中定义的变量,只允许在当前函数中使用,在其他函数里不能用,而且函数中不允许直接调用结果那么意思就是在get_wendu中定义的变量wendu,到了get_wendu_huashi中却不认识这个wendu变量

    让我们来看一下修改后的代码:

    def get_wendu():
        wendu = 22
        print("当前的室温是%d"%wendu)
        return wendu  #在这里我们使用了return函数,那么意味着我们可以把这个值、这个结果返回到调用的地方
    
    def get_wendu_huashi(wendu):  #wendu是形参,用来接收的
        wendu = wendu + 2
        print("当前的室温(华氏)是%d"%wendu)
    result = get_wendu()  #return时需要有个容器来把结果存放起来,然后再传入时,把这个结果给存进去
    get_wendu_huashi(result)  #在调用get_wendu_huashi函数时,把result这个变量作为实参给传送到函数里去

    运行结果如下:
    root@test:~/codes# python3 !$
    python3 02-获取温度.py
    当前的室温是22
    当前的室温(华氏)是24

    大功告成.....

    总结:如果在一个函数中有了return,那么就意味着这个函数可以把一个值,一个结果返回到调用的地方,return时需要有个东西把结果存放起来,然后在传入时把这个东西存进去

    如果一个函数想要有多个return,可以写多个return,但是函数一旦运行到return,函数就会结束,如下:

    In [1]: def test():    #定义一个test函数
       ...:     a = 11     #变量a
       ...:     b = 22     #变量b
       ...:     return a  
       ...:     return b
       ...: 
    
    In [2]: a = test()  #调用test函数,并把它的结果赋值给a
    
    In [3]: a
    Out[3]: 11
    
    In [4]: b = test()  #调用test函数,并把他的结果赋值给b
    
    In [5]: b
    Out[5]: 11

    那么为什么a和b的值是一样的呢?我们来看一下流程:

    1.定义了一个test函数

    2.在test函数中定义了两个变量a和b,并分别复制a = 11,b = 22

    3.使用return返回a的值和b的值

    4.调用test函数,并把它赋值给了a

    5.然后开始进入函数,a = 11,b = 22,然后return a,结果赋值给了a,此时的a等于11,程序结束

    6.到了b = test(),进入函数,a = 11,b = 22,然后return a,结果被赋值给了b,此时b等于11,所以a和b的结果是一样的

    为什么呢?因为在函数中,每调用一次函数就从函数从头开始做,可以写多个return,但是当进入函数时,一看见return程序就会结束,所以a和b的结果是一样的了

    修改程序如下:

    In [6]: def test():
       ...:     a = 11
       ...:     b = 22
       ...:     return a,b
       ...: 
    
    In [7]: a,b = test()
    
    In [8]: print(a)
    11
    
    In [9]: print(b)
    22

    函数的类型

    函数可以根据有没有参数,有没有返回值,可以相互结合

    (1)无参数,无返回值

    (2)无参数,有返回值

    (3)有参数,无返回值

    (4)有参数,有返回值

    函数的嵌套使用

    指在一个函数被调用的过程里,又调用了一个函数,举例说明一下:

    def test1():
        pass
    
    def test2():
        print("-----2-1-----")
        print("-----2-2-----")
    
    def test3():
        print("-----3-1-----")
        test2()  #在函数里面调用test2函数
        print("-----3-2-----")
    
    test3()  #调用test3函数

    程序运行结果如下:
    -----3-1-----
    -----2-1-----
    -----2-2-----
    -----3-2----
    def print_line():  #定义一个函数,打印40个*
        print("*"*40)  
    
    def print_5_lines():  #定义一个函数,打印5行
        i = 0
        while i<5:
            print_line()  #又签到调用了print_line函数
            i += 1
    print_5_lines()

    程序运行结果如下:
    root@test:~/codes# python3 04-函数的嵌套调用2.py 
    ****************************************
    ****************************************
    ****************************************
    ****************************************
    ***************************************
  • 相关阅读:
    Hbase王国游记之:Hbase客户端API初体验
    Hbase给初学者的“下马威”
    五分钟轻松了解Hbase面向列的存储
    JsonBuilder初出茅庐
    如何查看laravel门脸类包含方法的源码
    PHP常用数组函数
    Go语言strings包
    PHP获取远程http或ftp文件的md5值
    Git使用详细教程(9):git log
    PHP Iterator迭代对象属性
  • 原文地址:https://www.cnblogs.com/xiaoyafei/p/8540297.html
Copyright © 2020-2023  润新知