开发者社区> JoanKing> 正文

Python基础知识11: 变量的进阶

简介: Python基础知识11: 变量的进阶
+关注继续查看

一、主要内容



  • 1.1、变量的引用
  • 1.2、可变和不可变类型
  • 1.3、局部变量和全局变量


二、变量的引用



  • 2.1、变量 和 数据 都是保存在内存中的,在Python中 函数的参数传递 以及 返回值 都是靠 引用 传递的
  • 2.2、引用的概念
    • 变量数据是分开存储的
    • 数据 保存在内存中的一个位置
    • 变量中保存着数据在内存中的地址
    • 变量中记录数据的地址,就叫做引用
    • 使用 id() 函数可以查看变量中保存数据所在的 内存地址


注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是修改了数据的引用

  • 变量不再对之前的数据引用
  • 变量改为对新赋值的数据引用


  • 2.3、数据与变量的实质
    每个数据都是有自己的在内存中的地址,当把数据赋值给了变量,其实也就是把数据的地址指向了变量,变量可以通过指针指向数据的值
  • 2.4、通过函数来理解变量的引用


def test(num):
         print("在函数内部 %d 对应的内存地址是 %d" % (num,id(num)))
# 1.定义一个数字的变量
a = 10
# 数据的地址本质上就是一个数字
print("a 变量保存的内存地址是 %d" % id(a))
# 2、调用 test 函数,本质上传递的是实参保存数据的引用(而内存地址指向的是 数据10 ),而不是实参保存的数据
test(a)


三、可变和不可变类型



  • 3.1、不可变类型:内存中的数据 不允许被修改,变量的值是可以被修改的,只是内存中的数据不能被修改;下面只对数字类型举例,其他的都一样
    • 数字类型:intboolfloatcomplexlong(2.x)


a = 2
b = 2
a与b的内存地址是一样的,因为 数据 2 在内存中是不可变的
    • 字符串:str
    • 元组:tuple
  • 3.2、可变类型:内存中的数据可以被修改,下面以列表为例
    • 列表:list


list1 = [1,2,3]
print(id(list1))
打印结果是:4415705864
list1.pop(2)
print(id(list1))
打印结果是:4415705864
list1 = [4,5,6]
print(id(list1))
打印结果是:4547047560


    • 通过上面的打印我们可以看到通过 列表的方法对列表进行修改的时候其内存地址并不会发生变化,当对列表再次赋值的时候,列表的内存地址发生了变化
    • 字典:dict
  • 3.3、注意:
    • 可变类型的数据变化,是通过 方法 来实现的
    • 如果给一个可变类型的变量,赋值了一个新的数据,引用会被修改


变量 不再 对之前的数据引用
变量 改为 对新赋值的数据引用
    • 字典的key只能使用 不可变类型


四、局部变量 和 全局变量



  • 4.1、局部变量和 全局变量的理解
    局部变量:是在 函数内部 定义的变量,只能在函数内部使用
    全局变量:是在 函数外部 定义的变量(没有定义在某一函数内),所有的函数内部都可以使用这个变量


提示:在其他的开发语言中,大多数是不推荐使用全局变量---原因是:范围太大,导致程序不好维护!


  • 4.2、局部变量
    • 局部变量:是在 函数内部 定义的变量,只能在函数内部使用;函数执行结束后,函数内部的局部变量,会被系统回收;不同的函数,可以定义相同名字的局部变量,互相不会产生影响
    • 局部变量的作用:临时保存函数内部需要使用的数据
      def add_number():


# 定义局部变量
    num = 1
    print(num)
# 下面的代码是会报错的,因为局部变量num不能在函数外部使用
print("%d" % num)
    • 局部变量的生命周期:就是局部变量从创建到被系统回收的过程;局部变量函数执行的时候才会被创建,函数执行结束后局部变量就会被系统回收局部变量在声明周期内,可以用来存储函数内部临时用到的数据


  • 4.3、全局变量:在函数外部定义的变量,所有的函数内部都可以使用这个变量,如下


num = 10    
def test1():
      print(num)
def test2():
      print(num)
# 下面两个函数都可以调用 num 这个变量
test1()
test2()
  • 注意:函数执行时:需要处理变量时会:
    • 首先会查找函数内部是否存在指定名称的局部变量,如果有直接使用
    • 如果没有,查找函数外部是否存在指定名称的全局变量,如果有直接使用
    • 如果还没有程序报错
    • 注意:


  • (1)、在函数内部不能直接修改全局变量,如果修改了就会当做局部变量来使用,在其他的函数里面,全局变量的值并不会发生变化,如下例子


num = 10    
def test1():
       num = 20
       print(num)
def test2():
       print(num)
# 下面两个函数都可以调用 num 这个变量
test1()
打印结果:20
test2()
打印结果:10
  • (2)、真正的修改全局变量的值,用 global 声明一下变量即可,如下


num = 10    
def test1():
       # 希望修改全局变量的值,使用global声明一下即可
       # global 关键字会告诉你解释器后面的变量是一个全局变量
       # 再使用赋值语句的时候就不会再创建局部变量了
       global num
       num = 20
       print(num)
def test2():
       print(num)
# 下面两个函数都可以调用 num 这个变量
test1()
打印结果:20
test2()
打印结果:20
  • (3)、全局变量定义的位置
    全局变量一定要定义在所有函数的上方,就可以保证所有的函数都可以调用全局变量,如下,打印age就会报错,原因是:age是在函数调用之后才被定义的,在执行函数的时候,变量还没有被定义,所以会报错


name = "JK"
def test():
     print("%s" % name)
     print("%d" % age)
test()
age = 10


  • 4.4、代码结构的示意图


image.png

  • 解释一下上面的 shebang: 它是用来表示用哪一个解释器来解释当前这个python文件的


  • 4.5、全局变量命名的建议
    • 为了全局变量和局部变量出现混淆,在定义全局变量的时候,我们可以在全局变量的名字前加 g_ 或者 gl_ 的前缀,具体的要求每个company不一样


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27728 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15292 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19980 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14855 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22221 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23524 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
36342 0
+关注
433
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载