Python数据类型转换及运算符等
Python数据类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数 | 描述 |
---|---|
将x转换为一个整数 |
|
将x转换到一个浮点数 |
|
创建一个复数 |
|
将对象 x 转换为字符串 |
|
将对象 x 转换为表达式字符串 |
|
用来计算在字符串中的有效Python表达式,并返回一个对象 |
|
将序列 s 转换为一个元组 |
|
将序列 s 转换为一个列表 |
|
转换为可变集合 |
|
创建一个字典。d 必须是一个序列 (key,value)元组。 |
|
转换为不可变集合 |
|
将一个整数转换为一个字符 |
|
将一个字符转换为它的整数值 |
|
将一个整数转换为一个十六进制字符串 |
|
将一个整数转换为一个八进制字符串 |
eval() 函数
eval()函数用来执行一个字符串表达式,并返回表达式的值
语法:
eval
(source[, globals[, locals]]) -> value
:一个Python表达式或函数compile()返回的代码对象参数:
source
-
globals
:可选。必须是dictionary -
locals
:可选。任意map对象
如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。
python的全局名字空间存储在一个叫globals()
的dict对象中;局部名字空间存储在一个叫locals()
的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。
1、对表达式结果进行计算
x = 1 y = 1 num = eval("x+y") print('num',num) def g(): x = 2 y = 2 num1 = eval("x+y") print('num1',num1) num2 =eval("x+y",globals()) print('num2',num2) num3 = eval("x+y",globals(),locals()) print('num3',num3) g() num 2 num1 4 num2 2 num3 4 解析:num2 因为有globals所以是全局变量,执行后结果为4;num3 既有globals 又有locals,仅在此情况下,优先采用locals的值,故计算结果是2
2、字符串还原为int a=input('-->) b=eval(a) print(b,type(b)) 与int函数类似 3、字符串转为对应的数据类型,列表、元组等数据类型 a='1,2,3,4' >>> b=eval(a) >>> b (1, 2, 3, 4) >>> a='[1,2,3,4' >>> a '[1,2,3,4' >>> a='[1,2,3,4]' >>> a '[1,2,3,4]' >>> b=eval(a) >>> b [1, 2, 3, 4]
list转换str类型
1、第一种情况,如果list [ ] 中包含的元素是str " "类型。
l=['a','b','c','d','2'] str_l=''.join(l) print(str_l) 运行结果: abcd2
2、第二种情况,列表 [ ] 里面含有的元素是整形int ,需要将整形int 转换成str类型
命令:''.join(list)
其中,引号中是字符之间的分割符,如“,”,“;”,“\t”等等
l=[1,2,34,5] strl=[str(x) for x in l] print(''.join(strl)) print(','.join(strl)) #可加逗号分隔 运行结果: 12345 1,2,34,5
字符串转换列表类型
s = 'hello world' print(list(s)) #['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] #一个字母一个元素,不太美观 l=s.split(' ') #['hello', 'world'],正常多了 print(l)
list转换int类型
#列表求和,sum函数 l=['1','2','3','4'] b=list(map(int,l)) #map返回的对象不是列表,需要加list() print(sum(b)) 运行结果: 10 #结合split()函数中的字符串用map函数替换成int类型 def addn(a,b,c): s=a+b+c print(s) f,g,k=map(int,input('输入3个数,逗号隔开:').split(',')) addn(f,g,k) 运行结果: 输入3个数,逗号隔开:4,5,6 15
float()函数,将其他类型数据转为浮点数
str()函数,将其他类型数据转为字符串
int()函数,将其他类型数据转为整型
划重点:这里的2.33e-4指的是2.33 x e^-4
于是小明想搞个大新闻
抱歉,这并不支持
划重点:int()强制转换类型时候是扔掉小数点之后的数字,而不是四舍五入
小明:我不服!
不服试试
算术运算
算数运算符的优先级(按照从低到高排序,同一行优先级相同)
1. +、-
2. * , / , // , %
3. 单目+、单目-
4.**
我们来看几个栗子:
之前的运算都是整型数据运算,如果是不同类型的数据运算,会发生隐式类型转换。
转换的规则是:低等类型向高等类型转换
前提是可以进行算术运算
等级从低到高是:bool<int<float<complex
划重点:在算术运算时,True代表1,False代表0
#身份运算(is ,is not) is比较的是id,而双等号比较的是值 毫无疑问,id若相同则值肯定相同,而值相同id则不一定相同 >>> x=1234567890 >>> y=1234567890 >>> x == y True >>> id(x),id(y) (3581040, 31550448) >>> x is y False
常用的Python的运算内置函数:
内置(意思就是安装好就有,直接能用)
举个栗子,还记得以前手机么,买来很多内置游戏和扣费软件,真是让人深恶痛绝
上表中的long,大家不用理会
分别看一下:
小明:老师!你的数字近似只会四舍五入么?这个操作过时了!
小明啊,莫激动,虽然内置的没有,我们可以导入一些第三方的模块嘛!就像你新买的手机里没有王者荣耀,你就去应用商店下载个不就能玩了么!
初步接触导入模块
导入模块的操作是
import 模块的名称
我们导入了math这个模块,这个模块是做一些数学运算的
ceil(x)方法是返回大于等于x的最小整数
floor(x)方法是返回小于等于x的最大整数
常用的还有几个:
sqrt(x)返回平方根
exp(x)返回以e为底的指数
log(x)对数操作
还有常用的数学常量
π 和 e
划重点:我们这里使用了import math,则用到这个math模块里的 方法(可以理解为函数)和常量 要加上模块的名称,即:math.e 这样
如果你要长时间多次使用某个模块的内容
可以使用:
则直接可以使用模块里的方法和常量
输入输出
输入指的是从输入设备获取数据,这里的输入设备往往指的是键盘,通过input()函数可以实现这一目的
x = input(<提示字符串>)
常用字符大小关系是:
空字符串<空格<'0'~'9'<'A'~'Z'<'a'~'z<汉字
sep参数是规定分隔符选用的是什么
print() 函数还可以用字符串格式化控制输出的形式
常见的格式字符如下表:
如果是浮点数,
%m.nf m指的是输出总宽度,小数点之后保留n位(四舍五入保存),如果总宽度超过m,按照实际显示
赋值运算
赋值,就是往盘子里放一些食品
在Python中,使用' = ' 表示赋值
一般形式为:
变量 = 表达式
关系运算符
关系运算符,说得通俗点就是作比较的比较运算符
比较运算通常是比较两个数值型或者字符串型数据,然后返回一个布尔值
布尔值就是bool值
它只有两种可能,‘真’或者是‘假’
关系运算符有以下几种:
> 大于
>= 大于或等于
<= 小于或等于
< 小于
== 等于(注意和赋值的 = 区分开)
!= 不等于
is 比较两个引用是否指向了同一个对象(引用比较)
is not 比较两个引用是否指向了不同对象(引用比较)
我们举几个例子看一下:
注意,在做数值比较的时候,这里的True相当于1,False相当于0
大家看到没,is和==应该怎么理解,怎么区别呢?
Python中的对象包含三要素:id、type、value
其中id用来唯一标识一个对象,即在内存开辟了一块空间暂时存放这个变量
type标识对象的类型,如之前说过的str,int,float等
value是对象的值
is判断的是a对象是否就是b对象,是通过id来判断的
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的
我们再看看:
a和b的id是一样的,就是说他们的值指的是同一个位置同一个值
而c的id和他们不一样,c指向的值和他们不一样
我们继续:
刚才的没有涉及到字符串的比较
字符串也可以比较大小
规则是:按照英文字母的排序进行比较
abcdefg...
流程是:
首先取两个字符串的第1个字符比较,较大的字符所在的字符串更大
如果第一个字符相同,再取两个字符串的第2个字符比较,较大的字符所在的字符串更大
其余以此类推
如果比到最后都相同,则两个字符串相等
如果某个字符串已经被比较完了,另一个还剩一部分,则剩一部分的字符串比较大
特别要注意的,如果是空字符串和非空字符串比较,空串小
我们举例看一下:
这是因为,这是Python中比较浮点数是否相等机制是他们的差距是否小于一个极小的值来判断
所以是精度问题,你不要纠结啦~
逻辑运算符
逻辑运算符有三种,与 或 非
and:逻辑‘与’运算符,只有当and两边都是真,结果才是真
or:逻辑‘或’运算符,只要当or一边的是真的,结果就是真
not:逻辑非运算符,反转逻辑值
表达式
值得注意的是:
当数值运算时,不同类型的数值会偷偷发生转换类型,然后运算
当int与float运算时,int常常转为float再计算
证明如下:
运算符优先级如下: