Python中的基本數據類型講解

這篇文章介紹了Python中的基本數據類型,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

文章源自四五設計網-http://www.133122.cn/40023.html

一、數據類型分類

1、按存值個數區分

  • 單個值:數字,字符串
  • 多個值(容器):列表,元組,字典,集合

2、按可變不可變區分

  • 可變:列表[],字典{},集合{}
  • 不可變:數字,字符串,元組()、bool,None

3、有序無序區分

  • 有序(可按索引取值):字符串,列表,元組
  • 無序:字典,集合

二、整型(int)

1
2
3
4
age = 18? # age=int(18)
print(id(age))#<code>4530100848</code>
print(type(age))#<class 'int'>
print(age)#18

1、四種進制表示形式

  • 十進制:1010, 99, -217
  • 二進制,以0b或0B開頭:0b010, -0B101
  • 八進制,以0o或0O開頭:0o123, -0O456
  • 十六進制,以0x或0X開頭:0x9a, –0X89

我們可以使用二進制、十六進制和八進制來代表整數文章源自四五設計網-http://www.133122.cn/40023.html

1
2
3
4
5
6
7
8
9
10
11
number = 0b101011 # 二進制
print(number)
# 43
number = 0xA0F # 十六進制
print(number)
# 2575
number = 0o37? # 八進制
print(number)
# 31

2、int()方法

可將純數字的字符串轉為十進制的整型文章源自四五設計網-http://www.133122.cn/40023.html

int(x):將x變成整數,舍棄小數部分。文章源自四五設計網-http://www.133122.cn/40023.html

1
2
3
4
5
print(int("123"))? # 123
x = int('111')
print(type(x))? # <class 'int'>
# print( int('11.1') ) # 報錯
print(int(123.45))? # 123

3、type和isinstance

內置的type()函數可以用來查詢變量所指的對象類型。文章源自四五設計網-http://www.133122.cn/40023.html

1
2
3
a, b, c, d = 20, 5.5, True, 4 + 3j
print(type(a), type(b), type(c), type(d))
# <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

此外還可以用isinstance來判斷:文章源自四五設計網-http://www.133122.cn/40023.html

1
2
3
a = 111
isinstance(a, int)
# True

type和isinstance的區別在于:文章源自四五設計網-http://www.133122.cn/40023.html

  • type()不會認為子類是一種父類類型。
  • isinstance()會認為子類是一種父類類型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A:
????pass
class B(A):
????pass
isinstance(A(), A)
# True
type(A()) == A
# True
isinstance(B(), A)
# True
type(B()) == A
# False

4、對象的創建和刪除

當你指定一個值時,Number對象就會被創建:文章源自四五設計網-http://www.133122.cn/40023.html

1
2
3
var = 2
var_a =
var_b = 10

您可以通過使用del語句刪除單個或多個對象。文章源自四五設計網-http://www.133122.cn/40023.html

del語句的語法是:文章源自四五設計網-http://www.133122.cn/40023.html

del var1[, var2[, var3[...., varN]]]

例如:

1
2
3
del var
del var_a, var_b
print(var) # name 'var' is not defined

4、在交互模式中,最后被輸出的表達式結果被賦值給變量 _

例如:

>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price +?_
113.0625
>>> round(_, 2)
113.06

此處, _ 變量應被用戶視為只讀變量。

5、注意:

  • Python可以同時為多個變量賦值,如a, b = 1, 2。
  • 一個變量可以通過賦值指向不同類型的對象。
  • 數值的除法包含兩個運算符:/ 返回一個浮點數,// 返回一個整數。
  • Python 可以使用 ** 操作來進行冪運算:5 ** 2 表示 5 的平方
  • 在混合計算時,Python會把整型轉換成為浮點數。

注意第3點:// 得到的并不一定是整數類型的數,它與分母分子的數據類型有關系。

