10.函数的进阶(1)

1.函数参数的不同数据类型

  • 全局变量:当前python文件中,所有函数都能直接访问的数据
  • 函数参数:将多个函数要使用的数据,通过参数进行传递
name = "dongai"
heroes = ["无双剑姬"]
skills = ["利刃华尔茨"]

def my_func(n, h, s):
    """测试函数"""
    n = "dongdong"
    h = ["荒漠屠夫"]
    s.append("前进喷泉")

my_func(name, heroes, skills)
print(name)      # ①  "dongai"
print(heroes)    # ②  ["无双剑姬"]
print(skills)    # ③  ["利刃华尔茨", "前进喷泉"]

2.命名空间.作用域.变量

  • 当出现了函数,变量声明的位置就发生了变化,不同位置声明的变量,能访问这个变量的范围也出现了限制

(1)命名空间,作用域

  • 命名:起名字.声明.定义的意义
  • 空间:一段代码的范围
  • 命名空间:声明定义了一个变量,这个变量存在的范围,主要是通过命名空间,可以区分不同范围中声明的变量

①内建命名空间

python程序中最大的一个命名空间,通常在解释器运行目标代码的时候,由解释器创建的一个命名空间,负责初始化(第一次赋值、第一次创建)系统环境变量,如exit(),type()

运行目标代码之前,通过解释器加载好系统命名空间,包含了exit()/type()/int/float/str等等各种数据类型或者函数,我们在代码中才可以直接使用这些数据类型或者函数

作用域:一个数据能够作用的范围
内建命名空间–> 内建作用域

②全局命名空间

编写python代码时,创建一个python文件,在python中文件中声明在函数外部的变量,称为全局变量,当前可以声明全局变量的所有位置称为全局命名空间

全局命名空间:声明、定义全局变量的范围。
解释器运行目标代码时,加载全局命名空间,加载该命名空间中的所有全局变量,并且可以通过globals()函数查看当前全局命名空间中的所有全局变量。
本质上globals()就是一个存储了数据的字典。

作用域:一个数据能够作用的范围
全局命名空间–> 全局作用域

③局部命名空间

当python文件中声明函数时,独立出来了一个小的作用范围(函数内部),通常情况下我们将函数内部的空间称为一个局部命名空间

局部命名空间:声明、定义局部变量
解释器运行目标代码时,加载完当前文件之后(加载完全局命名空间之后),加载局部命名空间,初始化局部命名空间中的局部变量。
可以在局部命名空间中,使用关键字locals()查看当前命名空间中的所有数据。

locals():查看当前命名空间中的数据
编写在函数内部:查看局部命名空间中的数据
编写在函数外部:和globals()一样的意义

④命名空间和作用域

命名空间是一个名词,表示了一个可以声明变量的范围
作用域是一个动词,表示了一个变量起作用的范围

解释器运行程序时,命名空间的加载顺序: 内建命名空间-> 全局命名空间-> 局部命名空间
查询使用变量,作用域查询顺序: 内部作用域-> 嵌套作用域-> 全局作用域-> 内建作用域 (LEGB)
Local Enclosins Global Builtin

(2)变量

  • 变量:程序中临时存储数据的容器
  • 出现了函数之后,将变量的声明位置进行了区分:函数外部和函数内部

①全局命名空间

  • 全局变量:声明在全局命名空间中,作用域是当前整个文件范围的变量

②局部命名空间

局部变量:声明在局部命名空间之中,作用域是当前函数范围

③变量的加载和查询顺序

变量的加载顺序.和命名空间的加载顺序一致,优先加载内建->全局->局部
变量在使用的时候查询顺序,和作用域的嵌套关系,优先查询内部->嵌套->全局->内建

④关于上一级命名空间变量的访问

跨作用域修改数据

  • 局部作用域,修改全局作用域的数据:global引入
  • 内部作用域,修改局部作用域的数据:nonlocal引入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值