常量與變數
- 變數不需要宣告類型
- python用$=$給變數賦值,用$==$比較兩個值是否相等,相等返回True,不等返回False。
- 變數使用前必須賦值(不同於C),變數只有賦值後才會被創建。
- 變數未定義異常
>>> age
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
常量——不變的變數 python沒有任何機制保證變數不會改變對象,被改變時沒有報錯,沒有C的const,所以使用時需要萬分小心
賦值方式
賦值運算符$=$為==右結合性==
單個賦值
- age = 18
批量賦值
- a = b = c = 1
- 這在C/C++中想都不敢想:(
- a = b = c = 1
先計算再賦值
- age = 17+1
分別賦值
- a,b,c=1,2,3
- a == 1,b == 2,c == 3
當我們寫:a = “Jack” 時,Python解釋器幹了兩件事情: 在內存中創建了一個’Jack’的字串對象(常量); 在內存中創建了一個名為a的變數,並把它指向 ‘Jack’。 而當你把一個變數a賦值給另一個變數b,這個操作實際上是==將變數b指向變數a所指向的數據==,例如下面的代碼:
- a,b,c=1,2,3
>>> a = "Jack"
>>> a
'Jack'
>>> b = a
>>> b
'Jack'
>>> id(a)
4332916664
>>> id(b)
4332916664
id()函數用於查看變數內存地址 [[基礎函數#id()]]
- 若把另一個變數賦給a,則id(a)改變而id(b)不變
>>>a = "Ross"
>>>a
'Ross'
>>>id(a)
另一個數(不同於4332916664)
變數與對象
Python中一切皆為對象,數字是對象,列表是對象,函數也是對象,任何東西都是對象。而變數是對象的一個引用(也可以稱為標籤或者名字),對象的操作都是通過引用來完成的。
例如
>>>a = 1
- 其中,數字1是對象,a是變數(變數名)
- 賦值操作$=$是將一個名字綁定到一個對象上(給對象1加上標籤a)。
- 顯然,對象可以綁定多個標籤(變數)。但是一個變數只能綁定一個對象。
- 變數本身沒有類型,類型儲存於對象中由對象類型決定
- 所以python不需要提前宣告變數類型,會自動判斷對象數據類型,這點與C/C++區別極大
字串
- python中不對單字符和字串做區分
- 可以用單引號$''$或雙引號$""$來創建字串(不能一單一雙!)
- 三個單引號或三個雙引號可以創建多行字串
>>>name_1='Jack'
>>>name_2="Rose"
>>>sentence_1='''Rose,
Jack,
You jump,
I jump!'''
>>>sentence_2="""Life is short,
you need Python."""
#完美運行!
- 想要使用引號可以加上轉義符"\" [[基礎函數#字串函數]]
字串格式化
%方法
$$print('My\ wife\ is\ \%c,she\ is\ \%d.\ '\%(name,age))$$- $\%$後面是一個tuple|dict,用來傳遞需要格式化的值
- 佔位符種類: ![[Pasted image 20230628233506.png]]
>>>name='布洛妮婭'
>>>age=18
>>>print('My wife`s name is %s,she is %d years old.'%(name,age))#按順序%對應於字串後面%()中的內容
My wife`s name is 布洛妮婭,she is 18 years old.
- 進階
- $$\%[數據名稱][對齊標誌][寬度].[精度][類型]$$
- 數據名稱用於dict賦值,若為數組則不需填寫
- 對齊標誌
- +:顯示正負符號
- -:左對齊
- space:正整數前加上一個space以和負數對齊
- 0:正整數前加一個0以和負數對齊
- 寬度:格式化後字串長度,不足補0或空格
- 精度:小數點後位數
- 數據類型:佔位符種類
format
- 在字串中,使用$\{ \}$進行佔位,然後在字串後跟上 $.format()$函數,這個函數的參數就是我們要往字串中填充的變數。
>>>name='琪亞娜'
>>>age=18
>>>print('My wife is {},she is {}.'.format(name,age))#按順序依次填充
>>>print('My wife is {1},she is {0}.'.format(age,name))
'''
可以在{}內使用索引
其中{}內數字為.format()元組/字典下標
'''
>>>print('My wife is {name},she is {age}.'.format(name=name,age=age))#也可以直接用變數名替代(按對象屬性映射)
>>>print('My wife is {name},she is {age}.'.format(name='琪亞娜',age=18))#按關鍵字映射
>>>list1=['琪亞娜',18]
>>>print("My wife is {0[0]},she is {0[1]}.".format(list1))#通過dict下標映射
- 進階
- $$\{:[填充字符][對齊方式][符號標誌][\#][寬度][,][.精度][類型]\}$$
- 填充字符:不寫默認用space填充
- 對齊方式
- ^:置中對齊
- $`<$:左對齊
- $`>$:右對齊
- 符號標誌
- +:顯示正負號
- space:正整數前加上一個space以和負數對齊
- $\#$:表示是否在二進制、八進制、十六進制前顯示0b、0o、0x
- 寬度:輸出字串總寬度
- $,$:開啟使用千位分隔符
- 精度:小數點後位數
- 類型:佔位符類型
f-string
Formatted String Literals(字面量格式化字串),簡稱f-string,僅Python3.6支持 在字串前加上$f$,開啟$f-string$,就可以直接在$\{\}$內使用變數
>>>print(f'My wife is {name},she is {age}.')
- f-string同樣支持format格式控制參數 $$\{變數名:[填充字符][對齊方式][符號標誌][\#][寬度][,][.精度][類型]\}$$
⭐切片
- 可切片對象:字串,元組,列表 $$name[a:b:c]$$
- 選取區間為$[a,b)$包括a不包括b。不寫a默認從0開始,不寫b默認到末尾結束。
- c為步長,切片間隔,省略不寫時默認為1。 ==當c為負數時,從後往前切片==
>>>name="polaris"
>>>print(name[1:3])
'ol'
>>>print(name(::-3))
'sap'
'''
'ris'取s,'ola'取a,'p'取p
'''
>>>print(name[::-1])
'siralop'
#字串反轉
- 切片操作不改變原對象,可通過切片賦值創建副本
>>>x=[2,3,6,2,5]
>>>y=x[:]
>>>y.sort()
>>>print x
[2,3,6,2,5]
>>>print y
[2,2,3,5,6]
整數,浮點數,複數
整數(Int)
- 0x十六進制
- 0o八進制
浮點數(Float)
- 小數形式
- 科學計數法,10用e代替
- eg.1.23e-6
複數(Complex)
- 實部+虛部,a+bj
- complex(a,b)
- a&b均為浮點型
[[基礎函數#type()]]
取模(相除取整數部分)
$$a//b$$取餘
$$a\%b$$絕對值
>>>a=10
>>>b=3
>>>a//b
3
>>>a%b
1
布爾值與空值
- True:真(非0數值,默認1)
- False:假(=0數值,默認0)
- None:空值,不是0(整型),不為布爾類型而是NoneType
- 注意事項
- 首字母大寫
- 所有的計算結果,判斷表達式調用返回值是True或者False的過程都可以稱為布爾運算,例如比較運算。
- 以下會轉換為假值
- 0、0.0、-0.0
- None
- 空字串、空列表、空元組、空字典
- 以下會轉換為真值
- -1、1或者其他非0數值
- 所有非空字串,包括
"False" - 所有非空字典、非空列表、非空集合,非空元組
- 布爾值可進行四則運算,True == 1,False == 0
布爾運算
- 與 $and$
- 只有所有都為True,and運算的結果才是True
- 或 $or$
- 只要其中有一個為True,or運算結果就是True
- 非 $not$
- 單目運算符,把True變成False,False變成True [[基礎函數#數值處理函數]]
運算符
Python語言支持以下類型的運算符:
- 算術運算符
- 比較(關係)運算符
- 賦值運算符
- 邏輯運算符
- 位運算符
- 成員運算符
- 身份運算符
- 運算符優先級
算術運算符
- $**$:冪,$x**y$返回x的y次冪 ==從右往左結合==(右結合性)
>>>2**2**3
256
>>>(2**2)**3
64
>>>2**(2**3)
256
- $//$:取模,返回商的整數部分
- 整數與浮點數混合運算時,整數轉化為浮點數運算
比較運算符
- $==$:比較兩對象是否相等 ==python比較運算符可以連用== $$a>b==c等價於a>b\ and\ b==c$$
賦值運算符
- $**=$:冪賦值運算符, $$c**=a等價於c=c**a$$
- $//=$:取整除賦值運算符, $$c//=a等價於c=c//a$$
- «=:左移賦值 $$a<<=2等價於a=a<<2$$
=:右移賦值
- &=:按位與賦值 $$a\&=b等價於a=a\&b$$
- |=:按位或賦值
- ^=:按位異或賦值
位運算符
- $\&$:按位與==右結合性==
- $|$:按位或
- ^:按位異或
- ~:按位取反==右結合性==
- $<<$:左移
- $>>$:右移
邏輯運算符
- $and$:布爾與
- x and y,若x為False,則返回False,否則返回y的計算值
- $or$:布爾或
- x or y,x非0返回x的值,否則返回y計算值
- $not$:布爾非
- not x,x為True返回False,x為False返回True
- ==右結合性==
>>>True and True
True
>>>True and False
False
>>>False and True
False
>>>True and 0+3
3
>>>True or False
True
>>>0 or True
True
>>>0 or 0
0
>>>False or 31
31
>>>not 3
False
成員運算符
- $in$:x in Y(x為對象或變數名,Y為字串、字典或元組),在指定序列中找到x則返回True,否則返回False
- $not\ in$:x not in Y,沒找到返回True
身份運算符
- $is$:判斷兩個標識符是否引用自同一對象,即本質是否相同
- x is y,if id(x)== id(y),return True
- $is\ not$:if id(x) != id(y),return True
⭐運算符優先級
- ():小括號
- $[\ ]$:索引運算符
- x.attribute:屬性訪問
- $**$:指數運算
- ~:按位取反
- +@、-@:==一元==加減號(正負號)
- +@,-@為==右結合性==一元運算符
- $*$、/、%、$//$:乘除,取餘,取模
- +、-:二元加減
- «、»:位運算左移右移
- &:按位與
- ^:按位異或
- |:按位或
- $<,<=,>,>=,==,!=$:比較運算符
- =,+=,-=……:賦值運算符
- is,is not:身份運算符
- in,not in:成員運算符
- not:非
- and:與
- or:或
- $,$:逗號運算符

何時一樽酒,重與細論文。