python 变量 (全面不一样的变量)
变量
一:什么是变量?
变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态
- 变:状态是会发生改变的
- 量:记录现实世界中的状态,让计算机能够像人一样去识别世间万物。
变量是存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。
基于变量的数据类型如(整型数,实数,布尔值,字符串,列表,字典,等)也称变量类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
二:为什么要有变量?
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
例如:王者荣耀等级从1-15的变化,LOL等级从1-18的变化,攻击力的变化,用户名的改变
三:定义变量及变量的组成
3.1定义变量
变量名只有在第一次出现才是定义变量(变量名再次出现,不是定义变量,而是直接使用之前定义的变量)
在 python 中,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建
等号(=)用来给变量赋值
= 左边是一个变量名
= 右边是存储在变量中的值
变量名 = 值
变量定义之后,后续就可以直接使用了
name(变量名) = the_hun(变量值)
3.2变量的组成
从我们上面定义的变量可以看到,变量的组成分为以下三个部分:
- 变量名:变量名用来引用变量值,但凡需要用变量值,都需要通过变量名。
- 赋值符号:赋值
- 变量值:存放数据,用来记录现实世界中的某种状态。
3.3定义变量的过程
a = 10
这段代码的动作就相当于:
a = 10
b = a
a = 20
那么,此时b=?
如果按照我们常用的数学思维的话,那么b肯定是等于20的,但这里却不是这样的,如果按照一般的思维的话,是下面这样的:
如果按照这个逻辑的话,那么b肯定是等于20的,但这里是错误的,所以我画了个叉。
因为变量是一个标记,用来调用内存中的值,当我们将一个标记赋值给另一个标记的时候,应该是让其指向另一个标记的内存,而不是指向标记。
按照这个原则,我们的思路应该是这样的:
• 过程是先生成对象
举个例子:
a=1 # a-->class <int>
print(a)
3.4 变量的三个特征
对于每个变量,python都提供了这三个方法分别获取变量的三个特征,其中python的内置功能id(),内存地址不一样,则id()后打印的结果不一样,因为每一个变量值都有其内存地址,而id是用来反映变量值在内存中的位置,内存地址不同则id不同。
x = 10
print(x) # 获取变量的变量值
print(id(x)) # 获取变量的id,可以理解成变量在内存中的地址
print(type(x)) # 获取变量的数据类型,下章会详细介绍数据类型
3.4.1变量值
x = 10
print(x) # 获取变量的变量值
10
3.4.2内存地址
id(x) 获取变量的id,可以理解成变量在内存中的地址
这里id是一个函数,它有返回值,返回的值是变量的内存地址(十进制)。我们通常看到的内存地址实际上是十六进制。我们在这里可以通过hex()把十进制转换成十六进制
3.4.2.1判断变量值是否相等用(二)
name1 = 'egon'
name2 = 'nick'
print(name1 == name2) # False
False
3.4.2.2判断变量id是否相等(三)
x = 11
y = x
z = 11
print(x == y) # True
True
print(x is y) # True
True
print(x is z) # True,整数池的原因
True
x = 257
z = 257
print(x is z) # False
False
从上述的打印消息可以看出:id相等的变量,值一定相等,指向的是同一个内存地址;值相等的变量,id不一定相等。
3.4.2.3变量的数据类型
x = 11
print(type(x)) #int
四 多个变量的赋值
4.1 链式赋值
a = 10
b = 10
c = 10
d = 10
print(f'a:{a}, b:{b}, c:{c}, d:{d}')
a:10, b:10, c:10, d:10
a = b = c = d = 10
print(f'a:{a}, b:{b}, c:{c}, d:{d}')
a:10, b:10, c:10, d:10
4.2 交叉赋值
x = 100
y = 200
temp = x
x = y
y = temp
print(f'x:{x}')
print(f'y:{y}')
x:200
y:100
x, y = y, x
print(f'x:{x}')
print(f'y:{y}')
x:100
y:200
五 变量的命名规范和方式
Python
官方提供有一系列PEP
文档,其中第8
篇文档专门针对Python
的代码格式
给出了建议,也就是俗称的PEP 8
。PEP 8文档地址 谷歌有对应的中文文档
一定要记住,定义一个变量其实就是在记录现实世界中的的状态,并且存永远不是目的,取才是目的。所以变量的命名应该满足以下三个规范:
- 变量的命名应该能反映变量值所描述的状态,切记不可用中文
- 变量名必须用字母数字下划线组合,并且变量名的第一个字符不能是数字。
- 关键字不能声明为变量名
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
驼峰体
AgeOfNick = 19
print(AgeOfNick)
19
小驼峰式命名法
o 第一个单词以小写字母开始,后续单词的首字母大写
o 例如:firstName、lastName
· 大驼峰式命名法
o 每一个单词的首字母都采用大写字母
o 例如:FirstName、LastName、CamelCase
下划线(推荐)
age_of_nick = 19
print(age_of_nick)
19
注意:以上两种变量名的风格,推荐使用下划线的风格。
Python3中的命名规范---基于PEP8标准 https://blog.csdn.net/weixin_39723544/article/details/82144280
六 变量扩展(仅作了解)
python是强语言还是弱语言,没有一个具体官方的说法
数据类型也就是变量类型,一般编程语言的变量类型可以分成下面两类。
静态类型与动态类型
- 静态类型语言:一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。
- 动态类型语言:一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在你第一次给它赋值的时候。不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候。
强类型与弱类型
强类型语言:一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。强类型:不允许不同类型相加。例如:整形+字符串会报类型错误。偏向于不容忍隐式类型转换
弱类型语言:一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 '12' 和整数 3 进行连接得到字符串'123',然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。偏向于容忍隐式类型转换
所以,Python 既是动态类型语言 (因为它不使用显示数据类型声明),又是强类型语言(因为只要一个变量获得了一个数据类型,它实际上就一直是这个类型了)。
Python是有变量类型的,而且会强制检查变量类型:
注意: 强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); javaScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)
变量的声明和定义
Python 与大多数其它语言一样有局部变量和全局变量之分,但是它没有明显的变量声明。变量通过首次赋值产生,当超出作用范围时自动消亡。
- 变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一 个定义。
- 变量声明:用于向程序表明变量的类型和名字。
- 定义也是声明
java中变量声明
String employee; // String 类型的变量
boolean isSave; // boolean 类型的变量
int create_at; // int 类型的变量
java中变量赋值
char usersex='女'; // 直接赋值
或者
String username; // 先声明
username ="琪琪"; // 后赋值
另外,多个同类型的变量可以同时定义或者初始化,但是多个变量中间要使用逗号分隔,声明结束时用分号分隔。
String username,address,phone,tel; // 声明多个变量
int num1=12,num2=23,result=35; // 声明并初始化多个变量
JavaScript的隐式转换
JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object。
object是引用类型,其它的五种是基本类型或者是原始类型。
隐式转换记住以下三点:
1.字符串加数字,数字就会转成字符串。
2.数字减字符串,字符串转成数字。
如果字符串不是纯数字就会转成NaN。
字符串减数字也一样。
两个字符串相减也先转成数字。
3.乘,除,大于,小于跟减的转换也是一样。
console.log(10+'20') //2010 String
console.log(10-'20')//-10 number
console.log(10-'one') //NaN not a number
console.log(10-'101a') //NaN
console.log(10*'20') //200 number
console.log('10'*'20') //200 number
console.log(20/'10') //2 number
console.log('20'/'10') //2 number
console.log('20'/'one') //NaN
隐式赋值: a =1
显示赋值: char a = 1