**学习目标:**了解Python中变量的定义,学习定义简明易记的变量名html
变量:变量是存储内存中的值,就是每定义一个变量就会在内存中开辟一个空间。基于变量的类型。解释器会分配指定的内存,并解决什么数据能够被存储到内存中。python
在Python中使用变量时,变量不须要提早定义,只须要给变量赋值便可,赋值的过程就是建立这个变量的过程。可是若是要使用这个变量,必需要给这个变量赋值。学习
变量的命名规则:spa
习题四中的练习代码是:3d
# 定义汽车数量的变量car ,并给变量car赋值为100 cars = 100 # 定义汽车内空间的变量space_in_a_car ,并为其赋值4.0 space_in_a_car = 4.0 # 定义司机人数的变量drivers , 并为其赋值30 drivers = 30 # 定义乘客数量的变量drivers , 并为其赋值30 passengers = 90 # 定义没法行驶的车辆数量的变量cars_not_driven ,其值为上面定义的cars变量和drivers变量相减为70 cars_not_driven = cars - drivers # 再定义能够形式的车辆数量变量cars_driven , 而后将变量drivers的值赋值给变量cars_driven cars_driven = drivers # 定义最大拼车容量的变量carpool_capacity,将变量cars_driven和变量space_in_a_car值作乘法为120.0 carpool_capacity = cars_driven * space_in_a_car # 定义变量平均每辆车中的乘客数量变量average_passengers_per_car ,将变量passengers和变量cars_driven值作除法获得结果为3 average_passengers_per_car = passengers / cars_driven # 下面是打印输出变量所表明的值 print "There are", cars, "cars avaiable." print "There are only", drivers, "drivers avaiable." print "There will be", cars_not_driven, "empty cars today" print "We can transport", carpool_capacity, "people today." print "We have", passengers, "to carpool today." print "We need to put about", average_passengers_per_car, "in each car."
上述代码的运行结果为:code
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo4/Exer4-1.py There are 100 cars avaiable. There are only 30 drivers avaiable. There will be 70 empty cars today We can transport 120.0 people today. We have 90 to carpool today. We need to put about 3 in each car.
在上面练习代码时,不注意程序运行后报了个错:htm
缘由:报错提示是说在第19行car_pool_capacity这个变量没有定义,咱们知道变量在使用前必需要先赋值,可是上面赋值的变量是carpool_capacity,和写错的变量名差了一个下划线,说明这是两个变量,不能混用。对象
一、我在程序里用了 4.0 做为 space_in_a_car 的值,这样作有必要吗?若是只用 4 会有什么问题blog
没有必须,由于在Python2中,整数运算中只有除法运算中才会产生小数部分被舍弃的状况,乘法中并不会产生丢弃小数部分的状况,Python3中默认是都不会舍弃小数部分。内存
二、浮点数的概念?
这个问题具体详情见上一章浮点数的定义,这里就不作过多的赘述了。
三、 = (等号)的名字是等于(equal),它的做用是为东西取名
变量的赋值就是采用 “=” 来实现的,就是把等号右边的值赋给等号左边的变量
变量的赋值不只仅是单纯的变量赋值,还涉及到内存的分配,因此赋值的变量和不赋值的变量时不同的,下面来举个栗子:
name1 = "Kang" #定义变量name1,并赋值为Kang name2 = name1 #定义变量name2,并将name1的值赋给name2 #打印输出name1 和 name2的值 print "第一次输出结果:name1=",name1 print "第一次输出结果:name2=",name2 name1 = "Jack" #再次为变量name1赋值为新值Jack #打印输出name1 和 name2的值 print "第二次输出结果:name1=",name1 print "第二次输出结果:name2=",name2
C:\Python27\python.exe D:/pythoncode/stupid_way_study/demo4/Exer4-2.py 第一次输出结果:name1= Kang 第一次输出结果:name2= Kang 第二次输出结果:name1= Jack 第二次输出结果:name2= Kang
由上面的运行结果能够看出来,最后的运行结果是name1 = Jack ,name2 = Kang,?
这里不少人就会问了,上面不是进行了赋值操做吗,name2 = name1,而后name1值变了,name2的值不也应该跟着变吗?
可是实际 状况不是这样的,由于这Python中变量的赋值实际上是一个内存地址的引用,其之间只是一个地址的引用,变量之间没有其余关系,好比上面name2 变量只是将变量name1 当作一个寻找对象的一个桥梁,其之间没有其余任何关系。
详细解释:
name1 = Kang name2 = name1
这两句代码,第一句是一个变量赋值的过程,在内存中开辟出一个位置,存储值Kang,然以就至关于创建了一个对应关系,name1 -----> Kang , 下一句name2 = name1 ,其实只是name2 经过变量name1 去寻找对应的值,至关于中间的一个过渡桥梁,name1和name2之间并无任何关系。
name1 = "Jack"
上面的name1 = "Jack",确实是一个新的赋值操做,这样name1的值确定是会变的,可是name2 的值是不会变的,由于Python的变量赋值操做其实就是和内存中的一块地址创建对应关系,变量赋新值,就至关于新创建了一条对应关系,不会说对应关系变了,内存中值也会变,其实内存中地址确定是不会变的,变的只是指向这块地址的对应关系。并且name2 = name1,他们之间没有其余关系,仅仅是一个桥梁传递做用,name2经过name1找到了内存中对应的值而已。因此上面name1赋新值,name2的值并无变,由于name2的对应关系没有变。
上述例子就是变量和内存间的关系,用老男孩金角大王的例子就是,内存地址就是至关于小区的房子,变量名就是至关于房子的门牌号,不可能说拆除了门牌号就是拆除房子。变量的从新赋值只是至关于给房子换个门牌号,房子还在,只是门牌号变了而已。
说上面这个又涉及到Python中的内存回收机制,Python和C语言不一样,C中须要手动释放内存地址,可是Python不用,Python中内存是自动回收的,Python中有一个计数器,当其值为0时就自动清除掉,从新定义变量后以前的内存就会被清掉。固然Python中也支持手动回收内存,使用del 变量名的形式。
手动回收以下:
Python中容许同事为多个变量赋值,例:
a = b = c = 1
以上实例,建立一个整型对象,值为1,三个变量被分配到相同的内存空间上,创建三个对应关系。
a, b, c = 1, 2, "Kang"
以上实例,两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 "kang" 分配给变量 c。
在内存中存储的数据能够有多种类型。例如,一我的的年龄能够用数字来存储,他的名字能够用字符来存储。Python 定义了一些标准类型,用于存储各类类型的数据。
Python有五个标准的数据类型:
此习题是学习了Python中的变量定义,首先要明白变量的命名规则,实际上是了解变量和Python的内存地址之间的关系。