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)赋值
    赋值比浅拷贝还要肤浅,赋值不会创建新的数据,只是获取了内存地址

  • 相关阅读:
    〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
    〖Linux〗Kubuntu, the application 'Google Chrome' has requested to open the wallet 'kdewallet'解决方法
    unity, dll is not allowed to be included or could not be found
    android check box 自定义图片
    unity, ios skin crash
    unity, Collider2D.bounds的一个坑
    unity, ContentSizeFitter立即生效
    类里的通用成员函数应声明为static
    unity, Gizmos.DrawMesh一个坑
    直线切割凹多边形
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14062341.html
Copyright © 2011-2022 走看看