zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    Educational Codeforces Round 85 D. Minimum Euler Cycle(模拟/数学/图)
    Educational Codeforces Round 85 C. Circle of Monsters(贪心)
    NOIP 2017 提高组 DAY1 T1小凯的疑惑(二元一次不定方程)
    Educational Codeforces Round 85 B. Middle Class(排序/贪心/水题)
    Educational Codeforces Round 85 A. Level Statistics(水题)
    IOS中的三大事件
    用Quartz 2D画小黄人
    strong、weak、copy、assign 在命名属性时候怎么用
    用代码生成UINavigationController 与UITabBarController相结合的简单QQ框架(部分)
    Attempting to badge the application icon but haven't received permission from the user to badge the application错误解决办法
  • 原文地址:https://www.cnblogs.com/clearlie/p/13181115.html
Copyright © 2011-2022 走看看