python内建类型&&标准类型

举报
芒果_Mango 发表于 2022/04/30 23:05:40 2022/04/30
【摘要】 大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流作者简介:CSDN C/C++领域新星创作者https://blog.csdn.net/chuxinchangcun?type=blog掘金LV3用户 https://juejin.cn/us...

大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

Python中的变量名, 只是一个访问对象的 “钥匙” . 多个不同的变量, 完全可以访问相同的对象, 因此我们讲 这种变量名也叫对象的 “引用”.

验证1:

a = 2
b = 3
print(id(a),id(b))  #140734889681584 140734889681616
b = 2
print(id(b))    #140734889681584

验证2:

b = 3
print(id(b))    #140734889681616
b +=1
print(id(b))    #140734889681648

相加其实是创建一个新的对象,然后把这个标签b移到这个新的对象上


思考: 为什么Python的变量是这样的? 和C/C++差异这么大捏?
  • 空间考虑: 比如一个数字2, 在Python中只有这么一个数字2; 而一个C/C++程序中可能会有N个2.

  • 时间考虑: 比如 a=b 这样的赋值, 只是修改了一下贴标签的位置, 不需要对对象进行深拷贝. 为什么Python可以这么做, 而C/C++不能这样设计呢?

    • C++中的赋值相当于深拷贝, a = 100 b = a ->内存中存放了两份100
    • java和python相当于浅拷贝 a = 100 b = a ->a和b都是100的引用,内存中只存放了一份100

Python的GC机制, 是这样的设定的基础.


理解对象和类型

关于不可变类型和可变类型:
  • python中的 int,str,float,tuple其实是不可变类型的变量 (即:没办法修改一个已经存在的int类型的对象的值),只能创建新的,不能修改已经有的
s = "hehe"
s[0] = 'a'; #error 报错 TypeError: 'str' object does not support item assignment
​
s = 'a'+s[1:]   #只能重新创建
print(s)    #aehe   
#原来的hehe对象已经销毁,s贴在了aehe这个对象的身上
  • 列表和字典都是可变对象

  • 有些对象是 “相似” 的, 于是我们把对象归归类. 比如把所有的整数归为一类, 把所有的浮点数对象归为一类,把所有的字符串归为一类.
  • 相同的类型的对象, 须有相同的操作. 比如, 所有的整数对象, 都可以进行加减乘除操作. 所有的字符串都可以使用切片操作.

关于动态静态强弱类型
  • Python是一种 动态强类型 编程语言.
  • 动态是指运行时进行变量类型检查; 强类型 指类型检查严格, 并且"偏向于"不允许隐式转换.

image-20220316152310315

动态类型:一个变量在运行过程中类型发生变化

静态类型:一个变量在运行过程中类型不能发生变化

强类型:越不支持隐式类型转化,类型越强

弱类型:越支持隐式类型转化,类型越弱

类似的, C语言是一种静态弱类型语言. Java的类型检查更为严格, 一般认为是静态强类型, 而Javascript则是动态弱类型

如:

int a = 10; long b = 20; a = b ->C++可以 java不可

int a = 10; bool b = false; a = b ->C++可以,把false当成0 java不可


动态类型:小规模下更好,使用灵活

大规模常用静态类型,否则多人协作容易有歧义

但是类型:越强越好


标准类型

  • 整型

  • 浮点型

    • 注意:如果想要比较两个浮点数是否相同,不能直接比较,因为会有精度损失,要做差比较
  • 复数型

  • 布尔型

  • 字符串

  • 列表

  • 元组

  • 字典

其它内建类型

  • 类型
  • NULL对象(None)
  • 文件
  • 函数
  • 模块

类型的类型

前面我们说, 类型也是对象

print(type(type(100)))  #<class 'type'>  
print(id(type(100)))    #140734889206240

None ->空类型

Python有一个特殊的类型, 称为NoneType. 这个类型只有一个对象, 叫做None

print(type(None))   #<class 'NoneType'>
  • NoneType类似于C语言中的void
  • None类似于C语言的空指针NULL(NULL的含义:特指0号地址的内存)
  • None这个对象没啥有用的属性, 它的布尔值为False
def func():
    print("haha")
ret = func()    #打印haha     函数没有返回值却接收了,就是None
print(ret)  #打印None,

内建类型的布尔值

所有的标准对象, 均可以用于布尔测试(放到if条件中).

下列对象的布尔值是False

  • None
  • False
  • 所有值为0的数字(0, 0.0, 0.0 + 0.0j (复数))
  • “” (空字符串)
  • [] (空列表)
  • () (空元组)
  • {} (空字典)
if "":
    print("True")
else:
    print("False")
#打印:False

其他情况下, 这些内建对象的布尔值就是True.

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。