Python變量和運算符

變量的命名規則

  • 由數字、字母、下劃線構成,其中數字不能開頭
  • 系統關鍵字不能用在變量名中(保留關鍵字)
  • python中區分大小寫
# 變量
a = [1, 2, 3, 4]  # 定義一個變量
type = 1
print(type)
type(1)  # 此時的type是1 至關因而1(1) 所以int 不是可調用的

# 輸出結果
1
TypeError: 'int' object is not callable

值類型和引用類型

  • 常見的值類型:int str tuple 不可改變
  • 常見的引用類型:list set dict 可改變
# 值類型
a = 1
b = a
a = 3
print(a)
print(b)

# 引用類型
list1 = [1, 2, 3, 4]
list2 = list1
list1[1] = '2'
print(list1)
print(list2)

# 輸出結果
3
1
[1, '2', 3, 4]
[1, '2', 3, 4]

上述值類型和引用類型要進行區分,其中值類型會常見一塊新的內存空間來存儲,對於引用類型僅僅是一個指針,指向的仍是同一個內存區域python

string = 'hello'
id(string)  # id方法能夠展現出來某個變量在內存中的地址
string = string + ' python'
id(string)    # 能夠發現string已經發生了改變 指向了一個新的內存區域
string[0] = 'a'  # str一旦定義 不可改變

# 輸出結果
57705504
12109688
'str' object does not support item assignment

tuple list類型區別

list 是可變的對象,元組 tuple 是不可變的對象安全

因爲 tuple 不可變,因此使用 tuple 可使代碼更安全多線程

tuple 不可變的好處併發

相對於 list 而言,tuple 是不可變的,這使得它能夠做爲 dict 的 key,或者扔進 set 裏,而 list 則不行。app

tuple 放棄了對元素的增刪(內存結構設計上變的更精簡),換取的是性能上的提高:建立 tuple 比 list 要快,存儲空間比 list 佔用更小。因此就出現了「能用 tuple 的地方就不用 list」的說法。性能

多線程併發的時候,tuple 是不須要加鎖的,不用擔憂安全問題,編寫也簡單多了。測試

# 不可修改值
a = [1, 2, 3]
print(id(a))
print(hex(id(a)))
a[0] = '1'
print(id(a))

a= (1, 2, 3)
a[0] = '1' # error

# append 操做
b = [1, 2, 3]
b.append(4)
print(b)

c = (1, 2, 3)
c.append(4)  # tuple類型沒有append的方法

# 輸出結果
69249416
0x420a988
69249416
'tuple' object does not support item assignment
[1, 2, 3, 4]
'tuple' object has no attribute 'append'

python 運算符號

算術運算符

+
-
*
/ 除以 獲得的都是float
// 整除 向下取整
% 求餘
** 次方 2**3 2的三次方

賦值運算符

=
+=
*=
/=
//=
%=
**=
# 注意 python中沒有++ -- 運算符

關係運算符

==  # 對於number類型來講 == 判斷是相等的
!=
>
<
>=
<=
# 返回的是一個bool類型
d = 1
d+=d>=1
print(d)  # 2

# == 的特殊性
a = 0
b = False
print(a == b)  # True

邏輯運算符

and
or
not 返回的都是bool類型
'''
邏輯短路原則
and 第一個爲真 那麼返回第二個;若是第一個爲假,返回第一個
or 第一個爲假,那麼返回第二個;若是第一個爲真,返回第一個
同時要注意 基本類型 和 True False的轉化
'''

成員運算符

判斷一個元素是否在另外的一組元素當中線程

in
not in
# 成員運算符能夠在字符串、列表、元祖、集合、字典中進行應用,返回結果爲布爾類型
b = 'c'
print(b in {'c':1})

# 輸出結果
True  # 字典判斷的是key是否在字典中

身份運算符

is
not
# 若是兩個變量取值相等,則is返回True
a = 1
b = 2
a is b  # False
b = 1
a is b  # True

# is和 == 的區別
'''
== 表示的是值是否相等
is 表示的是所指向的內存地址是否相等
'''
a = 1
b = 1.0
a == b  # True
a is b  # False

# 思考題目
a = {1,2,3}
b = {2,1,3}
a == b  # True 集合是無序的
a is b  # False 因爲是引用類型 所以表示的是兩個集合 能夠用id()測試

c = (1,2,3)
d = (2,1,3)
c == d  # False 元組屬於序列 它是無序的
c is d  # False 雖然是值類型 由於值類型是兩個值 所以內存地址也不一樣

擴充:三種判斷

  • is 判斷id是否相同,就是進行身份的判斷,判斷兩個變量所對應的內存地址是否相等
  • == 判斷值是否相同,注意number類型來講,0和False的值是相同的
  • 類型判斷,判斷兩個變量的類型是否相同
# 判斷方法一
a = 1
type(a) == int  # True 不推薦使用 不能判斷變量的子類是否爲該類型

# 判斷方法二
isinstance(a,str)  # False
isinstance(a,(int,str,float))  # 這個方法的第二個參數能夠接受一個元組,那麼就判斷a是否爲元組中的任意一種 True

# 注意說明:
對象的三個特徵:id value type

位運算符

都是把數當作二進制進行運算
& 按位與
| 按位或
^ 按位異或 相同爲0 相反爲1
- 按位取反
<< 左移運算符
>> 右移運算符
相關文章
相關標籤/搜索