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不一样


目录
相关文章
|
27天前
|
Python
[oeasy]python050_如何删除变量_del_delete_variable
本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
111 68
|
29天前
|
Shell Python
[oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
34 9
|
2月前
|
Python
Python三引号用法与变量详解
本文详细介绍了Python中三引号(`"""` 或 `'''`)的用法,包括其基本功能、如何在多行字符串中使用变量(如f-string、str.format()和%操作符),以及实际应用示例,帮助读者更好地理解和运用这一强大工具。
66 2
|
2月前
|
人工智能 Python
[oeasy]python039_for循环_循环遍历_循环变量
本文回顾了上一次的内容,介绍了小写和大写字母的序号范围,并通过 `range` 函数生成了 `for` 循环。重点讲解了 `range(start, stop)` 的使用方法,解释了为什么不会输出 `stop` 值,并通过示例展示了如何遍历小写和大写字母的序号。最后总结了 `range` 函数的结构和 `for` 循环的使用技巧。
40 4
|
2月前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
37 0
|
3月前
|
存储 Java 编译器
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
这篇文章是关于Python编程语言中变量命名规则、基本数据类型、算数运算符、比较运算符、逻辑运算符、赋值运算符以及格式化输出与输入的详细教程。
31 0
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
|
3月前
|
存储 程序员 Python
Python编程入门:探索变量和数据类型
【10月更文挑战第8天】本文是针对初学者的Python编程入门指南,重点介绍Python中变量的定义和使用以及不同的数据类型。我们将通过实例来理解基本概念,并展示如何在Python程序中应用这些知识。文章旨在帮助初学者建立扎实的基础,使他们能够更自信地编写Python代码。
WK
|
3月前
|
Python
Python变量命名
在Python编程中,变量命名对代码的可读性和维护性至关重要。遵循PEP 8风格指南,变量名应使用小写字母和下划线分隔单词,保持简洁明了、描述性强,避免使用单字母、Python关键字和内置函数名,采用有意义的缩写,使用英文命名,保持命名风格一致,避免魔法数字,考虑上下文。正确示例:`user_name`、`order_quantity`;不正确示例:`n`、`q`。
WK
50 0
|
3月前
|
Python
深入了解Python中星号变量的特殊用法
深入了解Python中星号变量的特殊用法
35 0
|
3月前
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
40 0