首页

文章

python定义模型

发布网友 发布时间:2022-03-03 20:27

我来回答

2个回答

懂视网 时间:2022-03-04 00:48

Python是一种跨平台的计算机程序设计语言,是ABC语言的替代品,属于面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

python前景比较好,python是人工智能首选的编程语言,人工智能目前处于一个高速发展的阶段,市场需求亮逐渐增大,而这方面的人才比较少,人才缺口大,同时python职位薪酬也是比较可观的。

学python语言可以选择的岗位很多,python开发工程师、人工智能工程师、大数据分析工程师、爬虫开发工程师、搜索引擎工程师、游戏开发工程师、系统运维工程师、全栈工程师等都能做。

总结:

Python是一种跨平台的计算机程序设计语言,是ABC语言的替代品,属于面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

热心网友 时间:2022-03-03 21:56

学python的人都知道,python中一切皆是对象,如class生成的对象是对象,class本身也是对象,int是对象,str是对象,dict是对象...。所以,我很好奇,python是怎样实现这些对象的?带着这份好奇,我决定去看看python的源码,毕竟源码才是满足自己好奇心最直接的方法。

在object.h文件中,定义了两种数据结构PyObject和PyVarObject,代码如下:

1 #define PyObject_HEAD                \ 2     Py_ssize_t ob_refcnt;               \ 3     struct _typeobject *ob_type; 4  5 #define PyObject_VAR_HEAD       \ 6     PyObject_HEAD                       \ 7     Py_ssize_t ob_size; 8  9 typedef struct _object {10     PyObject_HEAD11 } PyObject;12 13 typedef struct {14     PyObject_VAR_HEAD15 } PyVarObject;

这两种数据结构分别对应python的两种对象:固定长度对象和可变长度对象。python中的所有对象都属于这两种对象中的一种,如int,float是固定长度对象,list,str,dict是可变长度对象。从上面两种对象数据结构定义来看,可变长度对象和固定长度对象的头都是PyObject结构体,也就是说python中所有对象的开头都包含这个结构体,并且可以用PyObject *指针来访问任何对象,这种访问对象的方法在python的源码中随处可见。PyObject结构体包含两个成员,ob_refcnt和ob_type指针。ob_refcnt用来表示对象被引用的次数,当ob_refcnt == 0时,这个对象会被立即销毁;ob_type指针指向了一个_typeobject类型的结构体,表示对象所属的类型,也就是生成该对象的类型,这其实很类似于面向对象中类与实例的关系,PyObject是某个类的实例,ob_type表示这个类。但与面向对象不同的是,ob_type本身也是个对象,我们来看下_typeobject的定义:

1 typedef struct _typeobject { 2     PyObject_VAR_HEAD 3     const char *tp_name; /*类型名 */ 4     Py_ssize_t tp_basicsize, tp_itemsize; /* 实例化对象的大小 */ 5  6     /* 标准方法 */ 7  8     destructor tp_dealloc; 9     printfunc tp_print;10     getattrfunc tp_getattr;11     setattrfunc tp_setattr;12     cmpfunc tp_compare;13     reprfunc tp_repr;14 15     /* 标准类(数值类,列表类,dict类)方法*/16 17     PyNumberMethods *tp_as_number;18     PySequenceMethods *tp_as_sequence;19     PyMappingMethods *tp_as_mapping;20 21     /* 其它标准方法*/22 23     hashfunc tp_hash;24     ternaryfunc tp_call;25     reprfunc tp_str;26     getattrofunc tp_getattro;27     setattrofunc tp_setattro;28     ...  
29 } PyTypeObject;

从上面定义来看,_typeobject的开头也包含了PyObject结构体,所以它也是一个对象,既然它也是一个对象,那么按照面向对象的理解,它又是谁来生成的呢?答案是所有PyTypeObject对象都是通过PyType_Type来生成的,包括PyType_Type本身,因为PyType_Type也是PyTypeObject对象,有点绕。PyType_Type的定义是通过将PyType_Type声明为全局静态变量实现的,具体如下:

1 PyTypeObject PyType_Type = { 2     PyVarObject_HEAD_INIT(&PyType_Type, 0) 3     "type",                                     /* tp_name */ 4     sizeof(PyHeapTypeObject),                   /* tp_basicsize */ 5     sizeof(PyMemberDef),                        /* tp_itemsize */ 6     (destructor)type_dealloc,                   /* tp_dealloc */ 7     0,                                          /* tp_print */ 8     0,                                          /* tp_getattr */ 9     0,                                          /* tp_setattr */10     0,                                  /* tp_compare */11     (reprfunc)type_repr,                        /* tp_repr */12     0,                                          /* tp_as_number */13     0,                                          /* tp_as_sequence */14     0,                                          /* tp_as_mapping */15     (hashfunc)_Py_HashPointer,                  /* tp_hash */16     (ternaryfunc)type_call,                     /* tp_call */17     0,                                          /* tp_str */18     (getattrofunc)type_getattro,                /* tp_getattro */19     (setattrofunc)type_setattro,                /* tp_setattro */20     0,                                          /* tp_as_buffer */21     ...22 }

从PyType_Type定义来看,ob_type被初始化为它自己的地址,所以PyType_Type的类型就是自己。从python源码实现来看,所有PyTypeObject的ob_type都会指向PyType_Type对象,所以PyType_Type是所有类型的类型,称之为元类。python中定义了很多内建的类型对象,如PyInt_Type (int类型),PyStr_Type (str类型),PyDict_Type(dict类型) 类型对象,下面看下PyInt_Type类型的定义:

