Python數據類型

數字常量

整型常量

>>>2**10
1024
>>>a=input()
0xa
>>>a   #Python支持類似於matlab一樣的只輸入變量,打印變量的值
'0xa'
>>>print(a)
0xa
>>>int(0xa)
10
>>>print(int(0xa))
10
>>>

類似於上面的int函數將一個字符串轉換爲對應的整數,但也可以指定進制,按照指定進制轉換爲10進制

int('整數字符串', n) #轉換整型字符串爲n進制數
>>>int('111')
111
>>>int('111',2)
7
>>>int('111',8)
73
>>>int('111',5)
31
>>> int('+12')
12
>>> int('-12')
-12
>>> int('-12.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '-12.0'
>>>

使用bin(x)、oct(x)和hex(x)

>>> bin(50)
'0b110010'
>>> oct(50)
'0o62'
>>> hex(50)
'0x32'
>>>

浮點數常量

12.5、2.、3.0、1.23e+10、1.23E-10都是合法的浮點數常量。可以用type函數查看數據類型

>>> bin(50)
'0b110010'
>>> oct(50)
'0o62'
>>> hex(50)
'0x32'
>>>

複數常量

副數常量爲“實部+虛部”形式,虛部以j或J結尾。如2+3j、3-5J、2j。可用complex函數來創建負數。complex函數格式如下。


complex(實部,虛部)
>>>complex(2,3)
(2+3j)
>>>(1-1j)
(1-1j)
>>>type(2+3j)
<class 'complex'>
>>>

布爾(bool)類型常量

bool類型數據有True和False兩種值。True和False是兩個預定義的內部變量。從面向對象的角度看,布爾類型是int類型的子類,True和False是布爾類型的示例。用於計算時,True對應的是整數1,False對應的整數0

>>> type(True) #輸出True的類型
<class 'bool'>
>>> True==1 #測試True是否等於整數1
True
>>> True+3 #測試True用於加法
4
>>> isinstance(True, int) #測試True是否是int的實例
True
>>> True is 1 #測試True和1是否是同一個類型
False
>>>

數字常量

列出一些操作符,運算優先級從上往下依次遞減。括號運算符優先級最高。

操作符 說明 舉例
** 冪運算 2**3
~ 按位取反 ~5
- 負號 -5
*、%、/、// 乘法、餘數、除法、floor除法 2*3、3%2、5/2、5//2
+、- 加法、減法 2+3、2-3
<<、>> 想作爲以、向右移位 3<<2、12
& 按位與 5&2
^ 按位異或 5^2
| 按位或 5|
<、<=、>、>=、==、!= 比較運算 ...
not 邏輯非 not True、not 2<3
and 邏輯與 x>5 and x<100
or 邏輯或 x<5 or x>100

Python遇到不同哦類型的數字參數運算時,總是將簡單的類型轉換爲複雜的類型。

上面/真除法是普通除法。//爲floor除法(截斷除法)。"x//y"計算結果爲不大於"x/y"的最大整數(如果兩個操作數都是整數是,結果爲整數,否則結果爲float)

邏輯計算

以下值均爲假:

None
False
各種數字類型的0,如0、0.0(0+0j)
空的序列,如''(){}
空的映射,如{}
包含了返回值爲0或False的 bool()或len()方法的用戶自定義類的實例

比較運算


>>>a=1;b=3;c=5
>>>a<b<c   #等價於a<b and b<c
True
>>>a==b<c  #等價於a==b and b<c
False
>>>a<b>c   #等價於a<b and b>a
False

小數

由於硬件限制,浮點數缺乏精確度,因此


>>> 0.3+0.3+0.3+0.1
0.9999999999999999
>>> 0.3-0.1-0.2
-2.7755575615628914e-17
>>>

創建

創建和使用小數對象

從Python2.4起,引入了一種新的數字類型:小數對象。小數可以看做固定精度的浮點數,他有固定的位數和小數點,可以滿足要求精度的計算。


>>> from decimal import Decimal
>>> Decimal('0.3')+Decimal('0.3')+Decimal('0.4')
Decimal('1.0')
>>> Decimal('0.3')-Decimal('0.2')-Decimal('0.1')
Decimal('0.0')
>>> type(Decimal('1.0'))
<class 'decimal.Decimal'>
>>> type(1.0)
<class 'float'>
>>>

小數的全局精度

可以使用decimal模塊中的上下文對象設置小數的全局精度


>>> import decimal
>>> Decimal('1')/Decimal('3')
Decimal('0.3333333333333333333333333333')
>>> decimal.getcontext().prec=5
>>> Decimal('1')/Decimal('3')
Decimal('0.33333')
>>> Decimal('10')/Decimal('3')
Decimal('3.3333')
>>>

小數的臨時精度

可以利用with語句創建臨時的上下文對象,以設置臨時的小數精度。 例如:

>>> from decimal import Decimal
>>> import decimal
>>> Decimal('1')/Decimal('3')
Decimal('0.3333333333333333333333333333')
>>> with decimal.localcontext() as local:
...     local.prec=3
...     Decimal('1')/Decimal('3')
...     Decimal('10')/Decimal('3')
...
Decimal('0.333')
Decimal('3.33')
>>> Decimal('1')/Decimal('3')
Decimal('0.3333333333333333333333333333')
>>>

分數

分數對象明確的擁有一個分子和分母,分子分母保持最簡。使用分數可以有效避免浮點數的不精確性。

分數使用fractions模塊中的Fraction函數來創建。分數創建後可以用於各種計算。如:

>>> from fractions import Fraction
>>> x=Fraction(2,8)   #創建分數
>>> x
Fraction(1, 4)   #分數被保持最簡
>>> x+2
Fraction(9, 4)
>>> x-2
Fraction(-7, 4)
>>> x*2
Fraction(1, 2)
>>> x/2
Fraction(1, 8)
>>> print(x)   #print形式的打印,結果爲下
1/4
>>> Fraction.from_float(1.25)   #使用Fraction.from_float函數將浮點數類型轉換爲分數
Fraction(5, 4)
>>>

數學函數

Python提供了用於數字處理的內置函數和內置模塊

內置的常用數學函數

內置數學函數,無需導入模塊

>>> abs(-5)
5
>>> bin(5)
'0b101'
>>> hex(20)
'0x14'
>>> oct(20)
'0o24'
>>> chr(65)   #int轉字符
'A'
>>> ord('A')  #字符轉int
65
>>> divmod(9,4)  #返回商和餘數
(2, 1)
>>> a=5
>>> eval('a*a+1')  #返回字符串中表達式的值
26
>>> max(1,2,3,4)
4
>>> min(1,2,3,4)
1
>>> pow(2,3)  #相當於2**3
8
>>> round(1.56)  #保持整數四捨五入
2
>>> round(1.576,2)  #保持2位小數四捨五入
1.58
>>> round(1.5),round(-1.5),round(2.5)  #舍入部分剛好是5時,向偶數舍入
(2, -2, 2)
>>> sum({1,2,3,4})  #求和
10
>>>

math模塊函數

Python提供了大量數學函數,導入math模塊後可用

>>>import math
>>> math.pi
3.141592653589793
>>> math.e
2.718281828459045
>>> math.inf  #浮點數的正無窮大,-math.inf表示負無窮大
inf
>>> math.ceil(2.3)  #返回不小於x的最小整數
3
>>> math.fabs(-5)  #絕對值
5.0
>>> math.factorial(0),math.factorial(5)  #返回非負數的階乘
(1, 120)
>>> math.floor(2.3)  #返回不大於x的最大整數
2
>>> math.fmod(9,4)   #math.fmod(x,y)返回x除以y的餘數
1.0
>>> x=[0.1,0.1,0.1,0.7]
>>> sum(x)  #求和
1.0
>>> x=[0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1]
>>> sum(x)  #求和,由於浮點數原因存在不精確性
0.9999999999999999
>>> math.fsum(x)  #求和,math.fsum比sum更精確
1.0
>>> math.gcd(12,8)  #math.gcd(x,y)返回x和y的最大公約數
4
>>> math.trunc(15.67)  #math.trunc(x)返回x的整數部分
15
>>> math.exp(2)  #math.exp(x)返回e的x次方
7.38905609893065
>>> math.expm1(2)  #math.expm1(x)返回e的x次方減1
6.38905609893065
>>>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章