Python数据类型的显式转换
数据类型的显示转换,也称为数据类型的强制类型转换,是通过Python的内建函数来实现的类型转换。
显式转换的多种类型:
- int(x [,base]) ⇒ 将x转换为一个十进制的整数
- long(x [,base]) ⇒ 将x转换为一个十进制的长整数
- float(x) ⇒ 将x转换为一个浮点数
- str(object) ⇒ 转换为字符串
- repr(object) ⇒ 转换为表达式字符串
- eval(str) ⇒ 用来计算在字符串中的有效Python表达式,并返回一个对象
- tuple(seq) ⇒ 将序列seq转换为一个元组
- list(seq) ⇒ 将序列seq转换为一个列表
- chr(x ) ⇒ 将一个整数转换为一个字符
- unichr(x ) ⇒ 将一个整数转换为Unicode字符
- ord(x ) ⇒ 将一个字符转换为它的整数值
- hex(x ) ⇒ 将一个整数转换为一个十六进制字符串
- oct(x ) ⇒ 将一个整数转换为一个八进制字符串
下面详细介绍一些常用的类型转换。
Non-String转换为String
str()函数
str()是最常用的转换为String的内建函数,可以接受任意对象,并将其转换为String类型。若object为String类型,则返回一个同类型的对象。
将List对象转换为String:
>>> li=["my","name","is","jmilk"]
>>> li
['my', 'name', 'is', 'jmilk']
>>> strLi = str(li)
>>> strLi
"['my', 'name', 'is', 'jmilk']"
>>> strLi[0]
'['
>>> strLi
"['my', 'name', 'is', 'jmilk']"
将Tuple对象转换为String:
>>> tup = ('my','name','is','jmilk')
>>> tup
('my', 'name', 'is', 'jmilk')
>>> strtup=str(tup)
>>> strtup
"('my', 'name', 'is', 'jmilk')"
>>> strtup[1]
"'"
>>> strtup[3]
'y'
将Dictionary对象转换为String:
>>> dic = {'name':'Jmilk','age':23}
>>> dic
{'age': 23, 'name': 'Jmilk'}
>>> strdir=str(dic)
>>> strdir[3]
'g'
上面3个例子可以发现,在转换为String后无论是原来的特殊符号还是空格符都会成为String的元素之一。
repr()
repr()函数的使用方法于str()函数类似,都是传入一个任意对象,再返回一个String类型对象,但两者却有着本质的区别。
str()和repr()的区别:str()函数的目标是一般用户的可读性,返回一个更适合人阅读的nice string。而repr()则返回一个更适合python解析器阅读的canonical string,同时会返回Python解析器能够识别的数据细节,但这些细节对一般用户来说是多余的。而且repr()转换后的String对象可以通过求值运算eval()来还原到转换之前的对象,相比之下str()通常不需要eval()去处理。
>>> name = 'My name is Jmilk\n'
>>> name
'My name is Jmilk\n'
>>> str(name)
'My name is Jmilk\n'
>>> repr(name)
"'My name is Jmilk\\n'"
>>> print str(name)
My name is Jmilk
>>> print repr(name)
'My name is Jmilk\n'
上面例子可以看出str()打印出来的字符串会更符合人的阅读习惯。
eval()
eval()函数,能够结合repr()函数将一个经过转换为Strng类型后的对象还原为转换之前的对象类型。同时eval()也被称为求值运算,可以将字符串str当成有效的表达式来求值并返回计算结果。
>>> name = ('My name is Jmilk\n')
>>> name1 = str(name)
>>> name1
'My name is Jmilk\n'
>>> name2=repr(name)
>>> name2
"'My name is Jmilk\\n'"
>>> eval(name1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
My name is Jmilk
^
SyntaxError: invalid syntax
>>> eval(name2)
'My name is Jmilk\n'
eval(str(Object))可能会报错,无法还原为原来的对象型。而eval(repr(object))却可以还原,下面例子:
>>> name = ('My','name','is','Jmilk\n')
>>> repr(name)
"('My', 'name', 'is', 'Jmilk\\n')"
>>> eval(repr(name))
('My', 'name', 'is', 'Jmilk\n')
>>> type(eval(repr(name)))
<type 'tuple'>
总结:这是因为str()函数主要是为了让人能够更好的阅读其内容,而rper()除了转换为String类型外,还能够被Python解析器识别其数据细节,从而repr()转换后的字符串能够被当作有效表达式来处理。
注意:eval()函数最主要的功能是能够将字符串中有效的表达式进行计算并返回一个对象。如下:
>>> sum="100*100"
>>> eval(sum)
10000
Non-int转换为int
Int型的最大值仅与系统位数有关,32位:maxInt == 2**(32-1)-1 ; 64位:maxInt == 2**(64-1)-1。可以通过sys.maxint
来查看:
>>> import sys
>>> sys.maxint
9223372036854775807
>>> 2**63-1
9223372036854775807L
在Python2.4x版本之后为Int增加了Long的隐式转换来防止数据范围溢出。
int(x[, base=10]) -> int or long
base:指定被转换的String进制
x:通常为一个String
当一个Long > sys.maxint(2**63-1)时,Long类型对象是无法转换为Int的。
Example:
In [79]: int(2**63)
Out[79]: 9223372036854775808L #仍为Long类型
浮点型转为整型会进行向下取整。
>>> int(10.9)
10
String转换为Int
>>> int ('0xa',16)
10
>>> int('1010',2)
10
参数16表示’0xa’为16进制数,int()转换以后获得10进制数,若不指明’0xa’的进制,则会报错。
>>> int('0xa')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0xa'
Non-long转化为long类型
long(x=0) -> long
long(x, base=10) -> long
生成一个long对象:
>>> long(10)
10L
>>>
>
也可以简单的实现:
>>> num = 10L
>>> type(num)
<type 'long'>
>>> num
10L
>>>
Int转化为Long
int型转换为long型不需要强制类型转换,这就是相对的隐式类型转换,系统会在后台完成。
Float转换为Long
向下取整
>>> long(10.9)
10L
String转换为Long
>>> long('0xa',16)
10L
>>> long('1010',2)
10L
>>>
>
可以看出,Int与Long类型的数据非常类似,唯一的区别在于,Long类型的数据范围更加大。(Int)
Non-float转换为float
可以接收Int和String类型参数,float()函数在连接数据库操作会被经常使用。当参数为String时,只能出现数字和一个点额任意组合,若出现多个点号,则会出现异常。
>>> float(10)
10.0
>>> float('100')
100.0
>>> float('.1111')
0.1111
>>> float('.98.')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): .98.
>>>
String转换为List
将字符串中的每一个字母作为列表中的一个元素,空格也算是一个元素。
>>> name = 'My name is Jmilk'
>>> list(name)
['M', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'J', 'm', 'i', 'l', 'k']
>>>
Tuple转换为List
Tuple转换为List与String其实大同小异:
>>> tup = ('My','name','is','Jmilk')
>>> list(tup)
['My', 'name', 'is', 'Jmilk']
>>>
将Tuple对象中的每一个元素转换为List中的每个元素。
String转换为Tuple
>>> str = 'My name is Jmilk!'
>>> tuple(str)
('M', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'J', 'm', 'i', 'l', 'k', '!')
>>>
类似String转换为List,空格任然算一个元素。
List转换为Tuple
>>> li
['my', 'name', 'is', 'jmilk']
>>> tuple(li)
('my', 'name', 'is', 'jmilk')
>>>
将List和Tuple复合数据类型转换为Dictionary
格式:dict([(key1,value1),..])
>>> li = ['name','age','city']
>>> tup = ('jmilk',23,'BJ')
>>> zip(li,tup)
[('name', 'jmilk'), ('age', 23), ('city', 'BJ')]
>>> dict(zip(li,tup))
{'city': 'BJ', 'age': 23, 'name': 'jmilk'}
>>>
Dictionary转换为List
相对的,Dictionary的键值对也能够转换为List和Tuple的复合数据类型。
D.items() -> list of D’s (key, value) pairs, as 2-tuples
>>> dic={'age': 23, 'city': 'BJ', 'name': 'jmilk'}
>>> dic
{'city': 'BJ', 'age': 23, 'name': 'jmilk'}
>>> dic.items()
[('city', 'BJ'), ('age', 23), ('name', 'jmilk')]
>>> dic.keys()
['city', 'age', 'name']
Int转换为字符char
chr(i) -> character
Return a string of one character with ordinal i; 0 <= i < 256.
以整数所对应的ASCII码来转换为Char,i属于[0,256)。
>>> chr(65)
'A'
>>> chr(97)
'a'
>>>
最后,强制数据类型转换在编程过程中非常常见,且在对内存、时间等运行环境要求严格的程序中尤为重要。
Python数据类型的显式转换的更多相关文章
- python 数据类型---布尔型& 字符串
python数据类型-----布尔型 真或假=>1或0 >>> 1==True True >>> 0==False True python 数据类型----- ...
- Python 数据类型及其用法
本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点型以及布尔类型.这些基本数据类型组 ...
- day01-day04总结- Python 数据类型及其用法
Python 数据类型及其用法: 本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点 ...
- Python数据类型及其方法详解
Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...
- Python学习笔记(五)--Python数据类型-数字及字符串
Python数据类型:123和'123'一样吗?>>> 123=='123'False>>> type(123)<type 'int'>>> ...
- python数据类型之元组、字典、集合
python数据类型元组.字典.集合 元组 python的元组与列表类似,不同的是元组是不可变的数据类型.元组使用小括号,列表使用方括号.当元组里只有一个元素是必须要加逗号: >>> ...
- 1 Python数据类型--
常见的Python数据类型: (1)数值类型:就是平时处理的数字(整数.浮点数) (2)序列类型:有一系列的对象并排或者排列的情况.如字符串(str),列表(list),元组(tuple)等 (3)集 ...
- Python数据类型和数据操作
python数据类型有:int,float,string,boolean类型.其中string类型是不可变变量,用string定义的变量称为不可变变量,该变量的值不能修改. 下面介绍python中的l ...
- Python数据类型(python3)
Python数据类型(python3) 基础数据类型 整型 <class 'int'> 带符号的,根据机器字长32位和64位表示的范围不相同,分别是: -2^31 - 2^31-1 和 - ...
随机推荐
- python threading
//test.py 1 import threading 2 import time 3 4 exitFlag = 0 5 6 class myThread (threading.Thread): 7 ...
- django基础(一)
一.创建django程序 1.终端:django-admin startproject sitename 2.IDE创建Django程序时,本质上都是自动执行上述命令 常用命令: python man ...
- yield和send函数
yield作用类似于return,其本质是一个迭代器. 当程序执行到yield时,会结束本次循环,返回一个值,然后内置含有next()函数, 下次在执行时,会从yield结束的地方继续执行. 带yie ...
- C# 语言 - 一个优雅的分页实现
这篇文章介绍分页对象的封装,如何优雅的对数据进行分页. 先上调用代码: 我们希望能在一个Enumerable对象后面直接.ToPagedList(pageIndex,pageSize)这样优雅的调用分 ...
- Oracle查询表占用空间的大小
select * from (select OWNER, segment_name, segment_type, sum(bytes) mmm from dba_segments where /*ta ...
- BFS 搜索 蓝桥杯模拟赛
题目链接:https://nanti.jisuanke.com/t/36117 这个题目想不到用广搜来做,一直在想深搜. 广搜的思路呢,是把最外圈不是黑色(不是0)的数 的位置 i 和 j 进队,赋值 ...
- html中通过js获取接口JSON格式数据解析以及跨域问题
前言:本人自学前端开发,一直想研究下js获取接口数据在html的实现,顺利地找到了获取数据的方法,但是有部分接口在调用中出现无法展示数据.经查,发现时跨域的问题,花费了一通时间,随笔记录下过程,以方便 ...
- html5-常用的3个基本标签
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 【转】Loadrunder场景设计篇——添加windows Resource计数器和指标说明
转至:https://www.cnblogs.com/langhuagungun/p/8488270.html Loadrunder场景设计篇——添加windows Resource计数器和指标说明 ...
- tetrahedron (公式)
我是直接搬运了某大佬的代码,毕竟我不清楚如何计算这个东西. 其中四点共面的求法就是体积为0,然后圆心和半径就公式了. #include<cstdio> #include<iostre ...