Python初学者入门随笔 03 Python 数据类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

函数 描述
int(x, base) 将x转换为一个整数
long(x, base) 将x转换为一个长整数
float(x) 将x转换到一个浮点数
complex(real, imag) 创建一个复数
str(object) 将对象 object 转换为字符串
repr(object) 将对象 object 转换为表达式字符串
eval(str) 用来计算在字符串中的有效 Python 表达式,并返回一个对象
tuple(s) 将序列 s 转换为一个元组
list(s) 将序列 s 转换为一个列表
set(s) 转换为可变集合
dict(d) 创建一个字典。d 必须是一个序列 (key,value) 元组。
frozenset(s) 转换为不可变集合
chr(x) 将一个整数转换为一个字符
unichr(x) 将一个整数转换为 Unicode 字符
ord(x) 将一个字符转换为它的整数值
hex(x) 将一个整数转换为一个十六进制字符串
oct(x) 将一个整数转换为一个八进制字符串

1. int(x, base)

  • 描述
    int(x, base) 函数用于将一个字符串或数字转换为整型。

  • 语法

# -*- coding: UTF-8 -*-
str = '100'
int(str)
# 相当于
int(str, base=10)
>> 100
  • 参数
    x -- 字符串或数字。
    base -- 进制数,默认十进制。

  • 返回值
    返回整型数据。

  • 实例

# -*- coding: UTF-8 -*-
int()  # 不传入参数时,得到结果0
>> 0
int(3)
>> 3
int(3.6)  # 舍去浮点数
>> 3
int('12', 16)  # 如果是带参数base的话,12 要以字符串的形式进行输入,16 为 16进制
>> 18
int('0xa', 16)
>> 10
int('10', 8)
>> 8

2. long(x, base)

  • 描述
    long(x, base) 函数将数字或字符串转换为一个长整型。

  • 语法

# -*- coding: UTF-8 -*-
str = '100'
long(str)
# 相当于
long(str, base=10)
>> 100L
  • 参数
    x -- 字符串或数字。
    base -- 可选,进制数,默认十进制。

  • 返回值
    返回长整型数。

  • 实例

# -*- coding: UTF-8 -*-
long()
>> 0L
long(1)
>> 1L
long('123')
>> 123L

3. float(x)

  • 描述
    float(x) 函数用于将整数和字符串转换成浮点数。

  • 语法

# -*- coding: UTF-8 -*-
num = 100
float(num)
>> 100.0
  • 参数
    x -- 整数或字符串

  • 返回值
    返回浮点数。

  • 实例

# -*- coding: UTF-8 -*-
float(1)
>> 1.0
float(112)
>> 112.0
float(-123.6)
>> -123.6
float('123')
>> 123.0

4. complex(real, imag)

  • 描述
    complex(real, imag) 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。

  • 语法

# -*- coding: UTF-8 -*-
complex(1, 2)
>> (1+2j)
  • 参数
    real -- int,long,float 或 字符串;
    imag -- int,long,float;

  • 返回值
    返回一个复数。

  • 实例

# -*- coding: UTF-8 -*-
complex(1, 2)
>> (1+2j)
complex(1)  # 数字
>> (1+0j)
complex("1")  # 当做字符串处理
>> (1+0j)
# 注意:这个地方在"+"号两边不能有空格,也就是不能写成"1 + 2j",应该是"1+2j",否则会报错
complex("1+2j")
>> (1+2j)

5. str(object)

  • 描述
    str(object) 函数将对象转化为适于人阅读的形式。

  • 语法

# -*- coding: UTF-8 -*-
obj = {'name': 'Sampson', 'age': 18}
str(obj)
# 相当于
str(object=obj)
>> "{'name': 'Sampson', 'age': 18}"
  • 参数
    object -- 对象。

  • 返回值
    返回一个对象的string格式。

  • 实例

# -*- coding: UTF-8 -*-
s = 'RUNOOB'
str(s)
>> 'RUNOOB'
dict = {'runoob': 'runoob.com', 'google': 'google.com'}
str(dict)
>> "{'runoob': 'runoob.com', 'google': 'google.com'}"

