官术网_书友最值得收藏!

2.3 變量和關鍵字

編程語言最強大的功能之一是操縱變量。變量(variable)是一個需要熟知的概念,如果你覺得數學讓你抓狂,別擔心,Python中的變量很好理解。變量基本上代表某個值的名字。

2.3.1 變量

變量指向各種類型值的名字,以后再用到這個值時,直接引用名字即可,不用再寫具體的值。在Python中,變量的使用環境非常寬松,沒有明顯的變量聲明,而且類型不是固定的。你可以把一個整數賦值給變量,如果覺得不合適,把字符串賦給變量也可以。

在Python中,等號(=)是賦值語句,可以把任意數據類型賦值給變量。

如果要定義一個名為xiaohong的變量,該怎么操作呢?輸入如下:

        >>> xiaohong='XiaoHong'
        >>>

注意 字符串必須以引號標記開始,并以引號標記結束。

此操作解釋:xiaohong是我們創建的變量,=是賦值語句,XiaoHong是變量值,需要用引號標記。整句話的意思為:創建變量xiaohong并賦值為XiaoHong。

小萌疑惑了,怎么前面輸入后按回車鍵就能輸出內容,這里怎么跳到輸入提示狀態呢?別急,還記得前面講的print()嗎?print()是輸出函數,看看這里,沒有使用輸出函數,屏幕上當然不會輸出內容了。要輸出內容應該怎么操作呢?我們嘗試一下:

        >>> print(xiaohong)
        XiaoHong

不錯,嘗試成功了。但為什么小萌輸入的是print(xiaohong),結果卻輸出XiaoHong呢?這就是變量的好處,可以只定義一個變量,比如xiaohong,把一個值賦給這個變量,比如XiaoHong,這樣當我們輸出xiaohong時,實際上輸出的是XiaoHong。

在使用變量前需要對其賦值。沒有值的變量是沒有意義的,編譯器也不會編譯通過。例如,定義一個變量為abc,不賦任何值,輸入及結果如下:

        >>>abc
        Traceback (most recent call last):
          File "<pyshell#33>", line 1, in<module>
            abc
        NameError: name'abc'is not defined

同一個變量可以反復賦值,而且可以是不同類型的變量,輸入如下:

        >>>a=123
        123
        >>>a='ABC'
        >>>print(a)
        ABC

這種變量本身類型不固定的語言稱為動態語言,與之對應的是靜態語言。靜態語言在定義變量時必須指定變量類型,如果賦值時類型不匹配就會報錯。和靜態語言相比,動態語言更靈活。

當不能確定變量或數據的類型時,可以借助解釋器內置的函數type進行確認。在交互模式下可以輸入如下:

        >>> type('Hello, world! ')
        <class 'str'>

測試得到輸入的結果類型是字符串類型(str)。

        >>> type(100)
        <class 'int'>

測試得到輸入的結果類型是整型(int)。

        >>> type(3.0)
        <class 'float'>

測試得到輸入的結果類型是浮點型(float)。

        >>> a='test type'
        >>> type(a)
        <class 'str'>

測試得到輸入的結果類型是字符串類型(str)。

        >>>b=100
        >>> type(b)
        <class 'int'>

測試得到輸入的結果類型是整型(int)。

        >>> c=3.0
        >>> type(c)
        <class 'float'>

測試得到輸入的結果類型是浮點型(float)。

只要是用雙引號或單引號括起來的值,都屬于字符串。交互模式下輸入:

        >>> type('test single quotes')
        <class 'str'>
        >>> type("test double quote")
        <class 'str'>
        >>> type("100")
        <class 'str'>
        >>> type("3.0")
        <class 'str'>
        >>> b='3'
        >>> type(b)
        <class 'str'>
        >>> b='100'
        >>> type(b)
        <class 'str'>
        >>> c='3.0'
        >>> type(c)
        <class 'str'>

測試得到輸入的結果類型都是字符串類型(str)。

注意不要把賦值語句的等號等同于數學中的等號。比如下面的代碼:

        a = 100
        a = a + 200

