一:自动类型转换

自动类型转换注意针对Number数据类型来说的

当2个不同类型的数据进行运算的时候,默认向更高精度转换

数据类型精度从低到高:bool int float complex

#关于bool类型的两个值:True 转化成整型是1 False 转化成整型是0
#bool + int
res = True + 2
print(res)

# bool + float
res = True + 4.45
print(res)

#bool + complex
res = False + 5j
print(res)

# int + float
# 3.14 15~18 本质上存在精度消耗 因为小数的二进制在内存中是无限循环没有#终止 一般截取15~18位
res = 5 + 3.56
print(res)

# int + complex
res = 2 + (4-5j)
print(res)

#float + complex
res = 3.67 + (-5+4j)
print(res)

二:强制类型转换

1.Number 强制类型转换(int float complex bool)
Number 部分:

int :     整型   浮点型 布尔类型  纯数字字符串

float:    整型   浮点型 布尔类型  纯数字字符串

complex:  整型   浮点型 布尔类型  纯数字字符串 (复数)

bool:   ( 容器类型数据  /  Number类型数据 都可以 )

var1 = 5
var2 = 4.85
var3 = True
var3_2 = False
var4 = 3+9j
var5 = "88777"
var6 = "dasa33"

(1)int 强制类型转换成整型
res = int(var2)
res = int(var3) #Ture =>1
res = int(var3_2) #False =>0
#res = int(var4)  error
res = int(var5)
#res = int(var6) #error
print(res)

(2) float 强制类型转换成浮点型
res = float(var1)
res = float(var3)
res = float(False)
# res = float(var4) #error
res = float(var5)
print(res)

(3)complex 强制类型转换成复数
res = complex(var1)
res = complex(var2)
res = complex(var3)
res = complex(False)
res = complex(var5)
print(res)

(4) bool 强制类型转换成布尔类型 结果只有两种要么Ture 要么 False

'''
bool 可以转换所有的数据类型everything
'''
res = bool(var1)
res = bool(var2)
res = bool(var6)
res = bool(None)
print(res)

布尔类型为假的十种情况:
0  

0.0  

0j  

False  

''    空字符串 

()    空元组

[]    空列表

set()  空集合

{}    空字典

None
#系统关键字 None代表什么也没有 ,一般用于初始化变量的时候用
res = None
print(None)

 

2.容器类型数据强制转换(str list tuple set dict )
容器类型部分

str:  ( 容器类型数据  /  Number类型数据 都可以 )

list:    字符串 列表 元组 集合 字典

tuple:   字符串 列表 元组 集合 字典

set:     字符串 列表 元组 集合 字典  (注意:相同的值,只会保留一份)

dict:  使用 二级列表 或 二级元组   (二级集合语法上不错,但是无序,不建议使用)

 

var1 = "今天天气好晴朗"
var2 = [1,2,3,4]
var3 = ("黄盖","黄雄","派大星")
var4 = {"盖伦","压缩","剑圣"}
var5 = {'wfd':"闪现加大","wer":"从来不死"}
var6 = 3+6j

 (1) str 所有的数据类型都可以转成字符串str
'''
规律:基于原有类型,在外面套一层引号
'''
res = str(var2)
print(res,type(res))
res = str(var3)
res = str(var5)
res = str(var6)
print(res,type(res))
print(repr(res))  #打印出字符串类型的那个引号 <原型化输出>

 (2)list
'''
规律:
如果是字符串,把字符擦混当中的每一个字符当成列表中的新元素
其他的都是在原有数据类型的基础上,套一个[]标识符即可转化
'''
res = list(var1)
res = list(var3)
res = list(var5)  #把字典强转成列表时,只获取键,忽略值
# list(var6) #error
print(res,type(res))

(3)tuple
'''
规律:
如果是字符串,把字符擦混当中的每一个字符当成列表中的新元素
其他的都是在原有数据类型的基础上,套一个()标识符即可转化
'''
res = tuple(var1)
res = tuple(var2)
res = tuple(var5)  #把字典强转成元组时,只获取键,忽略值
res = tuple(var4)
print(res)

#print({1,2,3,4,"2323","111"})

(4)set
'''
规律:
如果是字符串,把字符擦混当中的每一个字符当成列表中的新元素
其他的都是在原有数据类型的基础上,套一个{}即可转化集合
'''
res = set(var1)
res = set(var5) #把字典强转成集合时,只获取键,忽略值
print(res)

