iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0
AI & Data

30天 python 學習心得分享系列 第 9

Day9- Python 運算式介紹

基本上運算式與其他語言並無太大區別,大致條列一下

算術運算式

  • = : 指定值給變數
  • +,-,*,/ : 加,減,乘,除
  • // : 整除
  • ** : 次方
  • % : 取餘數
  • - : 負數
a = 10
b = 5
c = 3

print(a + b)
print(a - b)
print(a * b)
print(a / b) # 注意!運算後型態為float
print(b ** 2)
print(a % c)
print(a // c) #型態為整數

#輸出:
#15
#5
#50
#2.0
#25
#1
#3

關係運算式

  • > : 大於
  • < : 小於
  • == : 等於
  • != : 不等於
  • >= : 大於等於
  • <= : 小於等於

注意! 關係運算式返回結果為布林值True/False

a = 10
b = 5
c = 3

print(a > b)
print(a < b)
print(a == b)
print(a != b)
print(b >= 5)
print(b >= 6)
print(c <= 3)
print(c <= 5) 

#輸出:
#True
#False
#False
#True
#True
#False
#True
#True

邏輯運算式

  • and : 且
  • not : 否
  • or : 或
  • is : 是
a = 10
b = 5
c = 3

print(a > b and a > c)
print(a > b or a > c)
print(not a < b)

#輸出:
#True
#True
#True

其中is比較特別,在is==有何差異呢? 以下我們來測試看看
判斷數值與字串

a = 256
b = 256
d = '123'
c = '123'

print(a is b)
print(a == b)
print(d is c)
print(d == c)

#輸出:
#True
#True
#True
#True

但在判定物件時就不同了,範例如下

x = [4,5,6]
y = x
z = [4,5,6]

print(x is y)
print(x is z)
print(x == z)

#輸出:
#True
#False
#True

其原因是Python中對象包含的三個基本要素,分別是:id(記憶體位置)、python type()(數據類型)和value(值)

  • ==依據value進行判別
  • is依據id進行判別

這就涉及到資料結構的部分python可以使用id()函式取的物件的id(記憶體位置),我測試後發現數值與字串中同值會存放於同id,測試如下

a = 257
b = 257
print(id(a))
print(id(b))

#輸出:
#4555684016
#4555684016

d = '123'
c = '123'
print(id(d))
print(id(c))

#輸出:
#4555785752
#4555785752

x = [4,5,6]
y = x
z = [4,5,6]

print(id(x))
print(id(y))
print(id(z))

#輸出:
#4555793480
#4555793480
#4555644360

從測試結果來看可以發現字串及數值在值相同時都是相同id所以使用is判斷時等同於==
物件x與z的id並不相同所以用is判斷結果會為False.

文章內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!


上一篇
Day8- 容器資料型態Tuple、Dict、Set介紹
下一篇
Day10-內建函數以及自訂函數
系列文
30天 python 學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Percy
iT邦新手 5 級 ‧ 2018-10-23 20:09:54

看到 id 讓我想起曾經玩過的 id 特例

>>> a=5
>>> b=5
>>> id(a), id(b) # 等於
(1720937632, 1720937632)
>>> a,b = 257,257
>>> id(a), id(b) # 等於
(2262236076624, 2262236076624)
>>> a = 257
>>> b = 257
>>> id(a), id(b) # 不等於
(2262236077264, 2262236076560)
wayneli iT邦新手 5 級 ‧ 2018-10-23 21:44:33 檢舉

這個特例在找資料時也有看到
但實作一次竟然發現他又等於了
也不曉得原因~~

a = 257
b = 257
print(id(a), id(b))
print(a is b)

https://ithelp.ithome.com.tw/upload/images/20181023/201105034US4FIy5n3.jpg

真的蠻怪的

我要留言

立即登入留言