6. repr(object)

  • 描述
    repr(object) 函数将对象转化为供解释器读取的形式。

  • 语法

# -*- coding: UTF-8 -*-
obj = {'name': 'Sampson', 'age': 18}
repr(obj)
>> "{'name': 'Sampson', 'age': 18}"
  • 参数
    object -- 对象。

  • 返回值
    返回一个对象的 string 格式。

  • 实例

# -*- coding: UTF-8 -*-
s = 'RUNOOB'
repr(s)
>> "'RUNOOB'"
dict = {'runoob': 'runoob.com', 'google': 'google.com'}
repr(dict)
>> "{'runoob': 'runoob.com', 'google': 'google.com'}"

细心的朋友可能已经发现了,str(object)repr(object) 无论是用法还是最终的结果都近乎一致,那么事实是否是如此呢?
带着这个问题,我们试着去 Python 的标准库中找找答案。下面我们就来看看 datetime.date 这个类是怎么在使用这两个方法的。

# -*- coding: UTF-8 -*-
import datetime

today = datetime.date.today()
str(today)
>> '2019-04-09'
repr(today)
>> 'datetime.date(2019, 4, 9)'

至此,我们有个初步的答案。
str(object) 的返回结果可读性强。也就是说,str(object) 的意义是得到便于人们阅读的信息,就像上面的 '2019-04-09' 一样。
repr(object) 的返回结果应更准确。怎么说,repr(object) 存在的目的在于调试,便于开发者使用。细心的读者会发现将 repr(object) 返回的方式直接复制到命令行上,是可以直接执行的。


7. eval(str)

  • 描述
    eval(str) 函数用来执行一个字符串表达式,并返回表达式的值。

  • 语法

# -*- coding: UTF-8 -*-
eval(expression[, globals[, locals]])
  • 参数
    expression -- 表达式。
    globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
    locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

  • 返回值
    返回表达式计算结果。

  • 实例

# -*- coding: UTF-8 -*-
x = 7
eval('3 * x')
>> 21

eval('pow(2,2)')
>> 4

eval('2 + 3')
>> 5

n = 81
eval("n + 4")
>> 85

8. tuple(s)

  • 描述
    tuple(s) 函数将列表转换为元组。

  • 语法

# -*- coding: UTF-8 -*-
tuple(seq)
  • 参数
    seq -- 要转换为元组的序列。

  • 返回值
    返回元组。

  • 实例

# -*- coding: UTF-8 -*-
tuple([1, 2, 3, 4])
>> (1, 2, 3, 4)

tuple({1: 2, 3: 4})  # 针对字典 会返回字典的key组成的tuple
>> (1, 3)

tuple((1, 2, 3, 4))  # 元组会返回元组自身
>> (1, 2, 3, 4)

9. list(s)

  • 描述
    list(s) 方法用于将元组转换为列表。

  • 语法

# -*- coding: UTF-8 -*-
list(tup)
  • 参数
    tup -- 要转换为列表的元组。

  • 返回值
    返回列表。

  • 实例

# -*- coding: UTF-8 -*-
aTuple = (123, 'xyz', 'zara', 'abc')
list(aTuple)
>> [123, 'xyz', 'zara', 'abc']

10. set(s)

  • 描述
    set(s) 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

  • 语法

# -*- coding: UTF-8 -*-
set([iterable])
  • 参数
    iterable -- 可迭代对象对象。

  • 返回值
    返回新的集合对象。

  • 实例

# -*- coding: UTF-8 -*-
x = set('runoob')
y = set('google')

print x, y
>> (set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l']))  # 重复的被删除

print x & y
>> set(['o'])  # 交集

print x | y
>> set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])  # 并集

print x - y
>> set(['r', 'b', 'u', 'n'])  # 差集

11. dict(d)

  • 描述
    dict(d) 函数用于创建一个字典。

  • 语法

# -*- coding: UTF-8 -*-
dict(kwarg)
dict(mapping, kwarg)
dict(iterable, kwarg)
  • 参数
    kwargs -- 关键字
    mapping -- 元素的容器。
    iterable -- 可迭代对象。

  • 返回值
    返回一个字典。

  • 实例

# -*- coding: UTF-8 -*-
dict()                        # 创建空字典
>> {}

dict(a='a', b='b', t='t')     # 传入关键字
>> {'a': 'a', 'b': 'b', 't': 't'}

dict(zip(['one', 'two', 'three'], [1, 2, 3]))   # 映射函数方式来构造字典
>> {'three': 3, 'two': 2, 'one': 1}

dict([('one', 1), ('two', 2), ('three', 3)])    # 可迭代对象方式来构造字典
>> {'three': 3, 'two': 2, 'one': 1}

12. frozenset(s)

  • 描述
    frozenset(s) 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

  • 语法

# -*- coding: UTF-8 -*-
frozenset([iterable])
  • 参数
    iterable -- 可迭代的对象,比如列表、字典、元组等等。

  • 返回值
    返回新的 frozenset 对象,如果不提供任何参数,默认会生成空集合。

  • 实例

# -*- coding: UTF-8 -*-
a = frozenset(range(10))     # 生成一个新的不可变集合
print a
>> frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

b = frozenset('runoob')     # 创建不可变集合
print b
>> frozenset(['b', 'r', 'u', 'o', 'n'])

13. chr(x)

  • 描述
    chr(x) 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。

  • 语法

# -*- coding: UTF-8 -*-
chr(x)
  • 参数
    x -- 可以是10进制也可以是16进制的形式的数字。

  • 返回值
    返回值是当前整数对应的 ASCII 字符。

  • 实例

# -*- coding: UTF-8 -*-
print chr(0x30), chr(0x31), chr(0x61)   # 十六进制
>> 0 1 a

print chr(48), chr(49), chr(97)         # 十进制
>> 0 1 a

14. unichr(x)

  • 描述
    unichr(x) 函数 和 chr(x) 函数功能基本一样, 只不过是返回 unicode 的字符。

  • 语法

# -*- coding: UTF-8 -*-
unichr(x)
  • 参数
    x -- 可以是10进制也可以是16进制的形式的数字。

  • 返回值
    返回 unicode 的字符。

  • 实例

# -*- coding: UTF-8 -*-
print unichr(97)
>> 'a'
print unichr(98)
>> 'b'
print unichr(99)
>> 'c'

15. ord(x)

  • 描述
    ord(x) 函数是 chr(x) 函数(对于8位的ASCII字符串)或 unichr(x) 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

  • 语法

# -*- coding: UTF-8 -*-
ord(x)
  • 参数
    x -- 字符。

  • 返回值
    返回值是对应的十进制整数。

  • 实例

# -*- coding: UTF-8 -*-
print ord('a')
>> 97
print ord('b')
>> 98
print ord('c')
>> 99

16. hex(x)

  • 描述
    hex(x) 函数用于将10进制整数转换成16进制,以字符串形式表示。

  • 语法

# -*- coding: UTF-8 -*-
hex(x)
  • 参数
    x -- 10进制整数

  • 返回值
    返回16进制数,以字符串形式表示。

  • 实例

# -*- coding: UTF-8 -*-
print hex(255)
>> '0xff'
print hex(-42)
>> '-0x2a'
print hex(1L)
>> '0x1L'
print hex(12)
>> '0xc'
print type(hex(12))
>> <type 'str'>      # 字符串

17. oct(x)

  • 描述
    oct(x) 函数将一个整数转换成8进制字符串。

  • 语法

# -*- coding: UTF-8 -*-
oct(x)
  • 参数
    x -- 整数。

  • 返回值
    返回8进制字符串。

  • 实例

# -*- coding: UTF-8 -*-
print oct(10)
>> '012'
print oct(20)
>> '024'
print oct(15)
>> '017'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容