#去掉列表当中的重复元素
listvar = ["周杰伦","周星驰","周星驰","王文","州路费"]
res = set(listvar)
print(res)
res = list(res)
print(res)

#简写
res = list(set(listvar))
print(res)

 

(5)强制转换成字典类型
# 多级容器数据:该数据是容器数据,并且里面的元素还是容器类型数据

# ##二级容器
#二级列表

listvar = [1,2,3,4,5,[6,7,8,9]]
res = listvar[-1][3]
print(listvar)
print(res)

# 二级元组
tuplevar = (1,2,3,4,5,(6,7,8,9))
# 二级集合 (只能在里面放元组作为集合里面的容器数据)
setvar = {1,2,3,(4,5,6)}
#setvar = {1,2,3(4,5,6,{'a':1,'b':2})} #error 必须是可哈希不可变的数据
# setvar = {1,2,3,[4,5,6]} #error

print(setvar)
#二级字典
dictvar = {"a":{"c":3},"b":2}
res = dictvar["a"]
print(res)
#输出a相对应的值{"c":3}

print(res['c'])
#输出c相对应的值3 ,属于子字典中的值

#简写
print(dictvar["a"]['c'])

# 四级容器
content = [1,2,3,4,(4,5,{'a':{4,5,6,88},"b":2},7),5]
print(content[4])
print(content[4][2])

#获取集合
print(content[4][2]['a'])

# 等长的二级容器
'''
首先容器是2个,代表二级容器
每一个容器元素个数都是一样的叫做等长
'''
listvar = [(1,2,3,4),(5,6,7,8)]
tuplevar = ([1,2],[3,4],[5,6])

# ## dict强制转换成字典 :(里面的元素只能是2个)
(1) 外面是列表,里面是列表或元组或字符串
'''字符串元素的个数只能是2个有它的局限性,不推荐使用'''
'''[["a",[1,2,3,4]]   ]'''
listvar = [['a',1],('b',2),"c3"] #c33
res = dict(listvar)
print(res,type(res))

#特殊注意:
res = dict(   [   ["a",[1,2,3,4]]  , ("b",[5,6,6,7]) ]   )
print(res,"<============>")
'''
#会产生意想不到的结果,不推荐使用
listvar = [{'c',1},{'d',2}]
res = dict(listvar)
print(res,type(res))
'''

(2) 外面是元组,里面是列表 或元组或字符串
'''字符串元素的个数只能是2个,有它的局限性,不推荐使用'''
tuplevar = (["c",3],("d",33),"f2")
res = dict(tuplevar)
print(res,type(res))

 (3)外面是集合,里面是元组或字符串
setvar = {('a',1),('b',2)}
res = dict(setvar)
print(res,type(res))

总结:
关于容器类型数据的强转一共如下:
str() list() set() tuple() dict() 都可以转换成对应的数据类型
关于Number数据类型的强转一共如下:
int() bool() float() complex() 都可以转换成对应的数数据类型
可以用强转函数对值进行初始化
res = str()
print(repr(res))
res = bool()
print(res)

print('--------------------')
#TypeError: unhashable type: 'list'
#res = set((1,2,3,4,[4,5,6,6,2],{3,4,5,6}))
#print(res)

#元组不能改变它的儿子,但是可以改变它的孙子
#元组第一级的所有元素不能修改,但是如果该元素是列表,通过列表本身,可以修改它自己的值
tup = (1,2,3,[4,5,(9,2,[99,88],1),6],{11,22,3})
#tup[3] = 90  #元组不能修改
#tup[3][2][-1] = 18  #在里层是一个元组的元素不能修改

print(tup)
#print(tup[3])
#tup[3][-1] = 7  #元组中的列表里的值可以修改
#print(tup)

(2)字典的键和集合当中的值有要求,必须可哈希不可变数据,字典的值不要求
#一般在进行容器类型强转时,说的是tuple list set dict 字符串比较特殊不包含在内

#强转成字典的条件是:

(1)等长的二级容器

(2)内层容器内里面的元素只能是2个

