有幸參加了阿里雲舉辦的天池龍珠計畫python訓練營。收穫頗多。
每天記錄一些自己之前的知識盲點,需經常溫習。
一、運算子
【例子】比較的兩個變數均指向不可變型別。
對於字串來說:
a = "hello"
b = "hello"
print(a is b, a == b) # true true
print(a is not b, a != b) # false false
【例子】比較的兩個變數均指向可變型別。
對於list來說:
a = ["hello"]
b = ["hello"]
print(a is b, a == b) # false true
print(a is not b, a != b) # true false
注意:
- is, is not 對比的是兩個變數的記憶體位址
- ==, != 對比的是兩個變數的值
- 比較的兩個變數,指向的都是位址不可變的型別(str等),那麼is,is not 和 ==,!= 是完全等價的。
- 對比的兩個變數,指向的是位址可變的型別(list,dict,tuple等),則兩者是有區別的。
二、資料型別與轉換
檢視內部屬性和方法:
b = dir(int)
print(b)
# ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__',
# '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__',
# '__float__', '__floor__', '__floordiv__', '__format__', '__ge__',
# '__getattribute__', '__getnewargs__', '__gt__', '__hash__',
# '__index__', '__init__', '__init_subclass__', '__int__', '__invert__',
# '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__',
# '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__',
# '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__',
# '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__',
# '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__',
# '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__',
# '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__',
# 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag',
# 'numerator', 'real', 'to_bytes']
有時候我們想保留浮點型的小數點後 `n` 位。可以用 `decimal` 包裡的 `decimal` 物件和 `getcontext()` 方法來實現。
import decimal
from decimal import decimal
a = decimal.getcontext()
print(a)
# context(prec=28, rounding=round_half_even, emin=-999999, emax=999999,
# capitals=1, clamp=0, flags=,
# traps=[invalidoperation, divisionbyzero, overflow])
b = decimal(1) / decimal(3)
print(b)
# 0.3333333333333333333333333333
#【例子】使 1/3 保留 4 位,用 `getcontext().prec` 來調整精度。
decimal.getcontext().prec = 4
c = decimal(1) / decimal(3)
print(c)
# 0.3333
三、位運算
【例子】 python 的`bin()` 輸出。
print(bin(3)) # 0b11
print(bin(-3)) # -0b11
print(bin(-3 & 0xffffffff))
# 0b11111111111111111111111111111101
print(bin(0xfffffffd))
# 0b11111111111111111111111111111101
print(0xfffffffd) # 4294967293
是不是很顛覆認知,我們從結果可以看出:
- python中`bin`乙個負數(十進位制表示),輸出的是它的原碼的二進位制表示加上個負號,巨坑。
- python中的整型是補碼形式儲存的。
- python中整型是不限制長度的不會超範圍溢位。
所以為了獲得負數(十進位制表示)的補碼,需要手動將其和十六進製制數`0xffffffff`進行按位與操作,再交給`bin()`進行輸出,得到的才是負數的補碼表示。
天池龍珠計畫Python訓練營 第六天
有幸參加了阿里雲舉辦的天池龍珠計畫python訓練營。收穫頗多。每天記錄一些自己之前的知識盲點,需經常溫習。一 集合 1 集合的建立 在建立空集合的時候只能使用s set 因為s 建立的是空字典。例子 basket set basket.add banana num print type num n...
天池龍珠計畫Python訓練營 第五天
有幸參加了阿里雲舉辦的天池龍珠計畫python訓練營。收穫頗多。每天記錄一些自己之前的知識盲點,需經常溫習。一 字串 1 字串轉換 maketrans intab,outtab 建立字元對映的轉換表,第乙個引數是字串,表示需要轉換的字元,第二個引數也是字串表示轉換的目標。translate tabl...
龍珠計畫Python訓練營筆記 day10
美國 練習 按州總捐款熱力地圖 參賽選手自由發揮 補充 第乙個補充熱力地圖的參賽選手可以獲得天池杯子乙個 呼叫相關包 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns 設定畫布大小 f,ax plt.s...