目錄
關於這個系列
《最值得收藏的python3語法彙總》,是我爲了準備公衆號“跟哥一起學python”上面視頻教程而寫的課件。整個課件將近200頁,10w字,幾乎囊括了python3所有的語法知識點。
你可以關注這個公衆號“跟哥一起學python”,獲取對應的視頻和實例源碼。
這是我和幾位老程序員一起維護的個人公衆號,全是原創性的乾貨編程類技術文章,歡迎關注。
概述
數據類型轉換,指的是通過某種方法,將一個數據由原來的類型轉換爲另外一個類型。比如,我們將字符串“123”轉換爲數字123,這就是一種數據類型的轉換。
Python支持各種標準數據類型之間的轉換,但並不是任意數據都可以轉換的,所有的轉換要符合“常理”,邏輯上應該是成立的。比如,你不應該試圖將一個complex類型轉換爲int,因爲python也不知該怎麼轉換。
數據類型轉換支持情況彙總表
下面我整理了python3數據類型之間轉換的支持情況(這應該是最全的了):
|
Int |
Float |
Bool |
Complex |
String |
Bytes |
List |
Tuple |
Set |
Dict |
Int |
- |
Y |
Y |
N |
Y |
Y |
N |
N |
N |
N |
Float |
Y |
- |
Y |
N |
Y |
Y |
N |
N |
N |
N |
Bool |
Y |
Y |
- |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Complex |
Y |
Y |
Y |
- |
Y |
N |
N |
N |
N |
N |
String |
Y |
Y |
Y |
Y |
- |
Y |
Y |
Y |
Y |
Y |
Bytes(只考慮直接轉換) |
Y |
N |
Y |
N |
Y |
- |
Y |
Y |
Y |
N |
List |
N |
N |
N |
N |
Y |
Y |
- |
Y |
Y |
Y |
Tuple |
N |
N |
N |
N |
Y |
Y |
Y |
- |
Y |
Y |
Set |
N |
N |
N |
N |
Y |
Y |
Y |
Y |
- |
Y |
Dict |
N |
N |
N |
N |
Y |
N |
Y |
Y |
Y |
- |
下面列舉了各種類型之間的轉換及實例:
轉換實例
-
轉換爲int
print(int(1.2)) # float -> int
print(int('123')) # string -> int
print(int(b'456')) # bytes -> int
print('0x%x' % (int.from_bytes(b'456', byteorder='little', signed=True)))
print(int(True)) # bool -> int
-
轉換爲float
print(float('1.2')) # string->float
print(float(b'3.4')) # bytes -> float
print(float(123)) # int->float
print(float(False)) # bool->float
-
轉換爲bool
所有類型都可以轉換爲bool型
print(bool(1)) # int->bool
print(bool(0.0)) # float->bool
print(bool(0 + 0j)) # complex->bool
print(bool('')) # string->bool, 空字符串爲False,其它都是True
print(bool(b'hello')) # bytes->bool, 空爲False,其它都是True
print(bool.from_bytes(b'\x00', byteorder='little')) # bytes->bool
print(bool([])) # list->bool, 空爲False,其它都是True
print(bool(())) # tuple->bool, 空爲False,其它都是True
print(bool({})) # dict->bool, 空爲False,其它都是True
print(bool(set())) # set->bool, 空爲False,其它都是True
-
轉換爲complex
print(complex(100)) # int->complex
print(complex(1.2)) # float->complex
print(complex(True)) # bool->complex
print(complex('1.2+2.3j')) # string->complex
-
轉換爲string
所有基本類型都可以轉換爲string
print(b'hello'.decode('utf-8')) # bytes->string
print(str(1)) # int->string
print(str(1.2)) # float->string
print(str(True)) # bool->string
print(str(1.2 + 2.3j)) # complex->string其它都是True
print(str(['hello', 100])) # list->string
print(str(('hello', 100))) # tuple->string
print(str({'name': 'xiaowang', 'age': 20})) # dict->string
print(str({'name', 'age'})) # set->string
-
轉換爲bytes
因爲所有類型都可以轉換爲string,而string可以轉換爲bytes,所以所有類型都可以間接轉換爲bytes。
下面我們只討論直接轉換爲bytes的類型
print('bytes'.center(30, '*'))
print(b'\x64') # int轉bytes
print(int.to_bytes(100, byteorder='big', signed=True, length=2)) # int轉bytes
print(bool.to_bytes(True, byteorder='big', signed=True, length=2)) # bool轉bytes
print('hello'.encode(encoding='utf-8')) # string轉bytes
print(bytes([1, 200, 80, 50])) # list轉bytes
print(bytes((1, 200, 80, 50))) # tuple轉bytes
print(bytes({1, 200, 80, 50})) # set轉bytes
-
轉換爲list
print(list("hello")) # string->list
print(list(b'hello')) # bytes->list
print(list((100, 200, 300))) # tuple->list
print(list({'name', 'age'})) # set->list
print(list({'name': 'xiaowang', 'age': 20})) # dict->list, 只取key值
-
轉換爲tuple
print(tuple("hello")) # string->tuple
print(tuple(b"hello")) # bytes->tuple
print(tuple([100, 200, 300])) # list->tuple
print(tuple({'name', 'age'})) # set->tuple
print(tuple({'name': 'xiaowang', 'age': 20})) # dict->tuple, 只取key值
-
轉換爲set
print(set("hello")) # string->set
print(set(b"hello")) # bytes->set
print(set([100, 200, 300])) # list->set
# print(set([100, 200, [300, 400]])) # list->set, list中包含可變數據類型,報異常
print(set(('name', 'age'))) # tuple->set
# print(set(('name', 'age', []))) # tuple->set,包含可變數據類型,報異常
print(set({'name': 'xiaowang', 'age': 20})) # dict->set, 只取key值
-
轉換爲dict
轉換爲dict的方法略微複雜一些
1、string->dict
方式一、使用json轉換,字符串格式需要嚴格按照json格式來
user_str = '{"name": "xiaowang", "city": "Chengdu", "age": 28}'
import json
print(json.loads(user_str))
方式二、使用eval函數轉換,eval有安全隱患,不建議使用
print(eval(user_str))
方式三、 使用ast.literal_eval
import ast
print(ast.literal_eval(user_str))
2、list->dict
方式一、需要用到zip
user_keys = ['name', 'city', 'age']
user_values = ['xiaowang', 'Chengdu', 28]
print(dict(zip(user_keys, user_values)))
方式二、二維列表
user_info = [
["name", "xiaowang"],
["city", "Chengdu"],
["age", 28]
]
print(dict(user_info))
set->dict tuple->dict的方式和list->dict一樣
更多python教程,請查看我的專欄《0基礎學python視頻教程》