• 04-Python函数


    一、简介

    函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。

    函数用关键字def来定义,def关键字之后跟一个函数标识符名称。然后跟一对圆括号,圆括号中可以包括一些变量名,然后以冒号结束。如下所示:

    def 函数名([参数列表]) :
        函数体/若干语句
    def num(a, b):
        return a + b
    print(num(10, 5))

    执行结果为:

    15

    在这个函数中,我们创建了一个名为num的函数,并且给了两个变量a和b,最后返回a和b的和。在调用时,a和b的值不同则返回的和也会改变。

    函数代表一个个任务和功能,使用函数可以减少代码的重复,从而提高效率。

    二、函数的参数

    函数取得的参数是我们提供给函数的值, 一般分为实际参数和形式参数,我们一般叫做实参和形参,形参是在定义函数时使用的参数,形式参数的命名要符合标识符的命名规则。实际参数是调用函数时传递的参数,如下例子中,a和b叫做形式参数,10和20叫做实际参数。

    def num(a, b):
        print(a + b)
    num(10, 20)

    三、全局变量和局部变量

    全局变量:

    1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。

    2. 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。

    3. 全局变量一般做常量使用。

    4. 函数内要改变全局变量的值,使用global 声明一下。

    局部变量:

    1.在函数体中(包含形式参数)声明的变量。

    2.局部变量的引用比全局变量快,优先考虑使用。

    3.如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量。

    a = 20
    def fun():
        a = 2
        print(a)
    fun()
    print(a)

    运行结果:

    在这个函数中调用函数时,第一次输出的a 是局部变量的a,在全局输出时输出的a是全局变量的a。如果要在函数块中使用全局变量则要使用global完成这一功能,如下所示:

    a = 20
    def fun():
        global a
        print(a)
        a = 5
        print(a)
    fun()

    输出结果:

    在第一个变量a中,使用global声明,因此输出结果为全局变量a=20,第二次输出则是局部变量a=5。

    局部变量的查询和访问速度比全局变量快,优先考虑使用,全局变量容易导致不知道变量出错,所以应该尽量少使用全局变量。

    nonlocal 用来声明外层的局部变量。

    global 用来声明全局变量。

    四、命名参数

    按照形参的名称传递参数,称为“命名参数”,也称“关键字参数”。

    def num(a,b,c):
        print(a,b,c)
    num(1,2,3)
    num(a=4, b=6, c=5)

    在上述例子中,num(1,2,3)叫做位置参数,即按照位置来传递参数,num(a=4, b=6, c=5)叫做命名参数。

    五、可变参数

    可变参数指的是“可变数量的参数”。分两种情况:

    1. *param(一个星号),将多个参数收集到一个“元组”对象中。

    2. **param(两个星号),将多个参数收集到一个“字典”对象中。

    def fun(a,b,*c,**d):
    
      print(a,b,c,d)
    
    fun(1,2,3,4,5,six=6,seven=7)

    输出结果:

    在这个函数中,1和2分别传递给a和b,3,4,5则作为元组传递到可变参数c中,6,7以字典形式传递到d中。

    五、LEGB 规则

    Python 在查找“名称”时,是按照LEGB 规则查找的:

    • Local-->Enclosed-->Global-->Built in

    1.Local 指的就是函数或者类的方法内部

    2.Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)

    3.Global 指的是模块中的全局变量

    4.Built in 指的是Python 为自己保留的特殊名称。

    如果某个名称映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域

    (enclosed)进行搜索,如果闭包作用域也没有找到,Python 就会到全局(global)命名空

    间中进行查找,最后会在内建(built-in)命名空间搜索,如果都没有找到,则会报错NameError)。

  • 相关阅读:
    D-Power Products
    B2
    软考知识点梳理--螺旋模型
    软考知识点梳理--敏捷方法
    软考知识点梳理--瀑布模型
    软考知识点梳理--统一软件开发过程RUP
    软考知识点梳理--信息系统生命周期
    软考知识点梳理--信息资源管理
    软考知识点梳理--以太网
    软考知识点梳理--应急储备与管理储备
  • 原文地址:https://www.cnblogs.com/clearlie/p/13181115.html
Copyright © 2020-2023  润新知