int

支持转换为 int 类型的,仅有 floatstrbytes,其他类型均不支持。

float -> int

会去掉小数点及后面的数值,仅保留整数部分。

int(-12.94)     # -12

str -> int

如果字符串中有数字(0-9)和正负号(+/-)以外的字符,就会报错。

int('1209')     # 1209
int('-12') # -12
int('+1008') # 1008

bytes -> int

如果 bytes 中有数字(0-9)和正负号(+/-)以外的字符,就会报错。

int(b'1209')     # 1209
int(b'-12') # -12
int(b'+1008') # 1008

float

支持转换为 float 类型的,仅有 intstrbytes,其他类型均不支持。

int -> float

int 转换为 float 时,会自动给添加一位小数。

float(-1209)     # -1209.0

str -> float

如果字符串含有正负号(+/-)、数字(0-9)和小数点(.)以外的字符,则不支持转换。

float('-1209')          # -1209.0
float('-0120.29023') # -120.29023

bytes -> float

如果 bytes 中含有正负号(+/-)、数字(0-9)和小数点(.)以外的字符,则不支持转换。

float(b'-1209')         # -1209.0
float(b'-0120.29023') # -120.29023

complex

仅支持 intfloatstr 转换成 complex 类型。

int -> complex

int 转换 complex 时,会自动添加虚数部分并以0j表示。

complex(12)         # (12+0j)

float -> complex

float 转换 complex 时,会自动添加虚数部分并以0j表示。

complex(-12.09)     # (-12.09+0j)

str -> complex

str 转换 complex 时,如果能转换成 int 或 float,则会转换后再转为 complex。如果字符串完全符合 complex 表达式规则,也可以转换为 complex 类型值。

complex('-12.09')       # (-12.09+0j)
complex('-12.0') # (-12+0j),去除了小数部分
complex('-12') # (-12+0j)
complex('-12+9j') # (-12+9j)
complex('(-12+9j)') # (-12+9j)
complex('-12.0-2.0j') # (-12-2j),去除了小数部分
complex('-12.0-2.09j') # (-12-2.09j)
complex(b'12') # 报错,不支持 bytes 转换为 complex
complex('12 + 9j') # 报错,加号两侧不可有空格

str

str() 函数可以将任意对象转换为字符串。

int -> str

int 转换 str 会直接完全转换。

str(12)     # 12

float -> str

float 转换 str 会去除末位为 0 的小数部分。

str(-12.90)     # -12.9

complex -> str

complex 转换 str,会先将值转化为标准的 complex 表达式,然后再转换为字符串。

str(complex(12 + 9j))   # (12+9j)
str(complex(12, 9)) # (12+9j)

bytes -> str

bytes 和 str 的转换比较特殊点,在 Python 3.x 中,字符串和字节不再混淆,而是完全不同的数据类型。

转换为可执行的表达式字符串:

str(b'hello world')        # b'hello world'

str() 函数指定 encoding 参数,或者使用 bytes.decode() 方法,可以作实际数据的转换:

b'hello world'.decode()                             # hello world
str(b'hello world', encoding='utf-8') # hello world
str(b'\xe4\xb8\xad\xe5\x9b\xbd', encoding='utf-8') # 中国

list -> str

会先将值格式化为标准的 list 表达式,然后再转换为字符串。

str([])                      # []
str([1, 2, 3]) # [1, 2, 3]
''.join(['a', 'b', 'c']) # abc

tuple -> str

会先将值格式化为标准的 tuple 表达式,然后再转换为字符串。

str(())                     # ()
str((1, 2, 3)) # (1, 2, 3)
''.join(('a', 'b', 'c')) # abc

dict -> str

会先将值格式化为标准的 dict 表达式,然后再转换为字符串。

str({'name': 'hello', 'age': 18})       # {'name': 'hello', 'age': 18}
str({}) # {}
''.join({'name': 'hello', 'age': 18}) # nameage

set -> str

会先将值格式化为标准的 set 表达式,然后再转换为字符串。

str(set({}))                # set()
str({1, 2, 3}) # {1, 2, 3}
''.join({'a', 'b', 'c'}) # abc

其他类型

转换内置对象:

str(int)                # <class 'int'>,转换内置类
str(hex) # <built-in function hex>,转换内置函数

转换类实例:

class Hello:
pass obj = Hello() print(str(obj)) # <__main__.Hello object at 0x1071c6630>

转换函数:

