zoukankan      html  css  js  c++  java
  • python基础(十五、变量进阶

    15.变量进阶
    3)局部变量和全局变量
    局部变量是在函数内部定义的变量,只能在函数内部使用
    全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量
    提示:在其他的开发语言中,大多不推荐使用全局变量。全局变量可变范围太大,导致程序不好维护!
    (1)名称空间和作用域
    ①名称空间
    (a)内置名称空间:放解释器内部的一些方法和函数,print input del等
    (b)全局名称空间:在全局py文件中,放置全局变量、函数
    (c)局部名称空间:在函数内部的变量、函数
    ②作用域
    (a)全局作用域:可以随便使用,内置名称空间+全局名称空间 globals()

    (b)局部作用域:在函数内部局部使用,局部名称空间.可以使用locals()查看当前作用域的变量和函数

    (2)局部变量
    ①局部变量的概念
    局部变量是在函数内部定义的变量,只能在函数内部使用
    函数执行结束后,函数内部的局部变量,会被系统回收
    不同的函数,可以定义相同的名字的局部变量,但是彼此之间不会产生影响

    ②局部变量的作用
    在函数内部使用,临时保存函数内部需要使用的数据

    ③局部变量的生命周期
    所谓生命周期就是变量从被创建到被系统回收的过程。
    局部变量在函数执行时才会被创建
    函数执行结束后局部变量被系统回收
    局部变量在生命周期内,可以用来存储函数内部临时使用到的数据

    ④nonlocal可以在函数内部修改外部的局部变量
    在局部,内层函数引入外层函数的局部变量

    nonlocal可以一层一层的往外找到最近的局部变量,但找到最外层的局部变量还没有时会报错,而且不会找到全局变量。

    (3)全局变量
    ①全局变量的概念
    全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量

    函数执行时,使用变量的顺序:
    首先查找函数内部是否存在指定名称的局部变量,如果有,直接使用;
    如果没有,查找函数外部是否存在指定名称的全局变量,如果有,直接使用;
    如果还没有,程序报错!

    ②函数不能直接修改全局变量的引用
    全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量
    提示:在其他的开发语言中,大多不推荐使用全局变量。全局变量可变范围太大,导致程序不好维护!
    在函数内部,可以通过全局变量的引用获取对应的数据
    但是,不允许直接修改全局变量的引用,需要使用赋值语句修改全局变量的值

    注意:只是在函数内部定义了一个局部变量而已,只是变量名相同。在函数内部不能直接修改全局变量的值

    ③在局部修改全局变量global
    如果在函数中需要修改全局变量,需要使用“global”进行声明,使用“global”也可以在函数内部创建全局变量

    ④全局变量定义的位置
    为了保证所有的函数都能够正确使用到全局变量,应该将全局变量定义在其他函数的上方

    注意:由于全局变量name,是在调用函数之后才定义的,在执行函数时,变量还没有定义,所以程序会报错!

    ⑤代码结构示意图如下

    ⑥全局变量命名的建议
    为了避免局部变量和全局变量出现混淆,在定义全局变量时,有些公司会有一些开发要求,例如:全局变量名前应该增加“g_”或者“gl_”的前缀

    4)深浅拷贝
    拷贝的意义:快速创建对象 –> 克隆。切片属于浅拷贝
    (1)浅拷贝
    浅拷贝:只拷贝第一层内容,复制一个表面,更深层次的内容(可变数据),只拷贝一个内存地址。用法:变量.copy() 或 [:]切片
    ①第一种现象(修改不可变元素)

    ②第二种现象(修改可变元素)
    浅拷贝只复制了可变数据的地址,并没有复制真实的数据。因此可变数据发生变化时,两个列表中的数据都会变化

    (2)深拷贝
    用法:
    import copy
    copy.deepcopy(被复制变量)
    深拷贝是将数据完整的复制了一份。

    (3)赋值
    赋值比浅拷贝还要肤浅,赋值不会创建新的数据,只是获取了内存地址

  • 相关阅读:
    在CentOS 8上安装Jitsi Meet
    centos8 安装docker
    [git]error: pack-objects died of signal
    Andorid 11调用系统裁剪
    XCode修改工程名(完美版)
    java分割后台日志
    五分钟搞定WebRTC视频录制
    一分钟教你构建属于你的视频会议SDK
    史上最全的WebRTC服务器技术选型分析
    数据库设计之思考
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14062341.html
Copyright © 2011-2022 走看看