1
2
3
4
5
6
print(7 // 2)
# 3
print(7.0 // 2)
# 3.0
print(7 // 2.0)
# 3.0

三、浮點型(float)

1
2
3
4
5
salary = 2.1? # salary=float(2.1)
print(id(salary))#<code>4569240656 </code>
print(type(salary))#<code><class 'float'> </code>
print(salary)# <code>2.1

1、float()方法

將純數字的字符串轉為浮點型數字。

float(x):將x變成浮點數,增加小數部分。

1
2
3
4
5
6
7
8
9
10
11
print(float("1.23"))? # 1.23
x = float('111')
print(x)? # 111.0
print(type(x))? # <class 'float'>
x = float('11.1')
print(x)? # 11.1
print(type(x))? # <class 'float'>
print(float(12))? # 12.0;

2、round()函數

1.浮點數間運算存在不確定尾數,一般發生在10的16次冪左右
2.round(x, d)函數:對x四舍五入,d是小數截取位數
3.浮點數間運算及比較,用round()函數輔助

1
0.1 + 0.2 == 0.3? # False

round(0.1+0.2, 1) == 0.3?#?True

3、科學計數法

  • 使用字母e或E作為冪的符號,以10為基數,
    格式如下:<a>e<b>,表示?a*10b
  • 例如:4.3e-3?值為0.0043,9.6E5?值為?960000.0

4、數字運算函數

abs(x):絕對值。x的絕對值。

1
print(abs(-10.01))? # 10.01

divmod(x,y):商余。(x//y, x%y),同時輸出商和余數。

1
print(divmod(10, 3))? # (3, 1)

pow(x, y[, z]):冪余。(x**y)%z,[..]表示參數z可省略。

1
2
3
4
print(pow(3, 2))? # 9
print(pow(3, 2, 2))? # 1
print(pow(3, pow(3, 2)))? # 19683
print(pow(3, pow(3, 2), 10000))? # 9683

round(x[, d]):四舍五入。d是保留小數位數,默認值為0。

1
print(round(-10.123, 2))? # -10.12

max(x1,x2,?,xn):最大值。返回x1,x2,?,xnx1,x2,?,xn中的最大值,n不限。

1
print(max(1, 9, 5, 4, 3))? # 9

min(x1,x2,?,xn):最小值。返回x1,x2,?,xnx1,x2,?,xn中的最小值,n不限。

1
print(min(1, 9, 5, 4, 3))? # 1

以下為數學函數,需要導入math模塊

exp(x):返回e的x次冪(ex)

1
2
import math
print(math.exp(1))? # 2.718281828459045

fabs(x):返回數字的絕對值

1
2
import math
print(math.fabs(-10))? # 10.0

ceil(x):返回數字的上入整數

1
2
import math
print(math.ceil(4.1))? # 5

floor(x): 返回數字的下舍整數

1
2
import math
print(math.floor(4.9))? # 4

log(x):返回以e為基數的對象

1
2
3
4
import math
print(math.log(math.e))? # 1.0
print(math.log(100, 10))? # 2.0

log10(x): 返回以10為基數的x的對數

1
2
3
import math
print(math.log10(100))? # 2.0

modf(x):返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。

1
2
import math
print(math.modf(-100.1))? # (-0.09999999999999432, -100.0)

sqrt(x):返回數字x的平方根。

1
2
import math
print(math.sqrt(81))? # 9.0

四、復數型(complex)

a+bj?被稱為復數,其中,a是實部,b是虛部

  • real 獲得實部
  • imag 獲得虛部
1
2
3
z = 1.23e-4 + 5.6e+89j
print(z.real)? # 0.000123
print(z.imag)? # 5.6e+89

1、complex(x):將x變成復數

  • complex(x) 將x轉換到一個復數,實數部分為 x,虛數部分為 0。
  • complex(x, y) 將 x 和 y 轉換到一個復數,實數部分為 x,虛數部分為 y。x 和 y 是數字表達式。
1
print(complex(4))? # (4+0j)

五、布爾型(Bool)

True、False通常情況不會直接引用,需要使用邏輯運算得到結果。

1
2
print(type(True))# <code><class 'bool'></code>
print(True)# True

注意:Python中所有數據類型的值自帶布爾值。

如此多的數據類型中只需要記住只有0、None、空、False的布爾值為False,其余的為True。

1
2
3
4
5
6
7
8
print(bool(0))? # False
print(bool(None))? # False
print(bool(''))? # False
print(bool(False))? # False
print(bool('nick'))? # True
print(bool(1 > 2))? # False
print(bool(1 == 1))? # True

六、字符串(str)

字符串就是一串被串起來的字符,在單引號、雙引號或三引號內包裹的一串字符。同時使用反斜杠 \ 轉義特殊字符。

1
2
3
4
5
name1 = 'nick'
name2 = "egon"
print(id(name1)) # <code>4418849624</code>
print(type(name1))# <class 'str'>
print(name1)# nick

需要注意的是:三引號內的字符可以換行,而單雙引號內的字符不可以。

1
name3 = """nick

egon"""

1
print(name3)
1
2
nick
egon

1、特殊字符串:

  • u'unicode': unicode編碼的字符串
  • b'101': 二進制編碼的字符串

轉義符:

Python 使用反斜杠(\)轉義特殊字符。

1
print("這里有個雙引號(\")")? # 這里有個雙引號(")

轉義符形成一些組合,表達一些不可打印的含義:
\(在行尾時) :續行符
\\ :反斜杠符號
\' :單引號
\" :雙引號
\a :響鈴
\b :退格(Backspace)
\000 :空
\n :換行
\v :縱向制表符
\t :橫向制表符
\r :回車(光標移動到本行首)
\f :換頁
\oyy :八進制數,yy 代表的字符,例如:\o12 代表換行,其中 o 是字母,不是數字 0。
\xyy :十六進制數,yy代表的字符,例如:\x0a代表換行
\other :其它的字符以普通格式輸出

  • r'\n': 原生字符串,也就是說'\n'這是普通的兩個字符,并沒有換行的意思。
    Python 使用反斜杠(\)轉義特殊字符,如果你不想讓反斜杠發生轉義,可以在字符串前面添加一個 r,表示原始字符串:
1
2
3
4
5
6
print('Ru\noob')
# Ru
# oob
print(r'Ru\noob')
# Ru\noob

注意:

  • Python?沒有單獨的字符類型,一個字符就是長度為1的字符串。
  • 反斜杠(\)可以作為續行符,表示下一行是上一行的延續。
  • Python中的字符串有兩種索引方式,從左往右以0開始,從右往左以-1開始。
  • Python中的字符串不能改變,向一個索引位置賦值,比如word[0] = 'm'會導致錯誤。

2、字符串連接:x+y

連接兩個字符串x和y。如果字符串內有引號,則包裹字符串的引號和字符串內部的引號不能相同。

1
2
3
4
msg2 = "my name is 'nick'"
msg3 = 'my name is "nick"'
print(msg2 + msg3)? # my name is 'nick'my name is "nick"

3、字符串重復:x * n

只能乘以數字。

1
2
name = 'nick '
print(name * 10)# <code>nick nick nick nick nick nick nick nick nick nick

4、字符串比較大小:x>y

按照ASCII碼比較.字符串的比較是字母的順序。

1
2
3
4
5
msg1 = 'hello'
msg2 = 'z'
print(msg1 > msg2) #False
print('Z' > 'A') #True
print('Z' > 'a') #False

5、可以使用str()、hex()、chr()、ord()方法轉為特殊字符串。

str(x):任意類型x所對應的字符串形式

1
2
print(str(1.23))? # “1.23”
print(str([1, 2]))? # “[1, 2]”

hex(x)?或?oct(x):整數x的十六進制或八進制小寫形式字符串:

1
2
print(hex(425))? # "0x1a9"
print(oct(425))? # "0o651"

chr(u):x為Unicode編碼,返回其對應的字符

ord(x):x為字符,返回其對應的Unicode編碼

1
2
print(chr(21704))? # "哈"
print(ord('哈'))? # "21704"

6、常用函數:

1、str[n]:按索引取值

1
2
3
4
msg = 'hello nick'
#????? 0123456789? # 索引序號
print(msg[6] ) #索引為6: n
print(msg[-3]) # 索引為-3: i

你可以截取字符串的一部分并與其他字段拼接,如下實例:

1
2
var1 = 'Hello World!'
print("已更新字符串 : ", var1[:6] + 'Runoob!')? # 已更新字符串 :? Hello Runoob!

舉例:輸入整數對應的星期字符串

1
2
3
weekStr = "一二三四五六日"
weekId = eval(input("請輸入星期數字(1-7):"))
print("星期" + weekStr[weekId - 1])? # 7? 星期日

2、str[x:y:step]:切片(顧頭不顧尾,步長) :

遵循左閉右開原則,str[0,2] 是不包含第 3 個字符的。

1
2
3
4
5
6
7
8
9
10
11
12
msg = 'hello_nick'
#????? 0123456789? # 索引序號
print(msg[3:] )? # 切片3-最后: lo_nick
print(msg[3:8])? # 切片3-8: lo_ni
print(msg[3:8:2] )? # 切片3-8,步長為2: l_i
print(msg[3::2])? # 切片3-最后,步長為2: l_ik
# 了解,步長為正,從左到右;步長為負,從右到左
print(msg[:])? # 切片所有: hello_nick
print(msg[::-1] )? # 反轉所有: kcin_olleh
print(msg[-5:-2:1] )? # 切片-5--2: _ni
print(msg[-2:-5:-1] )? # 切片-2--5: cin

3、len:長度

1
2
msg = 'hello nick嗯'
print(len(msg)) # 11

4、in、not in:成員運算

1
2
3
4
5
msg = 'my name is nick, nick handsome'
print('nick' in msg) # True
print('jason' not in msg) # True
print(not 'jason' in msg) # True

5、移除空白

  • 移除左右空白:strip(chars)
  • 移除左空白:?lstrip(chars)
  • 移除右空白:rstrip(chars)
1
2
3
4
5
name = '&&&n ick?????? '
print(name.strip())? # &&&n ick,注意 strip()默認為‘ '
print(name.strip('&'))? # n ick?????? ,strip并且不修改原值,新創建空間
print(name)? # name: &&&n ick?????? ,
print('*-& nick+'.strip('*-& +'))? # nick

6、拆分,split,返回一個列表

  • 拆分:split(str="", num=string.count(str)):以 str 為分隔符截取字符串,如果 num 有指定值,則僅截取 num+1 個子字符串,返回一個列表;
  • 右拆分:rsplit
1
2
3
4
info = 'nick:male:19'
info_list1 = info.split(':')? # ['nick', 'male', '19']
info_list2 = info.split(':', 1)? # ['nick', 'male:19']
print(info.rsplit(':', 1))? # ['nick:male', '19']。 從右開始切割
  • 拆分行:splitlines([keepends]):按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。
1
2
3
4
5
6
info = """aaa
bbb
ccc
"""
print(info.splitlines())? # ['aaa', 'bbb', 'ccc']
print(info.splitlines(True))? # ['aaa\n', 'bbb\n', 'ccc\n']

7、for循環

1
2
msg = 'hello nick'
for i in msg: print(i) # 一個一個字符打印出來

8、大小寫,返回字符串的副本

  • lower:轉成小寫
  • upper:轉成小寫
1
2
3
name = 'Nick Chen'
print(name.lower())? # nick chen
print(name.upper())? # NICK CHEN
  • captalize:將字符串的第一個字符轉換為大寫
  • swapcase:將字符串中大寫轉換為小寫,小寫轉換為大寫
  • title:返回"標題化"的字符串,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())
1
2
3
4
name = 'nick handsome sWAPCASE'
print(name.capitalize())? # Nick handsome swapcase
print(name.swapcase())? # NICK HANDSOME Swapcase? 大小寫互轉
print(name.title())? # Nick Handsome Swapcase

9、首末字符判斷

  • startswith:首字符判斷
  • endswith:末字符判斷
1
2
3
name = 'Nick Chen'
print(name.startswith('Nick'))? # True
print(name.endswith('chen'))? # False

10、join(seq):以此字符串作為分隔符,連接字符串。

以指定字符串作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個新的字符串

1
2
3
4
5
6
7
lis = ['nick', 'male', '19']
print(':'.join(lis))? # nick:male:19
print(",".join("12345"))? # 1,2,3,4,5
str = "-"
seq = ("a", "b", "c")? # 字符串元組
print(str.join(seq))? # a-b-c

11、替換:replace

replace(old, new [, max]):把 將字符串中的 str1 替換成 str2,如果 max 指定,則替換不超過 max 次。

1
2
name = 'nick shuai'
print(name.replace('shuai', 'handsome'))? # nick handsome

12、is***:數據類型判斷

1
2
salary = '111.1'
print(salary.isdigit())? # False
  • isdecimal(): 檢查字符串是否值包含十進制字符,如果是返回True,否則返回False。
  • isdigit(): 如果字符串只包含數字則返回True,否則返回False。
  • isnumeric(): 如果字符串中只包含數字字符,則返回True,否則返回False。
  • isalnum(): 如果字符串所有字符都是字母或數字則返回True,否則返回False。
  • isalpha(): 如果字符串所有字符都是字母則返回True,否則返回False。
  • isupper(): 如果字符串中(區分大小寫的)字符都是大寫,則返回True,否則返回False。
  • islower(): 如果字符串中(區分大小寫的)字符都是小寫,則返回True,否則返回False。
  • isspace(): 如果字符串中只包含空白,則返回True,否則返回False
  • istitle(): 如果字符串是標題類型的(見title()),則返回True,否則返回False。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
num = "1"? # unicode
num.isdigit()? # True
num.isdecimal()? # True
num.isnumeric()? # True
num = "1"? # 全角
num.isdigit()? # True
num.isdecimal()? # True
num.isnumeric()? # True
num = b"1"? # byte
num.isdigit()? # True
num.isdecimal()? # 屬性錯誤 'bytes' object has no attribute 'isdecimal'
num.isnumeric()? # 屬性錯誤 'bytes' object has no attribute 'isnumeric'
num = "IV"? # 羅馬數字
num.isdigit()? # True
num.isdecimal()? # False
num.isnumeric()? # True
num = "四"? # 漢字
num.isdigit()? # False
num.isdecimal()? # False
num.isnumeric()? # True

13、unicodeData

  • 1.unicodedata.lookup():通過索引中的名稱查找相應的字符
  • 2.unicodedata.name():通過字符查找名稱,與unicodedata.lookup()相反
  • 4.unicodedata.digit():把一個合法的數字字符串轉換為數字值
  • 3.unicodedata.decimal():返回表示數字字符的數值
  • 5.unicodedata.numeric():把一個表示數字的字符串轉換為浮點數返回,與unicodedata.digit()不同的是:它可以任意表示數值的字符都可以,不僅僅限于0到9的字符
  • 6.unicodedata.category():把一個字符返回它在UNICODE里分類的類型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import unicodedata
unicodedata.digit("2")? # 2
unicodedata.decimal("2")? # 2
unicodedata.numeric("2")? # 2.0
unicodedata.digit("2")? # 2
unicodedata.decimal("2")? # 2
unicodedata.numeric("2")? # 2.0
unicodedata.digit(b"3")? # TypeError: must be str, not bytes
unicodedata.decimal(b"3")? # TypeError: must be str, not bytes
unicodedata.numeric(b"3")? # TypeError: must be str, not bytes
unicodedata.digit("Ⅷ")? # ValueError: not a digit
unicodedata.decimal("Ⅷ")? # ValueError: not a decimal

unicodedata.numeric("Ⅷ")?#?8.0

1
2
unicodedata.digit("四")? # ValueError: not a digit
unicodedata.decimal("四")? # ValueError: not a decimal

unicodedata.numeric("四")?#?4.0

14、查找:find、 index

  • find(str, beg=0, end=len(string)):檢測 str 是否包含在字符串中。如果指定范圍 beg 和 end ,則檢查是否包含在指定范圍內,如果包含返回開始的索引值,否則返回-1。
  • rfind(str, beg=0,end=len(string)):類似于 find()函數,不過是從右邊開始查找
  • index(str, beg=0, end=len(string)):跟find()方法一樣,只不過如果str不在字符串中會報一個異常
  • rindex:類似于 index(),不過是從右邊開始
  • count(str, beg= 0,end=len(string)):返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str 出現的次數
1
2
3
4
5
6
7
msg = 'my name is tank, tank shi sb, hha'
print(msg.find('tank'))? # 11
print(msg.find('tank', 0, 3))? # -1,找不到返回-1
print(msg.rfind('tank'))? # 17,找不到返回-1
print(msg.index('tank'))? # 11.找不到報錯
print(msg.rindex('tank'))? # 17 找不到報錯
print(msg.count('tank'))? # 2

15、填充

  • center(width[, fillchar]):返回一個原字符串居中對齊,并使用 fillchar 填充至長度。width 的新字符串,fillchar 默認為空格。
  • ljust(width[, fillchar]):返回一個原字符串左對齊,并使用 fillchar 填充至長度。
  • rjust(width[, fillchar]):返回一個原字符串右對齊,并使用空格填充至長度 width 的新字符串。
  • zfill(width):返回長度為 width 的字符串,原字符串 string 右對齊,前面填充0。
1
2
3
4
print('info nick'.center(20, '*'))? # *****info nick******
print('info nick'.ljust(20, '*'))? # info nick***********
print('info nick'.rjust(20, '*'))? # ***********info nick
print('info nick'.zfill(20))? # 00000000000info nick, 默認用0填充

16、expandtabs(tabsize=8):把字符串中的 tab 符號轉為空格

tab 符號默認的空格數是 8 。

1
2
print('a\tb\tc\t')? # a??? b??? c??? ,默認制表符8個空格
print('a\tb\tc\t'.expandtabs(10)) # a???????? b???????? c???????? .

17、encode、decode:字符編碼解碼

Python3中字符串默認為Unicode編碼。

str類型的數據可以編碼成其他字符編碼的格式,編碼的結果為bytes類型。

1
2
3
4
5
6
7
# coding:gbk
x = '上'? # 當程序執行時,無需加u,'上'也會被以Unicode形式保存新的內存空間中,
print(type(x))? # <class 'str'>
# x可以直接encode成任意編碼格式
print(x.encode('gbk'))? # b'\xc9\xcf'
print(type(x.encode('gbk')))? # <class 'bytes'>
  • str.encode(encoding='UTF-8',errors='strict'):以 encoding 指定的編碼格式編碼字符串,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'
  • bytes.decode(encoding="utf-8", errors="strict"):解碼給定的 bytes 對象,這個 bytes 對象可以由 str.encode() 來編碼返回。
1
2
3
4
5
6
7
8
a = "asdfasdfffsa師德師風的"
b = a.encode(encoding='UTF-8', errors='strict')
print(type(b))? # <class 'bytes'>
print(b)? # b'asdfasdfffsa\xe5\xb8\x88\xe5\xbe\xb7\xe5\xb8\x88\xe9\xa3\x8e\xe7\x9a\x84'
c = b.decode(encoding="utf-8", errors="strict")
print(type(c))? # <class 'str'>
print(c)? # asdfasdfffsa師德師風的

18、字符串與列表,元組的互相轉換。

1、字符串轉換為列表:for循環

1
2
3
var='菜鳥教程'
list=[]
list= [i for i in var]

2、列表轉化為字符串:使用 join 來實現:

1
var1=' ,'.join(list)

3、字符串轉化為元組,使用 tuple() 函數。

1
tup=tuple(var)

七、其他數據類型

1、分數類型:Fraction

構造函數:

  • class fractions.Fraction(numerator=0, denominator=1)
  • class fractions.Fraction(int|float|str|Decimal|Fraction)

可以同時提供分子(numerator)和分母(denominator)給構造函數用于實例化Fraction類,但兩者必須同時是int類型或者numbers.Rational類型,否則會拋出類型錯誤。當分母為0,初始化的時候會導致拋出異常ZeroDivisionError。

分數類型:

1
2
3
4
5
6
7
8
from fractions import Fraction
x = Fraction(1, 3)
y = Fraction(4, 6)
print(x + y)? # 1
print(1 / 3 + 4 / 6)? # 1.0
print(Fraction('.25'))? # 1/4

浮點數與分數的轉換:

1
2
3
4
5
6
7
8
from fractions import Fraction
f = 2.5
z = Fraction(*f.as_integer_ratio())
print(z)? # 5/2
x = Fraction(1, 3)
print(float(x))? # 0.3333333333333333

2、小數:Decimal類型

decimal 模塊提供了一個 Decimal 數據類型用于浮點數計算,擁有更高的精度。

1
2
3
4
5
6
7
8
import decimal
decimal.localcontext().prec= 4? # 指定精度(4位小數)
print(decimal.Decimal(1) / decimal.Decimal(7))? # 0.1429
with decimal.localcontext() as ctx:? # 小數上下文管理器
????ctx.prec = 2
????print(decimal.Decimal('1.00') / decimal.Decimal('3.00'))? # 0.33

到此這篇關于Python數據類型的文章就介紹到這了。希望對大家的學習有所幫助

繼續閱讀
我的微信
微信掃一掃
weinxin
我的微信
惠生活福利社
微信掃一掃
weinxin
我的公眾號
 
  • 本文由 四五設計網小助手 發表于 2024年2月20日09:32:39
  • 轉載請務必保留本文鏈接:http://www.133122.cn/40023.html

發表評論

匿名網友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖動滑塊以完成驗證