def hello():
pass print(str(hello)) # <function hello at 0x104d5a048>

bytes

仅支持 str 转换为 bytes 类型。

'中国'.encode()                   # b'\xe4\xb8\xad\xe5\x9b\xbd'

bytes('中国', encoding='utf-8')   # b'\xe4\xb8\xad\xe5\x9b\xbd'

list

支持转换为 list 的类型,只能是序列,比如:str、tuple、dict、set等。

str -> list

list('123abc')      # ['1', '2', '3', 'a', 'b', 'c']

bytes -> list

bytes 转换列表,会取每个字节的 ASCII 十进制值并组合成列表

list(b'hello')      # [104, 101, 108, 108, 111]

tuple -> list

tuple 转换为 list 比较简单。

list((1, 2, 3))     # [1, 2, 3]

dict -> list

字典转换列表,会取键名作为列表的值。

list({'name': 'hello', 'age': 18})  # ['name', 'age']

set -> list

集合转换列表,会先去重为标准的集合数值,然后再转换。

list({1, 2, 3, 3, 2, 1})    # [1, 2, 3]

tuple

与列表一样,支持转换为 tuple 的类型,只能是序列。

str -> tuple

tuple('中国人')    # ('中', '国', '人')

bytes -> tuple

bytes 转换元组,会取每个字节的 ASCII 十进制值并组合成列表。

tuple(b'hello')     # (104, 101, 108, 108, 111)

list -> tuple

tuple([1, 2, 3])    # (1, 2, 3)

dict -> tuple

tuple({'name': 'hello', 'age': 18})     # ('name', 'age')

set -> tuple

tuple({1, 2, 3, 3, 2, 1})       # (1, 2, 3)

dict

str -> dict

  • 使用 json 模块

    使用 json 模块转换 JSON 字符串为字典时,需要求完全符合 JSON 规范,尤其注意键和值只能由单引号包裹,否则会报错。

    import json
    
    user_info = '{"name": "john", "gender": "male", "age": 28}'
    print(json.loads(user_info)) # {'name': 'john', 'gender': 'male', 'age': 28}
  • 使用 eval 函数

    因为 eval 函数能执行任何符合语法的表达式字符串,所以存在严重的安全问题,不建议。

    user_info = "{'name': 'john', 'gender': 'male', 'age': 28}"
    print(eval(user_info)) # {'name': 'john', 'gender': 'male', 'age': 28}
  • 使用 ast.literal_eval 方法

    使用 ast.literal_eval 进行转换既不存在使用 json 进行转换的问题,也不存在使用 eval 进行转换的 安全性问题,因此推荐使用 ast.literal_eval。

    import ast
    
    user_info = "{'name': 'john', 'gender': 'male', 'age': 28}"
    user_dict = ast.literal_eval(user_info)
    print(user_dict) # {'name': 'john', 'gender': 'male', 'age': 28}

list -> dict

通过 zip 将 2 个列表映射为字典:

list1 = [1, 2, 3, 4]
list2 = [1, 2, 3]
print(dict(zip(list1, list2))) # {1: 1, 2: 2, 3: 3}

将嵌套的列表转换为字典:

li = [
[1, 111],
[2, 222],
[3, 333],
] print(dict(li)) # {1: 111, 2: 222, 3: 333}

tuple -> dict

通过 zip 将 2 个元组映射为字典:

tp1 = (1, 2, 3)
tp2 = (1, 2, 3, 4) print(dict(zip(tp1, tp2))) # {1: 1, 2: 2, 3: 3}

将嵌套的元组转换为字典:

tp = (
(1, 111),
(2, 222),
(3, 333),
) print(dict(tp)) # {1: 111, 2: 222, 3: 333}

set -> dict

通过 zip 将 2 个集合映射为字典:

set1 = {1, 2, 3}
set2 = {'a', 'b', 'c'} print(dict(zip(set1, set2))) # {1: 'c', 2: 'a', 3: 'b'}

set

str -> set

先将字符切割成元组,然后再去重转换为集合。

print(set('hello'))     # {'l', 'o', 'e', 'h'}

bytes -> set

会取每个字节的 ASCII 十进制值并组合成元组,再去重。

set(b'hello')           # {104, 108, 101, 111}

list -> set

先对列表去重,再转换。

set([1, 2, 3, 2, 1])    # {1, 2, 3}

tuple -> set

先对列表去重,再转换。

set((1, 2, 3, 2, 1))    # {1, 2, 3}

dict -> set

