We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
今天是2020年的七夕,DE8UG最近正在做Python面向对象的课程,突然来了点灵感,写写Python里面有多少种对象吧,凑个热闹。
首先说一下Python中的对象从哪来的。
typedef struct _object { _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; PyTypeObject *ob_type; } PyObject;
Python的底层用c语言写的,所以正统的Python其实叫做CPython。在Windows安装Python时候,肯定会有个叫python.exe的程序(其他系统也类似),是专门用来解释执行Python代码的。在这里的Python代码最终转为了c代码。c代码里面有个 PyObject结构体。这个结构体有意思了,主要包含俩功能,一个是引用计数是回收垃圾用的,另一个是个指针,指向“type object”,用来根据不同类型的代码转接到不同的c函数。其实这里就是所谓对象的起源了,因为这里的type其实会和python代码定义的不同对象类型来个对应的检查,检查通过了就去执行对应的函数了,更具体说就是去内存里找对应的数据进行处理。比如Python代码传过来一个列表a,这个a最终到c语言里就会通过PyList_Check(a) 检查是不是定义好的list这个type,然后就去做对应操作了。
#define PyList_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
对于学习编程认为面向对象很难的同学,其实可以想开点,这不过是python与c语言互相串通,定义好的数据交换规则罢了。只是这里面杂七杂八的规则有点多,咱们以后慢慢聊。你可以提前收藏网页de8ug.vip,关注最新进展。
接下来就是配合七夕的表演了,我们来数数Python里面有多少种对象。 刚才我们聊到Python对应的c语言里有个type,可以理解为类型的意思。扩展到Python里面,会经常出现一个词儿叫做object type。顾名思义,不同的对象其实就是不同的类型,我们生活中各种物品都分门别类,想用代码来处理,那么就在代码里面也给他们分门别类,这样计算起来好算,存储起来也好存。
至于Python里面有多少种对象,可以从重要的几种内置类型说起。这些内容主要在官方文档的stdtypes章节。 Python里面的最重要的内置类型有 numerics, sequences, mappings, classes, instances and exceptions。翻译成普通话就是数字,序列,映射,类,实例,异常。如果你要长期写代码,还是直接记住英文名字比较好。
首先是Numeric Types,支持int, float, complex(整数,浮点数,复数)三种数据。这个很好理解了,我们从小接触数学,进行各种计算都离不开各种数学数字。
接下来是Sequence Types,即序列类型,其中list, tuple, range是很常见的表示序列的类型,然后有个更常用的关于字符文本等的序列被单拿出来为str,计算机中的内部世界二进制的序列最为常见,所以序列类型还有Binary Sequence Types,其中又包括bytes, bytearray, memoryview。 序列里面还有个比较特殊的就是集合set,主要用于寻找不重复的元素和进行数学集合运算。
提到序列类型,就要出现迭代器Iterator和生成器Generator了,他们对于从序列中寻找某一个元素非常重要。
在数据结构中,映射类型是非常重要的一种。在各种编程语言里用途也非常多,这也是DE8UG个人非常喜欢的一种。Python里的映射类型就是字典dict了。在做各种开发时,这种数据结构用途非常广泛,让我们能很方便地存储有对应关系的数据并快速查找需要的元素。
接下来就是大量的其他类型了。小到Boolean,null,大到一个class,一个module,真的可谓是处处都是对象了。看到这么多的objects没必要惊慌,根据自己的学习进度和使用需要,遇到不同的对象,仔细查看ta对应的属性和方法就好。
Python中的对象大致算来就分了10几个大类,再往下具体划分就更多了。你学面向对象了吗?学会用哪几个对象了?欢迎在七夕之夜聊聊你的对象们 😁
首发于公众号「Python随身听」和同名播客。如果对您有帮助,欢迎小额赞助👍。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
今天是2020年的七夕,DE8UG最近正在做Python面向对象的课程,突然来了点灵感,写写Python里面有多少种对象吧,凑个热闹。
对象从哪来
首先说一下Python中的对象从哪来的。
Python的底层用c语言写的,所以正统的Python其实叫做CPython。在Windows安装Python时候,肯定会有个叫python.exe的程序(其他系统也类似),是专门用来解释执行Python代码的。在这里的Python代码最终转为了c代码。c代码里面有个 PyObject结构体。这个结构体有意思了,主要包含俩功能,一个是引用计数是回收垃圾用的,另一个是个指针,指向“type object”,用来根据不同类型的代码转接到不同的c函数。其实这里就是所谓对象的起源了,因为这里的type其实会和python代码定义的不同对象类型来个对应的检查,检查通过了就去执行对应的函数了,更具体说就是去内存里找对应的数据进行处理。比如Python代码传过来一个列表a,这个a最终到c语言里就会通过PyList_Check(a) 检查是不是定义好的list这个type,然后就去做对应操作了。
对于学习编程认为面向对象很难的同学,其实可以想开点,这不过是python与c语言互相串通,定义好的数据交换规则罢了。只是这里面杂七杂八的规则有点多,咱们以后慢慢聊。你可以提前收藏网页de8ug.vip,关注最新进展。
Python里面有多少种对象
接下来就是配合七夕的表演了,我们来数数Python里面有多少种对象。
刚才我们聊到Python对应的c语言里有个type,可以理解为类型的意思。扩展到Python里面,会经常出现一个词儿叫做object type。顾名思义,不同的对象其实就是不同的类型,我们生活中各种物品都分门别类,想用代码来处理,那么就在代码里面也给他们分门别类,这样计算起来好算,存储起来也好存。
至于Python里面有多少种对象,可以从重要的几种内置类型说起。这些内容主要在官方文档的stdtypes章节。
Python里面的最重要的内置类型有 numerics, sequences, mappings, classes, instances and exceptions。翻译成普通话就是数字,序列,映射,类,实例,异常。如果你要长期写代码,还是直接记住英文名字比较好。
Numeric Types
首先是Numeric Types,支持int, float, complex(整数,浮点数,复数)三种数据。这个很好理解了,我们从小接触数学,进行各种计算都离不开各种数学数字。
Sequence Types
接下来是Sequence Types,即序列类型,其中list, tuple, range是很常见的表示序列的类型,然后有个更常用的关于字符文本等的序列被单拿出来为str,计算机中的内部世界二进制的序列最为常见,所以序列类型还有Binary Sequence Types,其中又包括bytes, bytearray, memoryview。
序列里面还有个比较特殊的就是集合set,主要用于寻找不重复的元素和进行数学集合运算。
Iterator Types ,Generator Types
提到序列类型,就要出现迭代器Iterator和生成器Generator了,他们对于从序列中寻找某一个元素非常重要。
Mapping Types — dict
在数据结构中,映射类型是非常重要的一种。在各种编程语言里用途也非常多,这也是DE8UG个人非常喜欢的一种。Python里的映射类型就是字典dict了。在做各种开发时,这种数据结构用途非常广泛,让我们能很方便地存储有对应关系的数据并快速查找需要的元素。
Other Built-in Types
接下来就是大量的其他类型了。小到Boolean,null,大到一个class,一个module,真的可谓是处处都是对象了。看到这么多的objects没必要惊慌,根据自己的学习进度和使用需要,遇到不同的对象,仔细查看ta对应的属性和方法就好。
总结
Python中的对象大致算来就分了10几个大类,再往下具体划分就更多了。你学面向对象了吗?学会用哪几个对象了?欢迎在七夕之夜聊聊你的对象们 😁
首发于公众号「Python随身听」和同名播客。如果对您有帮助,欢迎小额赞助👍。
The text was updated successfully, but these errors were encountered: