Python应用轻松入门
上QQ阅读APP看书,第一时间看更新

2.4 函数

Python支持用户自己定义函数,以实现丰富灵活的各种功能。

1.函数的定义与调用

Python用关键字def定义函数,语法如下:

    def函数名(参数1,参数2...):
            函数体
        return返回1,返回2...

示例代码如下:

    #//第2章/2.11.py
    def zhouchang(a,b):
        zc=2*(a+b)            #计算矩形的周长
        mj=a*b                         #计算矩形的面积
        return zc,mj
    c,d=zhouchang(2,3)                 #调用函数
    print('周长为',c)
    print('面积为',d)
    c,d=zhouchang(5,6)                 #调用函数
    print('周长为',c)
    print('面积为',d)

运行结果如下:

    周长为10
    面积为6
    周长为22
    面积为30

由上可知,自定义函数可以传入多个参数,也可以返回多个结果,多个参数和多个返回值均用逗号分隔。

如果只定义函数而不调用函数,则函数不会被执行。

2.函数参数的传递

函数的参数在定义时可以指定默认值;若调用时没有给参数赋值,则函数采用默认值计算,示例代码如下:

    #//第2章/2.12.py
    def zhouchang(a=2,b=10):
        zc=2*(a+b)            #计算矩形的周长
        mj=a*b                         #计算矩形的面积
        return zc,mj
    c,d=zhouchang()                    #调用
    print('周长为',c)
    c,d=zhouchang(3,4)                 #调用
    print('周长为',c)

运行结果如下:

    周长为24
    周长为 14

如果不需要传递参数,参数则可以省略;如果不需要返回值,return则可以省略,此时返回值为None,示例代码如下:

    def fjx():
        print('*'*30)
    fjx()

运行结果如下:

    ******************************
3.变量的作用域

1)局部变量

局部变量是在函数内定义的变量,只能在函数内部访问,在函数的外部无法访问,示例代码如下:

    #//第2章/2.13.py
    def zhouchang(a=2,b=10):
        zc=2*(a+b)
        print('内部a=',a)
        return zc
    f=zhouchang()
    print('外部a=',a)

运行结果如下:

    内部a=2
    Traceback(most recent call last):
        File"D:/arumenpython/15/ls.py",line 9,in<module>
            print('外部a=',a)
    NameError:name  'a'is not defined

函数的内部变量a被顺利地打印出来,当在函数外部访问a时,退出代码为1,程序报错而退出。

2)全局变量

全局变量是在函数之前定义的变量,无论在函数内部还是在函数外部,变量都可以访问,示例代码如下:

    #//第2章/2.14.py
    a=2
    b=10
    def zhouchang():
        print('内部a=',a)
    f=zhouchang()
    print('外部a=',a)

运行结果如下:

    内部a=2
    外部a=2

如果全局变量和局部变量相同,则在函数内部访问全局变量时需要用global声明,否则在函数内部访问的是局部变量,代码如下:

    #//第2章/2.15.py
    a=2
    def zhouchang():
        #global a
        a=5
        print('内部a=',a)
    f=zhouchang()
    print('外部a=',a)

运行结果如下:

    内部a=5
    外部a=2

由此可见,在函数内部访问变量时先在函数内部查找,当找不到时再去函数外部查找。如果把global a前面的注释去掉,声明a是外部的变量,语句a=5表示把外部变量a由2重新赋值为5,则运行结果如下:

    内部a=5
    外部a=5