亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python基礎---變量

系統 1573 0

Python基礎---變量

什么是變量:

用來綁定數據對象的標識符

一.變量的命名規則:

  • 變量名必須為字母或下劃線開頭,后跟字母或下劃線或數字
  • 不能使用python的關鍵字命名
  • 命名規則可以被視為一種?慣例,并無絕對與強制
  • 目的是為了 ? 增加代碼的識別和可讀性
  • 在定義變量時,為了保證代碼格式,= 的左右應該各保留一個空格
  • 在Python中,如果變量名需要由?二個?或?多個單詞 組成時,可以按照以下方式命名
  1. 每個單詞都使用小寫字母
  2. 單詞與單詞之間使用?_下劃線?連接
  3. 例如:first_name、ast_name、qq_number、qq_password
  • 當?變量名是由二個或多個單詞組成時,還可以利用駝峰命名法來命名
  1. 小駝峰式命名法:第一個單詞以小寫字母開始,后續單詞的首字母大寫。例如:firstName、lastName
  2. 大駝峰式命名法:每一個單詞的首字母都采用大寫字母。例如:FirstName、LastName、CamelCase
                
                  #
                
                
                  合法的變量命名示例:
                
                
                  
a   a1  b  bbb  _aaa_ _Abcdvara1b2c2


                
                
                  #
                
                
                  不合法的變量命名示例:
                
                
                  
1a  
                
                123  $ABC +a -b  
                
                  #
                
                
                  ab @ab
                
              

關鍵字:

  • 關鍵字就是在Python內部已經使用的標識符
  • 關鍵字具有特殊的功能和含義
  • 開發者不允許定義和關鍵字相同的名字的標示符

查看關鍵字:

                
                  import
                
                
                   keyword

                
                
                  print
                
                
                  (keyword.kwlist)

                
                
                  #
                
                
                  ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
                
              

二.變量的賦值:

賦值語法:

                變量名=
                
                  表達式

變量名1
                
                =變量名2=
                
                  表達式

變量名1,變量名2,...
                
                =
                
                  序列

變量名1,變量名2,...
                
                =
                
                  對象1,對象2...

變量名1,變量名2,...
                
                =
                
                  [對象1,對象2...]

變量名1,變量名2,...
                
                =(對象1,對象2...)
              

作用: 用于創建變量并將變量綁定(或關聯)在一個對象上

說明:

  • 當變量不存在時,創建該變量同時綁定在這個對象上
  • 當變量存在時,改變此變量的綁定的對象
  • 一個變量只能綁定一個對象
  • 兩個變量可以同時綁定一個對象

示例:

                a=10      
                
                  #
                
                
                  創建a變量,和整型對象10綁定在一起
                
                
                  
b
                
                =20
                
                  

c
                
                =a+b   
                
                  #
                
                
                  創建變量c,和10+20的計算結果綁定在一起
                
              

名詞解釋:

關聯/綁定/引用在python中的含義,變量是沒有類型的,關聯/綁定/引用都是指變量和一個對象的關聯關系

可以通過help('__main__')來查看當前模塊下的數據關聯關系

三.python的自動化內存管理:

python 的內存管理和引用計數

每個對象都會記錄有幾個變量引用自身,當引用的數量為0時,則對象被銷毀,此種自動化內存管理的方式叫引用計數。

                a = 10000
                
                  
b 
                
                = 20000
                
                  

a 
                
                = a + b 
                
                  #
                
                
                   發生了什么?
                
                
c = a 
                
                  #
                
                
                   發生了什么?
                
                
                  #
                
                
                  a = 10000 內存中創建一個10000對象,用變量a和10000綁定綁定
                
                
                  
#
                
                
                  b = 20000 內存中創建一個 20000對象,用變量b和20000對象綁
                
                
                  
#
                
                
                  a = a + b 計算對象a 和 b 的和,創建一個30000的對象,a 解除與10000對象的綁定,重新綁定30000這個對象
                
                
                  #
                
                
                  c = a 變量c和變量a綁定同一個對象
                
              

變量的交換綁定

                
                  #
                
                
                  練習:已知有兩個變量:a 綁定 10000 b 綁定 20000
                
                
                  
#
                
                
                  問:在不創建任何新的對象的情況下,如何讓a和b 交換綁定的對象?
                
                
                  
#
                
                
                  方法1:
                
                
a = 10000
                
                  
b 
                
                = 20000
                
                  
temp 
                
                = a 
                
                  #
                
                
                  借助第三個變量,經典交換算法
                
                
a =
                
                   b
b 
                
                =
                
                   temp


                
                
                  #
                
                
                  方法2:序列賦值 
                
                
a, b = b , a
              

四.變量的is與==

  • is 比較的是兩個實例對象是不是完全相同,它們是不是同一個對象,占用的內存地址是否相同。萊布尼茨說過:“世界上沒有兩片完全相同的葉子”,這個is正是這樣的比較,比較是不是同一片葉子(即比較的id是否相同,這id類似于人的身份證標識)。
  • == 比較的是兩個對象的內容是否相等,即內存地址可以不一樣,內容一樣就可以了。這里比較的并非是同一片葉子,可能葉子的種類或者脈絡相同就可以了。默認會調用對象的?__eq__()方法。

獲取對象的內存地址: id 函數
格式: id(對象)
作用: 返回一個對象在內存中的地址