小萌一臉疑問,a = a + 200是什么等式啊?讀書時不知道在這個等式上花費了多少腦細胞,可別再拿這個騙我了,我可是讀過小學的。小萌啊小萌,計算機可不是人腦,也不需要遵循學校的知識,計算機有計算機的思考方式。在編程語言中,賦值語句先計算右側的表達式a+ 200,得到結果300,再賦給變量a。由于a之前的值是100,重新賦值后,a的值變成300。我們通過交互模式驗證,輸入如下:

        >>> a=100
        >>> a=a+200
        >>>print(a)
        300

和我們所描述的結果一致。

理解變量在計算機內存中的表示也非常重要。當我們輸入如下:

        >>> a='ABC'

這時,Python解釋器做了兩件事情:

(1)在內存中創建了一個’ABC’字符串。

(2)在內存中創建了一個名為a的變量,并把它指向’ABC'。

也可以把一個變量a賦值給另一個變量b,這個操作實際上是把變量b指向變量a所指向的數據,例如下面的代碼:

        >>> a='ABC'
        >>> b=a
        >>> a='XYZ'
        >>> print(b)

最后一行輸出變量b的內容到底是’ABC’還是’XYZ’呢?如果從數學意義上理解,就會錯誤地得出b和a相同,應該是’XYZ'。實際上,b的值是’ABC'。我們一行一行執行代碼,就可以看到到底發生了什么事。

執行a = 'ABC',解釋器創建了字符串’ABC’和變量a,并把a指向’ABC',如圖2-3所示。

圖2-3 a指向’ABC'

執行b = a,解釋器創建了變量b,并把b指向a指向的字符串’ABC',如圖2-4所示。

圖2-4 a、b指向’ABC'

執行a = 'XYZ',解釋器創建了字符串’XYZ',并把a的指向改為’XYZ',但b沒有更改,如圖2-5所示。

圖2-5 a指向’XYZ', b不變

最后輸出變量b的結果自然是'ABC'了。

2.3.2 變量名稱

程序常常選擇有意義的名稱作為變量名,以此標記變量的用途。

變量名是由數字或字符組成的任意長度的字符串,必須以字母開頭。使用大寫字母是合法的,但變量名建議使用小寫字母開頭。Python是區分大小寫的。舉個例子來說,Name和name是兩個不同的變量名。交互模式中輸入如下:

        >>> name='study python is happy'
        >>> Name='I agree with you'
        >>> print(name)
        study python is happy
        >>> print(Name)
        I agree with you

下劃線“_”可以出現在變量名中,經常用于連接多個詞組,如happy_study, do_it_with_more_practice。交互模式輸入如下:

        >>> happy_study='stay hungry stay foolish'
        >>> print(happy_study)
        stay hungry stay foolish

如果給變量取非法的名稱,解釋器就會顯示語法錯誤。請看下面的示例:

        >>> 2wrongtest='just for test'
        SyntaxError: invalid syntax

該示例提示語法錯誤,錯誤信息為無效的語法,原因為不是以字母開頭的。

        >>> xiaoming@me='surprised'
        SyntaxError: can't assign to operator

該示例提示語法錯誤,錯誤信息為不能做指定操作,原因是包含一個非法字符@。

Python不允許使用關鍵字作為變量名,請看下面的例子:

        >>> from='from'
        SyntaxError: invalid syntax

from是Python的一個關鍵字,因此出現錯誤。

Python 3中共有33個關鍵字,都不能作為變量名來使用。

    False    None      True    and     as      assert  break
    class    continue  def     del     elif    else    except
    finally  forfrom   global  if      import  in
    nonlocal lambda    is      not     or      pass    raise
    return   try      while    with    yield
主站蜘蛛池模板: 太和县| 龙州县| 固镇县| 塔城市| 陈巴尔虎旗| 梅河口市| 班戈县| 邢台市| 伊春市| 怀远县| 突泉县| 库伦旗| 泰安市| 汶上县| 诸暨市| 临漳县| 涞水县| 余姚市| 乌拉特后旗| 商丘市| 洞头县| 布拖县| 南岸区| 株洲市| 恩施市| 眉山市| 长沙市| 木兰县| 黔南| 化州市| 梅河口市| 扬州市| 瑞安市| 阳谷县| 德令哈市| 北碚区| 潍坊市| 秀山| 墨竹工卡县| 武鸣县| 屏东市|