python變量、常量、數據類型

一、變量

變量是存儲在內存中的值,這就意味著在創建變量時會在內存中開辟一個空間。

基于變量的數據類型,解釋器會分配指定內存,并決定什么數據可以被存儲在內存中。

因此,變量可以指定不同的數據類型,這些變量可以存儲整數,小數或字符等

變量賦值

Python 中的變量賦值不需要類型聲明。

每個變量在內存中創建,都包括變量的標識,名稱和數據這些信息。

每個變量在使用前都必須賦值,變量賦值以后該變量才會被創建。

等號?=?用來給變量賦值。

等號?=?運算符左邊是一個變量名,等號?=?運算符右邊是存儲在變量中的值。

這種變量本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。靜態語言在定義變量時必須指定變量類型,如果賦值的時候類型不匹配,就會報錯。例如Java是靜態語言,賦值語句如下(// 表示注釋):

int a = 123; // a是整數類型變量
a = "ABC"; // 錯誤:不能把字符串賦給整型變量

和靜態語言相比,動態語言更靈活,就是這個原因。

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

x = 10
x = x + 2

如果從數學上理解x = x + 2那無論如何是不成立的,在程序中,賦值語句先計算右側的表達式x + 2,得到結果12,再賦給變量x。由于x之前的值是10,重新賦值后,x的值變成12

最后,理解變量在計算機內存中的表示也非常重要。當我們寫:

a = 'ABC'

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

  1. 在內存中創建了一個'ABC'的字符串;

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

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

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

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

執行a = 'ABC',解釋器創建了字符串'ABC'和變量a,并把a指向'ABC'

py-var-code-1

執行b = a,解釋器創建了變量b,并把b指向a指向的字符串'ABC'

py-var-code-2

執行a = 'XYZ',解釋器創建了字符串'XYZ',并把a的指向改為'XYZ',但b并沒有更改:

py-var-code-3

所以,最后打印變量b的結果自然是'ABC'了。

多個變量賦值

Python允許你同時為多個變量賦值。例如:

a = b = c = 1

以上實例,創建一個整型對象,值為1,三個變量被分配到相同的內存空間上。

您也可以為多個對象指定多個變量。例如:

a, b, c = 1, 2, "john"

以上實例,兩個整型對象 1 和 2 分別分配給變量 a 和 b,字符串對象 "john" 分配給變量 c。

一個變量可以通過賦值指向不同類型的對象。

二、常量

所謂常量就是不能變的變量,比如常用的數學常數π就是一個常量。在Python中,通常用全部大寫的變量名表示常量:

PI = 3.14159265359

但事實上PI仍然是一個變量,Python根本沒有任何機制保證PI不會被改變,所以,用全部大寫的變量名表示常量只是一個習慣上的用法,如果你一定要改變變量PI的值,也沒人能攔住你。

最后解釋一下整數的除法為什么也是精確的。在Python中,有兩種除法,一種除法是/

>>> 10 / 3
3.3333333333333335

/除法計算結果是浮點數,即使是兩個整數恰好整除,結果也是浮點數:

>>> 9 / 3
3.0

還有一種除法是//,稱為地板除,兩個整數的除法仍然是整數:

>>> 10 // 3
3

你沒有看錯,整數的地板除//永遠是整數,即使除不盡。要做精確的除法,使用/就可以。

因為//除法只取結果的整數部分,所以Python還提供一個余數運算,可以得到兩個整數相除的余數:

>>> 10 % 3
1

無論整數做//除法還是取余數,結果永遠是整數,所以,整數運算結果永遠是精確的。

三、標準數據類型

計算機顧名思義就是可以做數學計算的機器,因此,計算機程序理所當然地可以處理各種數值。但是,計算機能處理的遠不止數值,還可以處理文本、圖形、音頻、視頻、網頁等各種各樣的數據,不同的數據,需要定義不同的數據類型。在Python中,能夠直接處理的數據類型有以下幾種:

Python3 中常見的數據類型有:

  • Number(數字)
  • String(字符串)
  • bool(布爾類型)
  • List(列表)
  • Tuple(元組)
  • Set(集合)
  • Dictionary(字典)

Python3 的六個標準數據類型中:

  • 不可變數據(3 個):Number(數字)、String(字符串)、Tuple(元組);
  • 可變數據(3 個):List(列表)、Dictionary(字典)、Set(集合)。

此外還有一些高級的數據類型,如: 字節數組類型(bytes)。

內置的 type() 函數可以用來查詢變量所指的對象類型。

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

此外還可以用 isinstance 來判斷:

>>>?a?=?111
>>>?isinstance(a,?int)
True
>>>

isinstance 和 type 的區別在于:

  • type()不會認為子類是一種父類類型。
  • isinstance()會認為子類是一種父類類型。
>>> class A:
...     pass
... 
>>> class B(A):
...     pass
... 
>>> isinstance(A(), A)
True
>>> type(A()) == A 
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False

Python3 中,bool 是 int 的子類,True 和 False 可以和數字相加,?True==1、False==0?會返回?True,但可以通過?is?來判斷類型。

在 Python2 中是沒有布爾型的,它用數字 0 表示 False,用 1 表示 True。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163381.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源Flutter on Desktop項目-極擴安卓開發者工具

極擴-安卓開發者工具 他能干嘛 這個Flutter on Desktop桌面項目可以輔助你開發APP&#xff0c;支持分析一些運行數據以及操作APK安裝等功能&#xff0c;甚至我還加入了Window安卓子系統的功能。 在它的幫助下&#xff0c;你可以快速查看當前正在運行的Activity&#xff0c;給你…

ubuntu/windows/mac小問題記錄

ubuntu刪除snap&#xff0c;釋放dev/mapper/ubuntu–vg-ubuntu–lv使用率100%問題。 當無法用常規方式卸載snapd。粗暴&#xff1a; 刪除 Snap 的目錄 rm -rf ~/snap sudo rm -rf /snap sudo rm -rf /var/snap sudo rm -rf /var/lib/snapd sudo rm -rf /var/cache/snapd刪除 S…

Oracle時間排序字段

要用 TIMESTAMP(6) 不要用 date 因為 date只到秒 &#xff0c;排序不準確

開發外賣霸王餐返利小程序的步驟有哪些?

外賣霸王餐返利小程序是一種基于社交電商模式的小程序&#xff0c;主要實現用戶和商家的共贏。 開發外賣霸王餐返利小程序的方案可以包括以下幾個步驟&#xff1a; 1、需求分析 明確外賣霸王餐返利小程序的功能和特點。確定用戶可以參與的活動類型、返利規則、用戶界面設計等…

Jmeter 分布式壓測

為什么要分布式 jmeter是100%純java開發的程序&#xff0c;虛擬用戶是以線程實現的&#xff0c;在大量并發情況下&#xff0c;很容易出現CPU、內存消耗過大的問題&#xff0c;甚至會出現java內存溢出。一般一臺電腦設置500-600線程數即可&#xff0c;如果超過1000線程&#xf…

vue - - - - - vue-qr插件生成二維碼

vue-qr插件生成二維碼 1. 安裝插件2. 組件使用示例圖&#xff1a;掃碼結果 1. 安裝插件 【vue-qr 官網地址】 npm install vue-qr --save // or yarn add vue-qr --save2. 組件使用 <template><vue-qr :logo-src"logoSrc":size"237":margin&qu…

php一句話木馬免殺

php一句話木馬免殺 針對于php一句話木馬做免殺&#xff1a; 利用php動態函數的特性&#xff0c;將危險函數拆分成字符&#xff0c;最終使用字符串拼接的方式&#xff0c;然后重新拼接&#xff0c;后加括號執行代碼&#xff0c;并且可以使用花指令進行包裝&#xff0c;如無限i…

Pol8891 規格書 ——圖像處理芯片/RGB轉MIPI支持圖像 90°/270°旋轉處理

一、芯片簡介 1、系統 高性能 MIPS 32bit CPU 內核&#xff1b; 高性能 DSP 內核圖像處理單元&#xff1b; 8KB 指令 Cache&#xff1b; 8KB 數據 Cache&#xff1b; 64KB OnChip SRAM&#xff1b; 內嵌 DDR3 控制器&#xff1b; 2、RGB 輸入 支持 RGB666、RGB888 輸入…

中電金信:《保險業監管研究及數字化轉型方向探索白皮書》

縱觀近二十年保險業從信息化向數字化的演進過程&#xff0c;我們感受到了數字化轉型階段性成果漸成的喜悅&#xff0c;同時也深深的體會到數字化轉型在“痛并快樂著”的歷程中的種種艱辛。當今世界正處于百年未有之大變局&#xff0c;隨著我國保險市場的供需格局演變和外部環境…

【Unity】EventSystem.current.IsPointerOverGameObject()對碰撞體起作用

本來我是用 EventSystem.current.IsPointerOverGameObject()來檢測是否點擊在UI上的&#xff0c;但是發現&#xff0c;他對我的碰撞體也是返回ture,研究半天。。。。找不出問題&#xff0c;然后發現我的相機上掛載了PhysicsRaycaster&#xff0c;去掉之后就好了&#xff0c;至于…

Mapbox中點圖層和面圖層點擊事件重疊,禁止點擊穿透方案

使用mapbox的小伙伴們可能都遇到過這個問題,就是當地圖上有兩個圖層,一個面圖層一個點圖層,二者相重合的時候。假設我們想點擊點位彈窗展示一些內容,也想點擊面圖層的時候彈窗展示一些內容,這時候一個有意思的問題就產生了,就是點擊點位彈窗的時候面圖層對應的彈窗也會彈…

計算二叉樹雙分支節點的個數(可運行)

如果對您有用&#xff0c;點個贊&#xff0c;關注一下哦&#xff01;畢竟像我這種不用付monyY的博主不多了&#xff0c;且行且珍惜吧&#xff01;俺只想要數據【偷笑】 運行環境.cpp 如果沒有輸出結果一定是建樹錯誤&#xff01;&#xff01;&#xff01;&#xff01;&#x…

libbz2 for Mac OS makefile

git地址&#xff1a;git://sourceware.org/git/bzip2.git a文件Makefile # ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip…

MySQL-01-MySQL基礎架構

1-MySQL邏輯結構 如果能在頭腦中構建一幅MySQL各組件之間如何協同工作的架構圖&#xff0c;有助于深入理解MySQL服務器。下圖展示了MySQL的邏輯架構圖。 MySQL邏輯架構整體分為三層&#xff0c;最上層為客戶端層&#xff0c;并非MySQL所獨有&#xff0c;諸如&#xff1a;連接處…

jar包打進本地倉庫

jar包打進本地倉庫 <dependency><groupId>com.test</groupId><artifactId>test-api</artifactId><version>1.0.0</version> </dependency>mvn install:install-file -Dfiletest.jar -DgroupIdcom.test -DartifactIdtest-api …

數據結構:鏈表

目錄 一.為什么要使用鏈表存儲數據&#xff1f; 二.鏈表的分類 單向或者雙向鏈表&#xff1a; 帶頭或者不帶頭&#xff1a; 循環或者非循環&#xff1a; 三.鏈表的實現 3.1無頭單向非循環鏈表的實現&#xff1a; 3.1.1單向無頭非循環鏈表的聲明 3.1.2動態申請一個節點 …

kmalloc

kmalloc(size(結構體)*n)就是申請n個大小為結構體的空間&#xff0c;然后返回一個指向這個空間的首地址的指針。這個指針可以看作是一個數組&#xff0c;它的每個元素都是結構體&#xff0c;所以可以使用索引來訪問這個空間的不同部分。例如&#xff0c;如果你有一個指針p&…

python數據類型之字符串、字典、元組

一、數字類型 1、number類型 Python Number 數據類型用于存儲數值。 數據類型是不允許改變的,這就意味著如果改變 Number 數據類型的值&#xff0c;將重新分配內存空間。 以下實例在變量賦值時 Number 對象將被創建&#xff1a; var1 1 var2 10也可以使用del語句刪除一些…

亞馬遜防關聯要注意什么?看這一篇,防關聯有技巧!

亞馬遜賬號關聯的問題&#xff0c;對于跨境電商來說都不陌生&#xff0c;店鋪的安全問題往往和賬號關聯有關&#xff0c;一旦亞馬遜賬號被關聯就很可能導致我們的店鋪被封&#xff0c;對于被亞馬遜封店的賣家都會有申訴機會&#xff0c;如果無法成功申訴&#xff0c;那將永久被…

C語言——利用函數遞歸,編寫函數不允許創建臨時變量,求字符串長度

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int my_strlen(char* str) {if(*str ! \0)return 1my_strlen(str1);elsereturn 0; }int main() {char arr[] "hello";int len my_strlen(arr); //arr是數組&#xff0c;數組傳參&#xff0c;傳過去的是第…