程序就是用来处理数据的,而变量就是用来存储数据的。好呀,那我们今天就来聊聊 Python 中的变量吧!这可是编程里的一个重要概念哦。
变量,英文名叫做variable,是计算机语言中能储存计算结果或能表示值的抽象概念。变量,你可以把它想象成一个装东西的盒子。这个盒子可以装不同类型的东西,比如数字、文字、甚至是更复杂的数据。在 Python 里,变量就是用来存储数据的。
在《计算机科学概述》中,变量是这样定义的:“高级程序设计语言允许使用描述性的名字指向主存储器中的位置,而不必再使用数字地址,这样的名字称为变量(variable)。之所以是这样取名是因为,随着程序的执行,只要改变存储在这个位置里的值,那么与改名字相联系的值就会改变。”
变量–数据的容器–计算机的本质就是和各种数据打交道。
编程中有很多的数据可能会反复使用,每次都重写很笨,所以就把它保存起来,取个好理解的名字,要用的时候直接使用就可以。
在计算机里我们的变量是由3个东西组成的:
1.数据类型(type)
2.内存地址(id)
3.值(value)
可以把变量想象成为一个仓库:
1.数据类型–>仓库类型 2.内存地址–>仓库地址 3.变量值–>仓库里放的东西
在Python中,变量是一个用于存储数据值的容器。与一些其他编程语言不同,Python中的变量不需要显式声明类型;它们会根据分配给它们的值自动确定类型。这意味着你可以将整数、浮点数、字符串、列表、元组、字典、集合等不同类型的值赋给同一个变量,但每次赋值后,变量的类型会随之改变。
变量可以使用短名称(如 x 和 y)或更具描述性的名称(age、carname、total_volume)。
在Python中,变量名必须遵循以下规则:
只能包含字母、数字和下划线:变量名可以包含字母(a-z, A-Z)、数字(0-9)以及下划线(_)。
不能以数字开头:变量名不能以数字开头,但可以在名称的其余部分包含数字。
区分大小写:Python是大小写敏感的,因此myVar和myvar会被视为两个不同的变量。
不能使用Python的保留字:Python有一些保留字(也称为关键字),如if、for、class等,这些词不能用作变量名。
1.= 号两边各留一个空格
2.变量名由超过两个以上的单词组成,每个单词之间由下划线链接
3.每个单词都小写
4.first_name,my_school_num
小驼峰:
1.第一个单词小写开始,后续单词大写
2.firstName
大驼峰:
1.每个单词的首字母都大写
2.FirstName
使用变量时,需要遵守一些规则。违反这些规则将引发错误。
~变量名只能包含数字、字母、下划线。变量名不能以数字开头以及不能包含空格。
~变量名不能将Python保留字和函数名作为变量名。如print等
如下是python3的33个保留字列表:
~变量名要简单又具有描述性。如name比n好,user_name比u_n好。
~慎用大写字母I和O,避免看错成数字1和0。
Python 变量的赋值指的是将数据放入变量的过程。在Python中,变量的声明和赋值是同时进行的。当你将一个值赋给一个变量时,Python会自动声明这个变量。
这是根据Python的动态语言特性而来。变量可以直接使用,而不需要提前声明类型。例如下面的a,b,c,d四个变量,在使用前没有进行任何的诸如 int a, str b, list c , int d 的类型声明,而这在C语言和JAVA编程语言中是必须要携带的。例如:
a = 4
b = "haha"
c = []
d = 9-5
a = 100
这里的等号要理解并读作“赋值”,而不是“等于”,“赋值”是对变量的操作,而“等于”是对两个变量进行比较。上面的a,b,c,d四个变量,就通过“=”号,赋予了不同的值。
新的变量通过赋值的动作,创建并开辟内存空间,保存值。如果没有赋值而直接使用会抛出赋值前引用的异常或者未命名异常。例如:
a # 孤单单一个a,什么也表示不了,只能报错
a = 1 # 这样就没问题了,解释器知道a是个新变量了
c.append(1) # c是个什么鬼?
没有赋值报错如下:
NameError: name ‘a’ is not defined NameError: name ‘c’ is not defined
Python 中的变量赋值不需要类型声明。每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。等号(=)用来给变量赋值。等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
1.单个变量赋值语法:变量名称 = 值
# -*- coding:utf-8 -*-
name1 = "北京-宏哥"
2.多个变量赋值(同时给多个变量赋相同的值)语法:变量名称 = 变量名称 = 变量名称 = 值
# -*- coding:utf-8 -*-
name1=name2 = "北京-宏哥"
或者:
# -*- coding:utf-8 -*-
name1 = "北京-宏哥"
name2 = name1
3.多个变量赋值(同时给多个变量赋不同的值)语法:变量名称1 , 变量名称2 , 变量名称3 = 值1 , 值2 ,值3
# -*- coding:utf-8 -*-
name1, name2 = "北京-宏哥", "宏哥"
实例,如下:
# -*- coding:utf-8 -*-
name1, name2 = "北京-宏哥", "宏哥"
name1, name2 = name2, name1
在内存中创建一个变量,会包括:
变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
在Python中,变量本身没有数据类型的概念通常所说的“变量类型”是变量所引用的对象的类型,或者说是变量的值的类型。
a = 1
a = "haha"
a = [1, 2, 3]
a = { "k1":"v1"}
变量a在创建的时候,赋予了值为1的整数类型,然后又被改成字符串“haha”,再又变成一个列表,最后是个字典。变量a在动态的改变,它的值分别是不同的数据类型,这是动态语言的特点。
a = 1
b = 2
c = a + b # 先计算a+b的值,再赋给c
print(c)
(例如:a = b = c = 1,最终大家都是1)。也可以同时为多个变量赋值,用逗号分隔,逐一对应。
例如:a, b, c = 1, 2, 3,最后a是1,b是2,c是3。
不要把赋值语句的等号等同于数学的等号。
x = 1
x = x + 2
如果从数学上理解x = x + 2那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式x + 2,得到结果3,再赋给变量x。由于x之前的值是1,重新赋值后,x的值变成3。
a = 'ABC’时,Python解释器干了两件事情:
1. 在内存中创建了一个‘ABC’的字符串对象;
2. 在内存中创建了一个名为a的变量,并把它指向'ABC'。
也可以把一个变量a赋值给另一个变量b,这个操作实际上是将变量b指向变量a所指向的数据,
例如下面的代码:
a = 'Jack'
b = a
a = 'Tom'
print(b)
print(a)
最后变量b的内容到底是’Jack’还是’Tom’?如果从数学意义上理解,就会错误地得出b和a相同是‘Tom’,但实际上b的值还是’Jack ‘!
请牢记:Python中的一切都是对象,变量是对象的引用!
执行a = ‘Jack’,解释器创建字符串‘Jack’对象和变量a,并把a指向‘Jack’对象;
执行b = a,解释器创建变量b,并且将其指向变量a指向的字符串‘Jack’对象;
执行a = ‘Tom’,解释器创建字符串‘Tom’对象,并把a改为指向‘Tom’对象,与b无关。
常量就是不变的变量,比如常用的数学常数圆周率就是一个常量。在Python中,通常用全部大写的变量名表示常量:
PI = 3.14159265359
但事实上,从Python语法角度看,PI仍然是一个变量,因为Python根本没有任何机制保证PI不会被改变。你完全可以给PI赋值为10,不会弹出任何错误。所以,用全部大写的变量名表示常量只是一个习惯上的用法。
常量通常放置在代码的最上部,并作为全局使用。
文章的最后,讲点比较深奥的东西。在Python中,变量的内存地址标识码可以用id()命令来查看。
在Python中,变量并不是直接存储数据本身,而是存储了对数据对象的引用(或者说是“指针”的概念,尽管Python内部并不直接使用“指针”这个词)。这意味着变量实际上存储的是数据对象在内存中的地址。然而,由于Python的内存管理机制(包括垃圾回收机制),直接暴露内存地址给开发者并不是Python设计的一部分,因此我们不能直接像C或C++那样通过指针来操作内存地址。
尽管如此,Python提供了一些方法来间接查看或理解变量的“内存地址”概念,尽管这些通常是通过对象的身份(identity)来表现的,而不是直接的内存地址。
在Python中,你可以使用id()函数来获取一个对象的“身份”,这个函数返回的是一个整数,这个整数在对象的生命周期内是唯一的,并且在大多数实现中,这个整数可以被视为对象在内存中的地址(尽管这不是严格保证的,因为它依赖于Python解释器的具体实现)。
1.实例如下:
# -*- coding:utf-8 -*-
name1 = "北京-宏哥"
print(id(name1))
name2 = "宏哥"
print(id(name2))
2.运行代码:
D:\Python\python.exe D:/Demo/test.py
2597726271672
2597726560080
Process finished with exit code 0
3.从上边我们知道点击运行按钮,会输出两个不同的数字,这就是变量a的内存地址,可以发现更改后有所变化。奇妙的是:再次点击运行按钮,输出结果却变了:
D:\Python\python.exe D:/Demo/test.py
2537443375288
2537443663696
Process finished with exit code 0
4.显然,再次运行,内存地址又变了!这就说明:在每次计算机运行代码时,都会在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
可以用其他变量的计算结果来定义变量。
需求:
python实现的程序代码:
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-06
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程2-变量与常量
'''
# 3.导入模块
# 定义苹果的价格
price = 8.5
# 定义买的数量
weight = 7.5
# 定义总金额
money = price * weight
# 输出最后的价格
print(money)
# 变量名 只有在第一次出现 才是定义变量
# 变量名 再次出现,不是定义变量,而是直接使用之前定义过的变量
需求:
定义变量保存小明的个人信息
姓名:小明
年龄:18岁
性别:是男生
身高:1.75米
体重:75.0公斤
python实现代码:在运行的时候,Python 解释器会根据赋值语句等号右侧的数据自动推导出变量中保存数据的准确类型
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-06
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程2-变量与常量
'''
# 3.导入模块
name = "小明"
age = 18
sex = True
high = 1.75
weight = 75.0
利用断点debug调试确认变量中保存数据的类型,如下图所示:
答案当然是不可以啦!在Python中,一个变量不能“直接”指向多个值。变量在任何给定时间都只引用(或“指向”)一个对象。但是,你可以通过改变变量的引用来使其指向不同的对象。
实例如下:
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-06
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程2-变量与常量
'''
# 3.导入模块
a = 10
print(id(a)) # 变量a的内存地址:140714215203952
# 给a变量重新赋值
a = 20
print(id(a)) # 变量a的内存地址:140714215204272 ,与上一个不同,因为a现在引用了一个不同的对象
在这个例子中,变量a
最初引用了一个值为10的对象,然后我们改变了a
的引用,使其指向了一个值为20的新对象。这并不意味着a
“同时”指向了两个值;它只是改变了它的引用。
本文基于Python基础,主要介绍了Python基础中变量和常量的区别 。希望对大家的学习有帮助。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。