python中函数(function)总结二

本节介绍一下关于函数变量的知识
一.全局变量和局部变量
局部变量:
定义在函数内部的变量称为局部变量(函数的形参也是局部变量);
局部变量只能在函数内部使用;
局部变量在函数调用时才能被创建,在函数调用之后会自动销毁.
全局变量:
定义在函数外部,模块内部的变量称为全局变量;
全局变量所有函数都可以直接访问(但函数内部不能将其赋值).
在这里插入图片描述
说明
1. 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个模块范围内访问。
2. 在函数内部赋值语句不会对全局变量造成影响。

二.globals() / locals() 函数
globals() 返回当前全局作用域内变量的字典。
locals() 返回当前局部作用内变量的字典。
在这里插入图片描述

二.函数变量
函数名是变量,它在创建函数时绑定一个函数
在这里插入图片描述
一个函数可以作为另一个函数的实参传递
在这里插入图片描述
函数可以返回另一个函数
在这里插入图片描述
三.函数嵌套定义
函数嵌套定义是指一个函数里用def语句来创建另一个函数的情况。
示例:

def fn_outter():
        print("fn_outter() 被调用")

        def fn_inner():
            print("fn_inner 被调用")

        fn_inner()  #调用嵌套函数fn_nner
        fn_inner()  # 第二次调用
        print('fn_outter() 调用结束')

    fn_outter() # 调用外层函数

四.python3的四个作用域
作用域也叫名字空间,是访问变量时查找变量名的范围空间。
python的四个作用域 LEGB:局部作用域(函数内),外部嵌套函数作用域,函数定义所在模块作用域,python内置模块的作用域。

v = 100  # 全局


def fun1():
    v = 200  # 外部嵌套函数作用域
    print("fun1.v=", v)

    def fun2():
        v = 300  # 局部作用域
        print('fun2.v=', v)
    fun2()  # 调用fun2


fun1()
print("全局变量v=", v)


变量名查找规则:
在访问变量时,先查找本地变量,然后是包裹此函数外部的函数内的变量,之后是全局变量,最后是内建作用域内的变量。

五.global 语句
作用:告诉解释执行器,global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域,也称作全局作用域。
语法:global 变量名1 变量名2,…

v = 100

def fn():
    global v  # 告诉解释执行器, v是全局变量,不是局部变量
    v = 200

fn()
print('v=', v)  # 200

说明

  1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)。
  2. 全局变量在函数内部不经过声明就可以直接访问。
  3. 不能先声明局部变量,再用global声明为全局变量,此做法不附合规则。
  4. global变量列表里的变量名不能出现在函数的形参列表里。

六.nonlocal语句
作用:告诉解释执行器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。
语法:nonlocal 变量名1, 变量名2, …。
在这里插入图片描述
说明
1. nonlocal 语句只能在被嵌套函数的内部进行使用。
2. 对nonlocal变量进行赋值操作,将对外部嵌套函数作用域内的变量进行操作。
3. 当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层变量进行操作。
4. nonlocal语句的变量列表里的变量名,不能出现在此函数形参列表中。

不经一番寒彻骨,怎得梅花扑鼻香~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值