1, 习题 4: 变量 (variable) 和命名
学习目标: 了解 Python 中变量的定义, 学习定义简明易记的变量名
变量: 变量是存储内存中的值, 就是每定义一个变量就会在内存中开辟一个空间. 基于变量的类型. 解释器会分配指定的内存, 并解决什么数据可以被存储到内存中.
在 Python 中使用变量时, 变量不需要提前定义, 只需要给变量赋值即可, 赋值的过程就是创建这个变量的过程. 但是如果要使用这个变量, 必须要给这个变量赋值.
变量的命名规则:
变量名只能是字母, 数字, 下划线的任意组合, 但是不能是数字开头, 且不能包含空格
不能使用 Python 预留的关键字
Python 支持中文变量名, 但是一般不建议使用
变量名要有意义, 有描述性, 简明, 一般采用驼峰式命名方法
习题四中的练习代码是:
- # 定义汽车数量的变量 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."
上述代码的运行结果为:
- 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.
在上面练习代码时, 不注意程序运行后报了个错:
原因: 报错提示是说在第 19 行 car_pool_capacity 这个变量没有定义, 我们知道变量在使用前必须要先赋值, 但是上面赋值的变量是 carpool_capacity, 和写错的变量名差了一个下划线, 说明这是两个变量, 不能混用.
2, 加分习题:
我在程序里用了 4.0 作为 space_in_a_car 的值, 这样做有必要吗? 如果只用 4
会有什么问题?
记住 4.0 是一个 "浮点数", 自己研究一下这是什么意思.
记住 = 的名字是等于(equal), 它的作用是为东西取名, 记住 _ 是下划线字符(Underscore).
将 python 作为计算器运行起来, 就跟以前一样, 不过这一次在计算过程中使用变
量名来做计算, 常见的变量名有 i , x , j 等等.
3, 我的答案:
1, 我在程序里用了 4.0 作为 space_in_a_car 的值, 这样做有必要吗? 如果只用 4
会有什么问题
没有必须, 因为在 Python2 中, 整数运算中只有除法运算中才会产生小数部分被舍弃的情况, 乘法中并不会产生丢弃小数部分的情况, Python3 中默认是都不会舍弃小数部分.
2, 浮点数的概念?
这个问题具体详情见上一章浮点数的定义, 这里就不做过多的赘述了.
3, = (等号)的名字是等于(equal), 它的作用是为东西取名
变量的赋值就是采用 "=" 来实现的, 就是把等号右边的值赋给等号左边的变量
4, 扩展:
变量的赋值不仅仅是单纯的变量赋值, 还涉及到内存的分配, 所以赋值的变量和不赋值的变量时不一样的, 下面来举个栗子:
4.1, 我名字变了吗?
- 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 的对应关系没有变.
上述例子就是变量和内存间的关系, 用老男孩金角大王的例子就是, 内存地址就是相当于小区的房子, 变量名就是相当于房子的门牌号, 不可能说拆除了门牌号就是拆除房子. 变量的重新赋值只是相当于给房子换个门牌号, 房子还在, 只是门牌号变了而已.
4.2,Python 中的内存回收机制:
说上面这个又涉及到 Python 中的内存回收机制, Python 和 C 语言不同, C 中需要手动释放内存地址, 但是 Python 不用, Python 中内存是自动回收的, Python 中有一个计数器, 当其值为 0 时就自动清除掉, 重新定义变量后之前的内存就会被清掉. 当然 Python 中也支持手动回收内存, 使用 del 变量名的形式.
手动回收如下:
4.3, 对多个变量赋值
Python 中允许同事为多个变量赋值, 例:
a = b = c = 1
以上实例, 创建一个整型对象, 值为 1, 三个变量被分配到相同的内存空间上, 建立三个对应关系.
a, b, c = 1, 2, "Kang"
以上实例, 两个整型对象 1 和 2 分别分配给变量 a 和 b, 字符串对象 "kang" 分配给变量 c.
4.4, 标准数据类型
在内存中存储的数据可以有多种类型. 例如, 一个人的年龄可以用数字来存储, 他的名字可以用字符来存储. Python 定义了一些标准类型, 用于存储各种类型的数据.
Python 有五个标准的数据类型:
- Numbers(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
5, 总结
此习题是学习了 Python 中的变量定义, 首先要明白变量的命名规则, 其实是了解变量和 Python 的内存地址之间的关系.
来源: https://www.cnblogs.com/csyxf/p/10270548.html