• 变量的概念


    在上一小节中我们把python解释器当做计算器使用,可以实现基本的加减乘除四则运算功能。

    但是如果你不小心输入了字母会出现什么情况呢? 

    >>> a + 1

    图1

    说明(20130606补充):

    Traceback (most recent call last):,python的错误跟踪机制,当出现错误时提示错误信息。

    File  "<stdin>" 正在执行的python文件

    line 1,错误发生行

    in <module> 错误发生所在“模块”,模块概念后面学习。

    NameError:python中的错误类型(或者叫异常),python中的异常后面学习。

    name 'a' is not defined, (名字 ‘a’没有被定义),具体的错误提示。

    NameError是提示我们没有发现一个名字为‘a’的东西,还有一个提示<stdin>这是什么意思呢?

    为了解释清楚这些,我们需要先复习一下计算机的一些基本知识。

    我们现在使用的计算机在体系上都是属于“冯诺依曼”体系结构。如下图所示:

    图2(注1)

    从图2中我们可以看出,计算机可以简化理解为:

    Memory(内存),Control Unit(控制单元),Arithmetic Logic Unit(数学逻辑单元,其中包含一个Accumulator累加器),Input输入, Output输出。

    各个单元之间是通过系统总线连接在一起的(控制单元,数学和逻辑运算单元被包含在CPU中)。

    一般的我们把键盘和鼠标称为标准输入设备,显示器称为标准输出设备。

    这些都是属于“硬件设备”。只有硬件并不能执行我们的python程序,还需要操作系统把这些硬件管理起来,并提供使用这些硬件的能力,比如使用CPU和Memory。

    为了管理和使用上的方便,操作系统把这些硬件抽象为“文件”的概念,图1中的“file stdin”就对应我们从键盘输入的数据。

    那么我们如何修订这个错误呢?执行以下操作,试试看。

    >>>a = 1

    >>>a + 1

    输出:

    2

    ‘=’在python中表示为赋值,意为把1赋值给名字a。

    继续,测试

    >>>a = 2

    >>>a + 1

    输出:

    3

    这个时候python解释器就把a当做变量来看待了。要想很好的理解变量,我们还是需要回到“冯诺依曼”体系架构上。

    从图2我们可以知道,我们的输入经过CPU的运算后输出,如果我们的运算逻辑很复杂,就需要先把我们输入的数据存在Memoy中。

    CPU为了知道把数据存在哪里了,就需要使用一个唯一的标记,把数据的存放位置记下来,这个“标记”就是python中的变量,也是我们上面提到的“名字”的概念

    显然这个标记所记录的Memoy位置是可以反复存放数据的。

    简而言之,变量就是一个标识符,标记了Memory中存放数据的位置。

    在python中,变量通过类似"a = 1"赋值形式定义,变量必须先定义才能使用,否则提示NameError。

    在python解释器中输入以下语句测试,pyhon中定义变量的各种情况。

    >>>value = 1

    >>>Value + 1

    输出: NameError,

    说明,python中标识符是区分大小写的。value 和Value是两个不同的标识.

    >>> if = 2

    输出:SyntaxError,

    说明,if是python保留的关键字,不可以作为标识符。python保留的关键字还有:

    and         del       from      not     while
    as          elif      global    or      with
    assert      else      if        pass    yield
    break       except    import    print
    class       exec      in        raise
    continue    finally   is        return
    def         for       lambda    try

    >>>1value = 1

    输出,SyntaxError,

    说明,数字开头的字符串不可以作为标识符

    >>> _value1 = 1

    >>> _value1 + 1

    2

    说明,_可以作为标识符开始。

    >>>$value = 1

    >>>value$ = 1

    输出,SyntaxError

    说明,$不可以作为标识。

    综上,变量就是一个标志符,标记了Memory中存放数据的位置。

    标识符只可以以字母('A'..'Z'或者'a'..'z')或者'_'开头,后面可以跟多个字母或者数字(0..9)或者'_'。 

    注1: 冯诺依曼架构

     (补20130602)

    20130606对文中的一些名词和概念做补充说明:

    Q:什么是Control Unit(控制单元)主要功能是什么?

    A:Control Unit是CPU的主要部件之一主要工作是指挥CPU来完成计算工作,比如通过系统总线从内存中读数据到CPU或者从CPU写数据到内存。

    参见:http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%8D%95%E5%85%83_(%E8%AE%A1%E7%AE%97%E6%9C%BA)

    Q:什么是CPU的逻辑运算?

    A:我们首先要清楚逻辑的概念,“逻辑”在概念上等同于“推理”。

    举例说明,“如果水加热到100摄氏度,水就会沸腾。”像这样先给出“前提”在得出“结论”的过程就是推理,我们也可以说,我们在说明某种“逻辑”。

    我们的推理可能是对的也可能是错的,这就是逻辑中的真和假的概念。

    我们再看一个例子:“如果明天下雨,我就在家睡觉,如果不下雨我就去爬山。”我希望计算机在明天8点根据天气情况提醒我,是去爬上还是在家睡觉。

    这就要求计算机能够做出“推理和判断”也就是逻辑运算。

    这只是为了理解“逻辑运算”的简短说明,详细请参考,布尔代数http://zh.wikipedia.org/wiki/%E5%B8%83%E5%B0%94%E4%BB%A3%E6%95%B0

    20130709排版和语句修改。

  • 相关阅读:
    Oracle和MySQL的对比
    mysql的默认隔离级别
    mysql数据库中锁机制的详细介绍
    什么电影是好电影
    周记 2019.4.8~4.14
    周记 2019.3.25~2019.3.31
    IntelliJ Idea 使用笔记
    笔记
    kafka总结
    Spring boot
  • 原文地址:https://www.cnblogs.com/mengfanhao/p/3115455.html
Copyright © 2020-2023  润新知