python學習筆記3---變數與運算子
阿新 • • 發佈:2018-12-17
什麼是變數
假設兩個list做數學運算
>>> [1,2,3,4,5,6] [1,2,3] Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> [1,2,3,4,5,6] [1,2,3] TypeError: list indices must be integers or slices, not tuple //A B,先把A乘以3,然後加上B,最後再加上列表A >>> [1,2,3,4,5,6]*3+[1,2,3]+[1,2,3,4,5,6] [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6] >>> A = [1,2,3,4,5,6] >>> print(A) [1, 2, 3, 4, 5, 6] >>> B = [1,2,3] >>> A*3 + B + A [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]
變數名的命名規則
變數名命名只能使用字母、數字、下劃線
>>> 1a = 2 //變數名的首字母不能是數字
SyntaxError: invalid syntax
>>> A2 = '1'
>>> _2 = '1'
>>> A*B='1'
SyntaxError: can't assign to operator
系統關鍵字,不能用在變數名中 保留關鍵字
>>> and = 1 SyntaxError: invalid syntax >>> if = 2 SyntaxError: invalid syntax >>> import = 3 SyntaxError: invalid syntax >>> type = 3 //type不是系統保留關鍵字,但是不建議作為變數名,否則極易出錯 >>> print(type) 3 >>> type = 1 >>> type(1) Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> type(1) TypeError: 'int' object is not callable >>> 1(1) Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> 1(1) TypeError: 'int' object is not callable
python動態語言的特性,宣告時不需要指明變數型別
>>> a = '1'
>>> a = 1
>>> a = (1,2,3)
>>> a = {1,2,3}
值型別與引用型別
int、str、tuple是值型別(不可變),list、set、dict是引用型別(可變)
1.int
>>> a = 1
>>> b = a
>>> a = 3
>>> print(b)
1
2.list
>>> a = [1,2,3,4,5] >>> b = a >>> a[0] = '1' >>> print(a) ['1', 2, 3, 4, 5] >>> print(b) ['1', 2, 3, 4, 5] >>> a = [1,2,3] >>> id(a) 4405825224 >>> hex(id(a)) '0x1069b8ec8' >>> a[0]='1' >>> id(a) 4405825224 >>>
3.str
>>> a = 'hello'
>>> a = a + 'python' //a加上一個新的字串,不再是原來的字串了
>>> print(a)
hellopython
>>> b = 'hello'
>>> id(b)
4405534032
>>> b = b + 'python' //加上新的字串後,id改變
>>> id(b)
4355329456
>>> 'python'[0]
'p'
>>> 'python'[0]='o'
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
'python'[0]='o'
TypeError: 'str' object does not support item assignment
4.tuple
>>> a = (1,2,3)
>>> a[0] = '1'
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
a[0] = '1'
TypeError: 'tuple' object does not support item assignment
>>> b = [1,2,3]
>>> b.append(4)
>>> print(b)
[1, 2, 3, 4]
>>> c = (1,2,3)
>>> c.append(4)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
c.append(4)
AttributeError: 'tuple' object has no attribute 'append'
>>> a = (1,2,3,[1,2,4])
>>> a[2]
3
>>> a[3]
[1, 2, 4]
>>> a[3][2]
4
>>> a = (1,2,3,[1,2,['a','b','c']])
>>> a[3][2][1]
'b'
>>> a = (1,2,3,[1,2,4])
>>> a[2] = '3'
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
a[2] = '3'
TypeError: 'tuple' object does not support item assignment
>>> a[3][2] = '4'
>>> print(a) //元組內的列表可變
(1, 2, 3, [1, 2, '4'])
運算子
1.算數運算子:+,-,* ,/,//,%,**
>>> 'hello'+'world'
'helloworld'
>>> [1,2,3]*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> 3-1
2
>>> 3/2
1.5
>>> 3//2 //整除
1
>>> 5%2 //求餘
1
>>> 2**2 //求N次方
4
>>> 2**5
32
2.賦值運算子:=,+=,-=,*=,/=,%=,**=,//=
>>> c = 1
>>> c = c+1
>>> print(c)
2
>>> c+=1
>>> print(c)
3
>>> c-=1
>>> print(c)
2
>>> c++ //python中沒有自增和自減運算子
SyntaxError: invalid syntax
>>> c--
SyntaxError: invalid syntax
>>> b=2
>>> a=3
>>> b+=a
>>> print(b)
5
>>> b-=a
>>> print(b)
2
>>> b*=a
>>> print(b)
6
3.比較(關係)運算子:==,!=,>,<,>=,<=
>>> 1==1
True
>>> 1>1
False
>>> 1>=1
True
>>> a>=b
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
a>=b
NameError: name 'a' is not defined
>>> a=1
>>> b=2
>>> a!=b
True
>>> b=1
>>> b+=b>=1 //b=b+True
>>> print(b)
2
>>> print(b>=1)
True
>>> 1>1
False
>>> 2>3
False
>>> 'a'>'b'
False
>>> ord('a')
97
>>> ord('b')
98
>>> 'abc'<'abd' //實際上是a和a比,b和b比,c和d比
True
>>> ord('abc')
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
ord('abc')
TypeError: ord() expected a character, but string of length 3 found
>>> ord('c')
99
>>> ord('d')
100
>>> [1,2,3]<[2,3,4]
True
>>> (1,2,3)<(1,3,2)
True
4.邏輯運算子:and,or,not
>>> True and True
True
>>> True and False
False
>>> True or False
True
>>> False or False
False
>>> not False
True
>>> not True
False
>>> not not True
True
0 被認為是False,非0 表示True
>>> 1 and 1
1
>>> 'a' and 'b'
'b'
>>> 'a' or 'b'
'a'
>>> not 'a'
False
>>> a = True
>>> b = False
>>> a or b
True
>>> b and a
False
空字串 False
>>> not 0.1
False
>>> not ''
True
>>> not '0'
False
空的列表 False
>>> not []
True
>>> not [1,2]
False
>>> [1] or []
[1]
>>> [] or [1]
[1]
>>> 'a' and 'b'
'b'
>>> '' and 'b'
''
>>> 1 and 0
0
>>> 0 and 1
0
>>> 1 and 2
2
>>> 2 and 1
1
>>> 0 or 1
1
>>> 1 or 0
1
>>> 1 or 2
1
5.成員運算子:in,not in
>>> a = 1
>>> a in [1,2,3,4,5]
True
>>> b = 6
>>> b in [1,2,3,4,5]
False
>>> b not in [1,2,3,4,5]
True
>>> b = 'h'
>>> b in 'hello'
True
>>> b not in (1,2,3,4,5)
True
>>> b not in {1,2,3,4,5}
True
>>> b = 'a'
>>> b in {'c':1}
False
>>> b = 1
>>> b in {'c':1}
False
>>> b = 'c'
>>> b in {'c':1} //字典裡面根據key返回
True
6.身份運算子:is,is not
物件的三個特徵:id、value、type,判斷id用“is”,判斷value用“==”,判斷type用“isinstance”
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a='hello'
>>> b='world'
>>> a is b
False
>>> c='hello'
>>> a is c
True
>>> a=1
>>> b=2
>>> a==b
False
>>> a=1
>>> b=1
>>> a is b
True
>>> a==b
True
>>> a=1
>>> b=1.0
>>> a==b
True
>>> a is b //is不是比較值相等,比較的是兩個變數的身份(記憶體地址)是否相等
False
>>> id(a)
4374928384
>>> id(b)
4376239272
>>> a={1,2,3}
>>> b={2,1,3}
>>> a==b //集合是無序的
True
>>> a is b
False
>>> id(a)
4433997384
>>> id(b)
4433996488
>>> c=(1,2,3)
>>> d=(2,1,3)
>>> c==d //元組是序列,是有序的
False
>>> c is d
False
>>> a=1
>>> b=2
>>> a==b
False
>>> a is b
False
>>> a = 'hello'
>>> type(a) == int
False
>>> type(a) == str
True
>>> isinstance(a,str) //isinstance是判斷變數型別的函式
True
>>> isinstance(a,int)
False
>>> isinstance(a,(int,str,float))
True
>>> isinstance(a,(int,float))
False
7.位運算子:(把數字當作二進位制數進行運算)
- &按位與
- |按位或
- ^按位異或
- ~按位取反
- <<左移動
- >>右移動
按位與運算,每一個二進位制數位進行對比,兩個都為1,則得到1,只要有一個為0,就得到0
>>> a = 2
>>> b = 3
>>> a & b
2
變數 | 轉換為十進位制 | ||
---|---|---|---|
a | 1 | 0 | 2 |
b | 1 | 1 | 3 |
按位與 | 1 | 0 | 2 |
按位或運算,每一個二進位制數位進行對比,只要有一個為1,就得到1,兩個都為0,則得到0
>>> a = 2
>>> b = 3
>>> a | b
3
變數 | 轉換為十進位制 | ||
---|---|---|---|
a | 1 | 0 | 2 |
b | 1 | 1 | 3 |
按位或 | 1 | 1 | 3 |