代码大全2 --- 10.使用变量的一般事项

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)指的是变量在程序内的可见和可引用的范围.
作用域小:

作用域大:

10.4.1 使变量引用局部化(Localize References to Variables)

10.4.2 尽可能缩短变量的"存活"时间

10.4.3 测量变量的生存时间

10.4.4 减小作用域的一般原则

10.4.5 有关缩小变量作用域的说明


10.5 持续性

10.6 绑定时间

10.7 数据类型和控制结构之间的关系

10.8 为变量制定单一用途

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,003评论 11 349
  • 第一部分 打好基础 Laying the Foundation 第一章 欢迎进入软件构建的世界 Welcome t...
    白桦叶阅读 4,519评论 0 17
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,444评论 1 51
  • 签到,喊口号,发队旗! 好强的仪式感! 惰性很可怕,希望在这21的特训中,彻底改掉拖延症!
    阿辉_3ddf阅读 115评论 0 0