可以通過如下例子來區分比較下:

                >>> a = [
                
                  "
                
                
                  I
                
                
                  "
                
                , 
                
                  "
                
                
                  love
                
                
                  "
                
                , 
                
                  "
                
                
                  Python
                
                
                  "
                
                
                  ]

                
                >>> b =
                
                   a

                
                
                  #
                
                
                   a的引用復制給b,在內存中其實是指向了用一個對象
                
                
>>> b 
                
                  is
                
                
                   a
True

                
                >>>
                
                   id(a)

                
                46381384
>>>
                
                   id(b)

                
                46381384

                
                  #
                
                
                   當然,內容也肯定是相等的
                
                
>>> b ==
                
                   a
True
                
              

可以發現b和a的內存地址是相同的,它們指向同一塊內存,因而 is 和 == 的結果都為True。這是因為直接賦值都是賦值的引用,是引用,是引用,重要的事情說三遍。

但如果不是通過引用賦值,而是通過切片賦值呢?

                
                  #
                
                
                   b通過切片操作重新分配了對象,但是值和a相同
                
                
>>> b =
                
                   a[:]

                
                >>> b 
                
                  is
                
                
                   a
False

                
                >>>
                
                   id(a)

                
                48740680
>>>
                
                   id(b)

                
                48740680
>>> b == a 
                
                  #
                
                
                   但他們的值還是相等的
                
                
True
              

新建對象之后,b 和 a 指向了不同的內存,所以 b is a 的結果為False,而 b==a的結果為True。

在這里,小編提一個問題,b[0] is a[0] 的結果呢?

答案是True。

因為切片拷貝是淺拷貝,列表中的元素并未重新創建。

通常,我們關注的是值,而不是內存地址,因此 Python 代碼中 == 出現的頻率比 is 高。

但是什么時候用 is 呢?

is 與 == 相比有一個比較大的優勢,就是計算速度快,因為它不能重載,不用進行特殊的函數調用,少了函數調用的開銷而直接比較兩個整數 id。而 a == b 則是等同于a.__eq__(b)。繼承自 object 的?__eq__?方法比較兩個對象的id,結果與 is 一樣。但是多數Python的對象會覆蓋object的 ? __eq__方法,而定義內容的相關比較,所以比較的是對象屬性的值。

在變量和單例值之間比較時,應該使用 is。

目前,最常使用 is 的地方是判斷對象是不是 None。

下面是推薦的寫法:

                a 
                
                  is
                
                 None
              

判斷不是None的推薦寫法是:

                a 
                
                  is
                
                
                  not
                
                 None
              

Python會對比較小的整數對象進行緩存,下次用的時候直接從緩存中獲取,所以is 和 == 的結果可能相同:

                >>> a = 1
>>> b = 1
>>> a 
                
                  is
                
                
                   b
True

                
                >>> a ==
                
                   b
True
                
              

而看一下另外一段代碼:

                >>> a = 257
>>> b = 257
>>> a 
                
                  is
                
                
                   b
False
                
              

原因:

Python僅僅對比較小的整數對象進行緩存(范圍為范圍[-5, 256])緩存起來,而并非是所有整數對象。需要注意的是,這僅僅是在命令行中執行,而在Pycharm或者保存為文件執行,結果是不一樣的,這是因為解釋器做了一部分優化。

總結

  • is 比較兩個對象的 id 值是否相等,是否指向同一個內存地址;
  • == 比較的是兩個對象的內容是否相等,值是否相等;
  • 小整數對象[-5,256]在全局解釋器范圍內被放入緩存供重復使用;
  • is 運算符比 == 效率高,在變量和None進行比較時,應該使用 is。

五.變量的刪除

del 語句(del 是 delete 的簡寫)
作用: 用于刪除變量,同時刪除與對象的綁定關系。如果可能則釋放對象
語法: del 變量名


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产美女激情视频 | 国产精品欧美亚洲韩国日本久久 | 精品久久久久久中文字幕女 | 国产日韩欧美综合一区二区三区 | 久久成人国产精品二三区 | 综合 欧美 国产 视频二区 | 国产成人mv在线观看入口视频 | 国产精品麻豆高清在线观看 | 九九精品国产 | 亚洲精品乱码久久久久久蜜桃欧美 | 伊人久久综合谁合综合久久 | 亚洲va在线va天堂成人 | 97国产在线观看 | 日本在线亚州精品视频在线 | 色资源在线观看 | 久久亚洲综合 | 九九影院理论片 | 久久狠狠第一麻豆婷婷天天 | 天天看片天天爽 | 成人一级免费视频 | 在线免费国产视频 | 国产日韩欧美综合一区 | 中文字幕一区精品 | 国产成+人+综合+亚洲不卡 | 男女一级做片a性视频 | 99热在线观看免费 | 国产一区二区亚洲精品 | 中文字幕在线永久 | a毛片在线还看免费网站 | 一级色视频 | 亚洲人xxx日本人18 | 久久99精品久久久久久国产越南 | 伊人222综合| 狠狠色婷婷丁香综合久久韩国 | 精品久久中文网址 | 999国产精品999久久久久久 | 日韩欧美国产一区二区三区四区 | 欧美日韩国产高清精卡 | 国产精品美女 | 亚洲精品午夜久久久伊人 | 欧美日韩视频在线成人 |