zoukankan      html  css  js  c++  java
  • 函数作用域

    函数的定义:
    Python 定义一个函数使用 def 关键字,语法形式如下:
    def <函数名>(<参数列表>):
    <函数体>
    return <返回值列表>

    参数:
    定义函数时 () 里的参数叫形参(形式参数),它只是一个变量名,供函数体中的代码调用。
    函数调用时,传入 () 里的参数叫实参(实际参数),它是实际的数据,会传递给形参,供函数体执行。
    在定义函数时,如果要求调用者必须传递实参给这个形参,它就是必须参数。
    直接定义在函数名后的 () 中的形参就是必须参数。
    调用时必须传递实参给必须参数,否则报错

    在定义函数时,某些形参有可能在调用时不用接收实参,这种情况可以定义为默认参数。
    在函数名后 () 中,以 参数名=默认值 的形式定义的形参就是必须参数。
    注意:默认参数必须定义在必须参数的后面

    在函数名后的 () 中,在形参前加 * 号可以定义位置不定参,通常它会定义为 *args。
    它用来接收函数调用时,以位置参数传递过来的超过形参数量的多余的实参。
    注意:不订参必须定义在默认参数后面
    位置不定参数会将所有多余的位置实参创建成元组

    在函数名后的 () 中,在形参前加 ** 号可以定义关键字不定参,通常它会定义为 kwargs。
    它用来接收函数调用时,以关键字参数传递过来的超过形参数量的多余的实参。
    注意:不订参必须定义在默认参数后面
    关键字不定参数会将所有多余的关键字实参创建成
    字典**

    在传递实参时,可以通过 * 对迭代对象进行解包。
    def fun(a,b,arg):
    print(a,b,arg)
    ls = [1,2,3,4,5,6]
    fun(
    ls)

    在传递实参时,可以通过 ** 对字典对象进行解包。
    def fun(a,b, kwargs):
    print(a,b,kwargs)
    d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    fun(
    d)

    返回值
    函数还有一个很重要的功能就是返回结果。
    python 中使用 return 关键字来退出函数,返回到函数被调用的地方继续往下执行。
    return 可以将 0 个,1 个,多个函数运算完的结果返回给函数被调用处的变量。
    函数可以没有返回值,也就是说函数中可以没有 return 语句,这时函数返回 None,例如上面我们定义的那些函数。
    return 会将多个返回值以元组的形式返回。

    函数作用域:
    python 是解释型编程语言,解释器在运行一个 python 程序时会在计算机内存中申请一块内存用来运行这个程序。全局变量在这块内存空间中都可以被访问和修改。定义在函数里,的变量就是局部变量,它只在它定义的函数里起作用,一旦函数执行完毕它就不存在了

    Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
    变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4中,分别是:
    L (Local) 局部作用域
    E (Enclosing) 闭包函数外的函数中
    G (Global) 全局作用域
    B (Built-in) 内建作用域
    全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效
    局部作用域:局部名称空间,只能在局部范围内生效
    以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

    直接定义在函数外的变量就是全局变量,在程序运行的全过程有效。
    有时候需要在函数内部修改全局变量。
    使用 globals 关键字可以在函数内部修改全局变量
    a = 1
    def d():
    a += 2
    print(a)

    d()
    此时调用函数会报错,会在函数内部找a的值然后加1赋值给a,但是在函数内部没有定义a,而且函数内部不能修改全局变量a
    有两种办法,加一句global a,就可以在函数内部修改全局变量,第二种就是在内部定义一个变量a,加一句a = 0;

    g_count = 0
    def outer():
    global g_count
    g_count = 2 如果没有global g_count这句,这个变量与上面那个全局的变量是两个不同的变量
    print(g_count)
    c = 12 局部变量
    def inner():
    nonlocal c 内部函数 修改函数外的局部变量
    c = 23
    a = 11 本地作用域
    inner()
    outer()

    使用nonlocal和global关键字:
    1.外部必须有这个变量
    2.在内部函数声明nonlocal变量之前不能再出现同名变量

  • 相关阅读:
    Notes for Advanced Linux Programming 2. Writing Good GNU/Linux Software
    GIT 子模块温习
    Memcached 源码分析——从 main 函数说起
    Zookeeper 初体验之——JAVA实例
    如何使用 indent 美化你的代码
    PGF/TIKZ 资源汇总
    Zookeeper 进阶之——Zookeeper编程示例(如何使用Zookeeper实现屏障Barriers和队列Queues)
    Zookeeper 进阶之——典型应用场景(二)
    如何将 Linux 内核实现的红黑树 rbtree 运用到你的 C 程序中?
    三行代码实现C语言单元测试框架
  • 原文地址:https://www.cnblogs.com/sayi2020/p/13907051.html
Copyright © 2011-2022 走看看