python 基础之自动类型转换和强制类型转换的更多相关文章

  1. c#小灶——自动类型转换和强制类型转换

    前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢? ; double b = a; Console.WriteLine(b); 运行结果是:1 我们把一个整型的变量赋值给了一个 ...

  2. Java基础:数值类型转换、强制类型转换

    数值类型之间的转换 数值类型之间的转换,在小数值往大数值转换时,不会发生精度的损失.在小数值往大数值转换时有可能发生精度的损失. 比如byte最大值也只有127,如果一个大于127的int类型数据往b ...

  3. Python基础10- 函数之内部函数与强制转换

    #coding=utf-8 import mathimport osimport socket Python函数包括以下三类:内部函数.第三方函数和自定义函数内部函数包括:字符函数库.数学函数库.系统 ...

  4. java隐士类型转换和强制类型转换

    ,byte和short型在计算时会自动转换为int型计算,结果也是int 型.所以a1*a2的结果是int 型的. byte+byte=int,低级向高级是隐式类型转换,高级向低级必须强制类型转换,b ...

  5. Java隐式类型转换和强制类型转换

    一.强制类型转换 char 和 整型之间的类型转换 char a7 = 'a'; System.out.println(a7); System.out.println( (int)a7 ); Syst ...

  6. python基础(字符串常用、数字类型转换、基本运算符与流程控制)

    一.字符串常用操作: #! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "Z'N'Y" # Date: 2 ...

  7. 数据类型/强制类型转换 和运算符---标识符规则/关键字 a++和++a区别

    3.2关键字都是小写,TRUE FALSE NULL都不是Java关键字 3.3数据类型 变量相当于一个有名称的容器,该容器用于装各种不同类型的数据 Java类型分为2种 基本类型: 引用类型: 基本 ...

  8. C学习笔记(10)--- 强制类型转换,错误处理,递归

    1.强制类型转换: 强制类型转换是把变量从一种类型转换为另一种数据类型.例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型. 您可以使用强制 ...

  9. 多用as少用强制类型转换

    在 C# 中存在一个名叫静态类型检查的机制,这个机制可以让编译器帮助我们把类型不服的用法找出来,从而使得应用程序在运行期间加少一些类型检查的操作.但是有时候我们还是需要进行运行期类型检查,比如我们在设 ...

随机推荐

  1. JavaWeb基础-Jsp内置对象

    request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应,它是HttpServlteRequest类的实例.Request对象具有请求域,即完成客户端 ...

  2. unigui的页面布局使用

    (unigui的页面布局还是很强大的,基本什么的排版都能搞好.前面部分为原文章翻译,翻译不一定很准确,就能看吧,后面有使用说明,有什么不明白的欢迎加我QQ(910300653)一起交流学习) 一.布局 ...

  3. effective_java 第34条:用接口模拟可伸缩的枚举

    例如: /** * 加减乘除枚举 * Created by yulinfeng on 8/20/17. */ public enum Operation { PLUS { double apply(d ...

  4. Object.assign的用法

    工作中使用的Object.assign 类的赋值 var initData = { a:'', b:'' } var oldData = { a:'ww', b:'ee' } var newData ...

  5. IP通信基础课堂笔记----以太网VLAN

    1.以太网与802.3格式差异 2.以太网MAC地址特点 3.以太网MAC帧字节范围:64-1518 4.协议CSMA:载波侦听多路访问 5.碰撞检测 6.网卡(适配器)

  6. goroutine和channel

    近期在学习golang的goroutine和channel时候有一些疑惑: 带缓冲的channel和不带缓冲的channel有什么区别? goroutine和主进程的有哪些影响和关系? 多个gorou ...

  7. java面向对象编程(七)--四大特征之多态

    1.多态概念 多态性是对象多种表现形式的体现.比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴等等.那么我到宠物店说"请给我一只宠物&quo ...

  8. 2019-04-19-day036-协程与进程池

    内容回顾 11:30 码云 :王老师检查作业+定期抽查 注册账号 考试的时间 threading.enumerate(),能够获取到当前正在运行的所有线程对象列表 守护线程 守护线程会等待所有的非守护 ...

  9. session的部分理解

    定义 Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session ...

  10. ElasticSearch CPU和内存占用高的优化记录

    公司最近使用ElasticSearch作为数据报表汇总引擎.上线三个月累计数据800万,但是今天突然大面积出现查询超时,上服务器查看服务运行情况,发现cpu使用率高达300% mem 使用率也到了90 ...