会取字典的键名组合成集合。

set({'name': 'hello', 'age': 18})

# {'age', 'name'}

参考资料


原文地址: https://shockerli.net/post/python3-data-type-convert/

更多文章请访问我的个人博客: https://shockerli.net

史上最全的 Python 3 类型转换指南的更多相关文章

  1. 史上最全的Python电子书教程资源下载(转)

    网上搜集的,点击即可下载,希望提供给有需要的人^_^   O'Reilly.Python.And.XML.pdf 2.02 MB   OReilly - Programming Python 2nd. ...

  2. 【分享】史上最全的Python电子书教程资源下载

    网上搜集的,点击即可下载,希望提供给有需要的人^_^   O'Reilly.Python.And.XML.pdf 2.02 MB   OReilly - Programming Python 2nd. ...

  3. python学习教程,史上最全面的python学习路线图

    Python 是Web 开发.游戏脚本.计算机视觉.物联网管理和机器人开发的主流语言之一,随着Python用户可以预期的增长,它还有机会在多个领域里登顶.Python学习路线分享给你. 阶段一是Pyt ...

  4. 史上最全的Python学习现线路视频教程(转)

    首先,由于各方面压力,不得不学习现在的主流技术,深度学习,人工智能,机器学习各方面的,python又重新的进入了更多的程序猿的圈子,原以为java就差不多可以干到退休了,但是没办法,学....已经成功 ...

  5. 你想找的Python资料这里全都有!没有你找不到!史上最全资料合集

    你想找的Python资料这里全都有!没有你找不到!史上最全资料合集 2017年11月15日 13:48:53 技术小百科 阅读数:1931   GitHub 上有一个 Awesome - XXX 系列 ...

  6. 史上最全的 jmeter 获取 jdbc 数据使用的4种方法——(软件测试Python自动化)

    周五,下班了吗?软件测试人. 明天是周末了!给大家推荐一个技术干货好文.史上最全的 jmeter 获取 jdbc 数据使用的四种方法.我也精剪了jmeter的自动化接口测试的视频放在了同名UP主,周末 ...

  7. 史上最全Windows版本搭建安装React Native环境配置

    史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...

  8. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  9. 史上最全存储引擎、索引使用及SQL优化的实践

    史上最全存储引擎.索引使用及SQL优化的实践 1 MySQL的体系结构概述 2. 存储引擎 2.1 存储引擎概述 2.2 各种存储引擎特性 2.2.1 InnoDB 2.2.2 MyISAM 3. 优 ...

随机推荐

  1. Monotonic Array LT896

    An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...

  2. NFS服务简介与配置

    NFS简介 NFS特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源 在NFS的应用中, ...

  3. python之全局变量和局部变量

    一.定义 1.全局变量 定义在函数外部一级代码的变量,叫全局变量,全局能用. 2.局部变量 定义在函数内的变量,只能在局部生效 二.用法 1.在函数内部可以引用全局变量,如果全局和局部都有一个变量na ...

  4. Chrome书签添加到百度网盘

    一:Chrome是最干净的浏览器了,但是无奈国内的环境导致书签不方便保存到云端,如果保存到本地那么就要经常自己备份之类的: 二:由以上的需求背景终于找到了可以将chrome打开的网页保存到百度网盘里[ ...

  5. 第一节 —— vue2.0 环境安装,工程化开发

    vue的开发有两种,一种是直接的在script标签里引入vue.js文件即可,这样子引入的话个人感觉做小型的多页面会比较舒坦,一旦做大型一点的项目,还是离不开webpack. 所以另一种方法也就是基于 ...

  6. 判断终端类型、微信的文章防盗链、h5页面跳转打开新的app、跳转到app市场

    判断终端的类型.安卓.ios.微信.qq function  GetMobelType()  {                 var  browser  =   {                 ...

  7. 基于ESP32的uart通讯

    本文源码地址为:http://download.csdn.net/download/noticeable/9961054 ESP32上有三个UART通讯接口,设备号,从0~2,即UART0,UART1 ...

  8. 描述linux下文件删除的原理

    Linux文件删除原理: Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除. 一般来说,每个文件都有2个link计数器:i_count 和 i ...

  9. java web 测试

    1.功能测试 bugfree mantis 2.性能测试:loadrunner 3.安全测试: burpsuite

  10. common-io 文件监听例子

    package com.junge.spring.demo.commonio; import org.apache.commons.io.monitor.FileAlterationListenerA ...