10. 使用变量的一般事项
本章将详细讲述构建活动中的基本组成成分,即变量的使用.
在全面了解其他方法之前,你很可能已经开始使用某种危险的实践方法.即时之后认识到这样做是不对的,你也可能处于惯性把这种方法延续下去.
"变量"指代
- 对象
- 内置数据类型(built-in data type)
10.1 数据认知
创建有效数据的第一步是了解所要创建数据的种类
数据的种类有?python中数据种类有多少类?
10.2 轻松掌握变量定义
如何加快变量定义的工作?
养成好习惯会为你在整个项目周期内省去很多时间和麻烦.
10.2.1 隐式声明
有些语言支持隐式声明,当你使用了一个未声明变量的时候,编译器会自动为你声明该变量.
隐式变量声明对于任何一种语言来说都是最具危险性的特性之一.
为什么?Python中的变量是属于隐式变量声明吗?
那些要求显式声明数据的编程语言实际上是在提醒你要更加仔细地使用这些数据,而这一点也是它们的主要优势之一:避免了变量混淆(synonymous-variables)这类错误.
10.2.2 建议:
-
关闭隐式变量
有些编译器允许你把隐式声明功能关闭. -
声明全部的变量
在你引入一个新变量的时候对它做出声明,哪怕编译器不要求你一定要怎么做
那python里面怎么破?
-
遵循某种命名规则
对像Num和No这样常见的变量名后缀建立一套命名规则,从而确保在需要一个变量时不会写成两个. -
检查变量名
很多编译器会把一个子程序内的全部变量都列出来,还会列出那些声明了但是还没使用的变量.
pycharm里面如果有些引用的包没有使用的话,就会显示灰色,但是不会报错.
10.3 变量初始化原则
不合理地初始化数据是产生编程错误的常见根源之一.
为什么呢?
本质原因 : 变量的默认初始值与你的预期不同
10.3.1 易错的做法:
- 从未对变量赋值
它的值只是程序启动时变量所处内存区域的值 - 变量值已经过期.
变量在某个地方曾经被赋值,但该值已经不再有效 - 变量的一部分被赋值,而另一部分没有
10.3.2 避免产生初始化错误的建议:
-
1.在声明变量的时候初始化
在声明变量的同时对其初始化是一种非常方便的防御式编程方法
作用:防范初始化错误的保险策略 -
2.在靠近变量第一次使用的位置初始化它
尽可能靠近第一次使用变量的位置初始化该变量
理想的情况下,每个变量都应该在声明的同时被定义 -
就近原则:
-
把相关的操作放在一起
-
让控制循环的代码靠近循环本身
-
把语句写成直线的代码
-
3.在可能的情况下使用final 或者 const
java:final c++:const
可以防止该变量在初始化之后再被赋值
final和const关键字在定义类常量(class constants),输入参数以及任何初始化后其值不再发生改变的局部变量时非常有用
-
4.特别注意计数器和累加器
i,j,k,sum和total等变量常用作计数器(counter)或累加器(accumulator),在下一次使用这些变量之前忘记重置其值也是一种常见错误 -
5.在类的构造函数里初始化该类的数据成员
正如子程序的变量应该在每一个子程序内部初始化一样,类的数据也应该在其构造函数中初始化
如果在构造函数里面分配了内存,那么就应该在析构函数中释放这些内存.
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
-
6.检查是否需要重新初始化
多种情况:
1.由于子程序内的某个循环需要多次使用该变量
2.由于该变量会在多次子程序调用之间维持其值
因此需要在每次调用时重新赋值
如果的确需要重新初始化,那么要确保初始化语句位于那些重复执行的代码内部.
-
7.一次性初始化具名常量:用可执行代码来初始化变量
假变量:如果想用变量来模拟具名常量(named constant) ,在程序开始
真变量:应在靠近它们使用的位置用可执行代码(executable code)对其初始化 -
8.使用编译器设置来自动初始化所有变量
在跨平台,跨编译器时,确保编译器设置是一样的
让我联想到, 在linux上用gedit写Python代码时,默认编码是gbk...
而在pycharm里面默认编码是utf-8,不同设置会导致蛮多问题的
-
9.利用编译器的警告信息
-
10.检查输入参数的合法性
在你把输入数值赋给任何对象之前,要确保这些数值是合理的.
比如c当中的溢出问题...
- 11.使用内存访问检查工具来检查错误的指针
变量&内存???
-
12.在程序开始时初始化工作内存
把工作内存(working memory)初始化为一个已知数值将会有助于发现初始化错误.
方法 - 可以用某种在程序运行前预先填充内存的工具(memory filler)来把程序的工作内存填充为一个可以预料的值.
- 如果使用内存填充工具,那么可以偶尔改变一下用来填充内存的值.
- 可以让程序在启动时初始化工作内存.
10.4 作用域(Scope)
形象比喻:
作用域可以看做是衡量变量的知名度的方法:它的名气有多大
什么是作用域:
作用域或者可见性(visibility)指的是变量在程序内的可见和可引用的范围.
作用域小:
作用域大:
网友评论