變數
python3中變數的定義是不固定型別的(動態),區分大小寫
值型別 | 引用型別 |
---|---|
不可變的(值型別) | 可變的(引用型別) |
int (整型) | list (列表) |
str (字串) | set (集合) |
tuple (元組) | dict (字典) |
- 通過內建函式
id()
,可以知道變數在記憶體的位置
b = "icessun"
b = b + "hello"
print(b)
>>> "icessunhello" # 不是說字串是不可變的嘛?怎麼改變了
如果字串可以改變,那麼可以使用索引值給字串賦值"python"[0] = `h` -----> 報錯
,會發現報錯,是不行的。
上面程式的結果是因為,+
連線符,把兩個字串連線起來了,連結起來的值重新賦值給了b元素,使用id(b)
函式,會發現其實上面兩個b變數在記憶體的位置是不一樣的,所以第一個b變數的值沒有改變,被覆蓋了。
- 乘方的表示法 :
2**5 ----> 2的5次方=32
身份運算子
is / not is
a = (1,2,3)
b = (1,3,2)
print(a is b) # 元組是不可變的
print(a == b) # 元組是有序的,值是不相等的
>>> False False
# 集合
a = {1,2,3}
b = {1,3,2}
print(a==b) # 集合是無序的,所以值是相等的
print(a is b)
>>> True False
# 字串,數字 兩個取值相等,則is 返回True,但是數字有特殊
a = `icessun`
b = `icessun`
print(a is b)
>>> True
a = 1
b = 1
c = 1.0
print(a==b)
print(a==c
print(a is b)
print(a is c)
>>> True True True False
從上面可以看出,元組是不可變的,改變裡面元素的位置就變成了兩個新的元組。is
不是比較兩個變數的值是否相等,而是比較變數在記憶體的地址是否相等,算術運算子==
是比較值是否相等的
物件的三個特性 | 一切都是物件 |
---|---|
id()函式:變數在記憶體的地址 | is :身份運算子 |
type()函式:型別判斷函式 | isinstance(變數,(int,str,float….)) |
value值的比較 | == :算術比較符 |
成員運算子
判斷一個變數是否在一個變數裡面
in / not in
b= `a`
b in {`c`:1}
>>> False
b=1
b in {`c`:1}
>>> False
b=`c`
b in {`c`:1}
>>> True
- 優先順序:not > and > or
程式碼編寫
- 縮排來區分程式碼塊,沒有大括號
{ }
-
pass
:佔位語句 - 常量一般大寫
- 單行註釋:
#
;推薦在這行語句的開頭寫,與上一條語句有空格 - 多行註釋:
```註釋內容```
- 程式碼後面不需要分號,有也可以
- 例項化一個物件,不需要
new
關鍵詞
if else / elseif
a = input()
a = int(a)
print(`a is ` + str(a))
if a==1:
print(`apple`)
elif a==2:
print(`orange`)
elif a==3:
print(`banana`)
else:
print(`shoppingp`)
# 使用 if else
if a==1:
print(`apple`)
else:
if a==2:
print(`orange`)
else:
if a==3:
print(`banana`)
else:
print(`shopping`)
input()
接收使用者的輸入,elif
功能類似於switch
功能;int(a)
:因為終端輸入的是字串,所以應該強制轉為數字進行比較print(`a is ` + str(a))
:字串的拼接只能兩者都是字串,否者會報錯
for 變數 in 迴圈體
主要用來遍歷迴圈:序列List,集合Set,字典Dict
a = [[`apple`,`orange`,`banana`,`grape`],(1,2,3)]
for x in a:
for y in x:
if y==`orange`:
break # continue
print(y) # 預設是換行(print(y,end=`/n`))輸出的,要想不換行:print(y,end=` `);故可以在end裡面新增其他的符號來連線字元
else:
print(`fruit is gone`)
>>> apple 1 2 3 fruit is gone
break
跳出裡面的for迴圈,但是外面的for迴圈沒有跳出,還是會執行;和else配對的是外面的for迴圈,所以依然會執行;要是在外層的for迴圈裡面加入break,那麼就不會執行else語句;for迴圈後面有else語句,當迴圈執行完畢,也會依然接著執行else語句,所以會輸出fruit is gone;一般不推薦在for迴圈後面使用else語句
- 迴圈中使用
range()
函式
for x in range(0,10):
print(x,end=`|`)
>>> 0|1|2|3|4|5|6|7|8|9|
for x in range(10,0,-2):
print(x,end=`|`)
>>> 10|8|6|4|2|
# 列印列表a中所有的基奇數項
a=[1,2,3,4,5,6,7,8]
# 迴圈+range()函式的方法
for x in range(0,len(a),2):
print(a[x])
# 列表的切片的方法
print(a[0:len(a):2])
>>> [1,3,7]
range()
函式的作用類似於其他語言中的for(i = 初始值;i < 長度;i ++)
;裡面可以傳入兩個或者三個引數,兩個引數的時候表示的是:初始值,長度;傳入三個引數的時候表示的是:初始值,長度,步長
序列解包
def ice(a,b):
a1=a*3
b1=b*2+10
return a1,b1
ice_a1,ice_b1 = ice(3,6)
print(ice_a1,ice_b1)
>>> 9 22
a=1
b=2 ====> a,b,c=1,2,3 或者 (1,2,3) 當abc都相等的時候:a=b=c=1 或者 a,b,c=1,1,1
c=3
序列解包:就是當一個函式有多個返回值的時候,不需要使用一個變數接收到所有的返回值,然後又重新遍歷返回值,取到對應的返回值;只需要使用和返回值個數對等的變數依次接收就行;當然只是針對返回值是值型別的函式。個數相等,順序對應
當在函式引數裡面使用的時候,可以在實參裡面修改預設值;在呼叫函式傳入引數的時候,明確告訴實參,形參給傳的是那個實參的值sum(y=3,x=2)