1 PyTypeObject PyInt_Type = { 2     PyVarObject_HEAD_INIT(&PyType_Type, 0) 3     "int", 4     sizeof(PyIntObject), 5     0, 6     (destructor)int_dealloc,                    /* tp_dealloc */ 7     (printfunc)int_print,                       /* tp_print */ 8     0,                                          /* tp_getattr */ 9     0,                                          /* tp_setattr */10     (cmpfunc)int_compare,                       /* tp_compare */11     (reprfunc)int_to_decimal_string,            /* tp_repr */12     &int_as_number,                             /* tp_as_number */13     0,                                          /* tp_as_sequence */14     0,                                          /* tp_as_mapping */15     (hashfunc)int_hash,                         /* tp_hash */16     0,                                          /* tp_call */17     ...18 };

从PyInt_Type定义来看,它主要包含了int数据类型相关的方法。PyInt_Type 类型对象的初始化和PyType_Type 类型类似,PyInt_Type类型的定义也是通过全局静态变量的方式实现的,除了PyInt_Type了下,所有python内建类型都是以这种方式定义的。这些类型产生的对象都会共享这些类型对象,包括这些类型定义的方法。

在python中,怎样查看对象的类型呢?有两种方法,一种是直接type:

1 >>> x = 12 >>> type(x)3 <type 'int'>

另一种是通过对象的__class__属性:

1 >>> x = 12 >>> type(x)3 <type 'int'>4 >>> x.__class__5 <type 'int'>

现在来看看int,str,dict这些类型的类型:1 <type 'int'>2 >>> type(int)3 <type 'type'>4 >>> type(str)5 <type 'type'>6 >>> type(dict)7 <type 'type'>8 >>> type(type)9 <type 'type'>  从这个输出来看,int,str,dict这些类型的类型都是type,这也印证了前面说的,所有类型都是通过元类type生成的。

手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 软柿子的热量 孕妇可以吃软柿子吗不是西红柿 脆柿子和软柿子的区别 脆柿子好还是软柿子好 软柿子可以多吃吗 “鱼悬洁白振清风”的出处是哪里 用大自然的声音评课好吗? 妇产科博士找超声科工作容易吗 怎能把微信6.2.0版本换回6.1.2版 微信群6.2.4怎么增加人数上限 微信6.2.2如何备份手机通讯录 电脑桌面图标不能放大? 有什么好用的识图软件 识图认人哪个软件最好 手机识图软件什么软件能识别图片位置 小米手机自动锁屏时间怎么修改 小米手机屏幕锁定时间设置教程 能举起100斤算大力吗 中医美容专业是什么 中医美容证有什么用 单声道音频什么意思(开启单声道音频有什么好处) 单声道音频是什么,有什么用处? 户口还未迁移到婆家 娘家户口怎么就没了呢 我结婚没有迁户口,现在娘家也没有怎么办 没领证生的孩子一般会判给谁 没领证生的孩子会判给谁 信用卡卡种有哪些 找一首古风歌曲 男声 低配电脑装w10还是w7流畅 电脑配置低装win7还是win10好 低配电脑适合装WIN7系统还是WIN10系统? ...500s-15isk这个联想笔记本的内存条尺寸是什么型号的有没有知道的... 越快越好.怎样减肥.而且胸部不缩水 请问徐闻县海安长途汽车客运站客服是多少? 过了平台期还会瘦吗 悦耳的意思悦耳的解释 重庆师范大学应用心理学专业的权威性如何? 打印机laserjetm1136mfp怎样设置无线打印 经典电影赏析之1:《精武英雄》 爆米花用的什么玉米 糯玉米哪个好 有机糯玉米的营养价值如何? 四大直辖市换帅原因 python如何定义数组 怎么对别人屏蔽自己微博动态信息 python字符串的定义 python定义求和函数 网易微博怎么禁止别人访问,就是写的微博不想让别人看到。。。设置里面好像没有哦。。 关于电表怎么读数。。。 电能表怎么读数? 请问一下如何不让别人看见自己的微博粉丝和自己关注的人 怎样设置不让别人看自己新浪微博 电表度数怎么计算 电能表怎么读数? 微信钱包的钱怎么用 电表如何读数 家庭电表的度数怎么读的 怎样看电表度数的? 如何用手机话费给微信零钱充值 话费怎样转到微信钱包 用自己的12306账号可以帮别人买车票吗? 如何查找水费用户编号 帽子染了汗渍怎么洗? 怎样禁止他人通过昵称搜索到我的新浪微博? Python如何定义一个函数? python中如何定义变量 python 定义函数 python集合的定义方式 python怎么定义了数字 Python怎样定义变量 为什么微信绑不了手机号码? python定义一个函数 为什么我的绑定不了手机号? 微信 绑定不了手机号怎么办 微信绑不了手机号什么情况 微信绑不了手机号怎么办 滚筒洗衣机没洗完,就停止了,然后门打不开,怎么回事? 微信不绑定手机号有什么影响 兴安盟有什么特产 如何删除微信的零钱明细记录 怎么删除微信零钱明细的记录 锡盟人给兴安盟人送礼该送什么? 安康都有什么特产,可以送人当礼物
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com