1-6python预备知识-python的解释器和内置类型内置函数内置模块,python一切皆对象

# 我觉得要学习还是要看源码,
# 死记硬背是没有意义的,

# 什么情况下会出现跳转到python_stubs?
# 当我们调用的函数是内置函数或仅二进制存在的函数(没有py文件,只有pyc等)时,pycharm会对某个版本进行硬编码而生成的伪函数(实际不是调用的这个,只是方便我们做开发)。
# 想一想pycharm为了方便我们,真是煞费苦心
# 今天在敲代码的时候好奇强大的list是怎么定义的,其中的函数是如何优化的,想着学习一下,于是点进了它的源代码,
# 没想到源代码中只有函数功能的描述,函数体无一例外全是pass
# 于是我去百度了一下,哦,这是Pycharm在糊弄老子呢
# python是C语言实现的,尽管有很多标准库是由python代码实现,但是涉及到底层支撑架构的功能还是C代码。
# 一些IDE为了对这些进行友好代码提示,会弄和底层一样的访问接口,而其实现直接写 pass 略过。
# 如何查看源代码?答:到github上查看Cpython项目,


# python解释器是什么?
# python 解释器是一种计算机程序,可将每个高级程序语句转换为机器代码。
# Jython,可以将Python代码转化为Java字节码,在Java虚拟机中执行;IronPython可以在.NET平台上运行Python代码,而PyPy则是一个Python实现,具有很高的性能。
# Python是一门”解释型语言“,python解释器常用的有三种,分别是C语言实现的CPython(官方版本),Java语言实现的Jython,Python语言自己实现的解释器。
# 我们只关注官方版本:用C语言实现的解释器。# CPython是最常用的一个,也是官方默认的解释器。CPython是使用最广的Python解释器。
# python是C语言编写的,它有很多包也是用C语言写的。Python有很多标准库和第三方库,都是基于C语言撰写的,
# python字典源码(https://github.com/python/cpython/blob/master/Objects/dictobject.c,
# https://github.com/python/cpython/blob/master/Include/dictobject.h)
# 内置函数的源码查看
# 都在安装目录下,/Library/Frameworks/Python.framework/Versions/3.9/include/python3.9,这里有一堆的.h文件


# 为什么内置函数可以直接使用?
# 为啥我们没有导入任何模块就能使用len(),str(),print()...等这么多的函数?
# 其实在我们运行python解释器的时候,他会自动导入一些模块,这些函数就是从这些地方来的,这些函数被称为内建函数
# Python有着丰富的内置函数,这些内置函数可以在程序中直接使用,因为在python解释器启动后会自动加载这些函数
# print(globals())   <module 'builtins' (built-in)>
# print(dir(__builtins__))
# 内置模块(builtins),一般是用C语言来写的,在解析器的内部可以直接使用。模块说明中有builtins关键字


# 使用C语言实现的Python解释器,解释器分为两部分,编译器和虚拟机,interpreter(就是解释器的意思)
# 只是Python将其归结到一条指令下,
# 当你在命令行敲下Python xxx.py 的时候,执行 python XX.py 后,将会启动 Python 的解释器
# CPython解释器会执行两个步骤,
# 先把xxx.py编译成字节码,byte code(字节码),也就是通常我们看到的.pyc或者.pyd文件,
# 然后虚拟机在逐条执行字节码。 再有虚拟机把字节码转换成机器语言,最后才能在硬件上运行。
# 与编译性语言相比,每次多出了编译和链接的过程,性能肯定会受到影响。C或C++之类就是编译性语言
# 编写的Python代码必须在解释器中运行。
# CPython解释器完全用C语言实现的,大部分都是用的C语言的基础语法。
# 用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。


# builtins内置模块
# builtins是Python中的一个模块。该模块提供对Python的所有“内置”标识符的直接访问
# Python 标准库 -内置函数,https://docs.python.org/zh-cn/3.11/library/functions.html,需要分类,
# Python 标准库 -内置类型,https://docs.python.org/zh-cn/3.11/library/stdtypes.html,需要分类
# https://docs.python.org/zh-cn/3.11/reference/datamodel.html#the-standard-type-hierarchy
# Python 标准库 -内置模块,https://docs.python.org/zh-cn/3.11/library/index.html,需要分类,
# Python 标准库 -还有内置常量,内置异常,


# python一切皆对象
# 在python中一切皆对象,这意味着str,int,float,list,dict,函数甚至连类都是可以是一个对象。
# 我们可以发现所有的基础数据类型都是type类型的,那根据面向对象的思想来说,int、str、list都是type类的实例。
# 但同时int、str、list又能作为数据类实例化变量。
# 因此我们可以猜想下string,int,float,list,dict,function皆是type的一个实例对象.结果也确实如此。那type类不应该也是一个类的对象吗?
# 没错type类也是type类的一个对象!!!
# 关于继承
# 解决了这个问题后,还存在一个问题。那就是继承的问题。
# 我们都知道类有继承的特性,在python中查看基类(父类)是调__bases__属性
# 我们都知道在python3. 类会默认继承Object类,即使你不写也会自动继承这个类,包括string,int,list,dict以及自定义类都会继承Object类。
# 有趣的东西来了,那type类呢?没错,type类也会继承Object类。我们会发现所有的类包括type最终都是要继承object类
# 并且object类也是type类的实例对象,就连type自己也是自己的对象。
# 总结下来:
# python中一切皆为对象,是因为一切类型都是type这个类的实例,type() 函数能返回一个对象的类型 (类型本身也是对象)。
# python中所有的类都继承object这个基类,它们既是对象,也能实例化对象
# type是类也是对象,底层是通过指针的方式实现自己实例化自己的
# Python 中的一切都可以赋值给变量或者作为参数传递给函数。

# python中的对象
# https://docs.python.org/zh-cn/3.11/reference/datamodel.html#objects-values-and-types
# 对象 是 Python 中对数据的抽象。 Python 程序中的所有数据都是由对象或对象间关系来表示的。代码本身也是由对象来表示的。
# 1,标识号,或者叫做编号,或者叫做身份号,
# 一个对象被创建后,它的 标识号 就绝不会改变;你可以将其理解为该对象在内存中的地址。
# 'is' 运算符可以比较两个对象的标识号是否相同;id() 函数能返回一个代表其标识号的整数。
# 2,类型
# 对象的类型决定该对象所支持的操作,与编号一样,一个对象的 类型 也是不可改变的。
# 3,值
# 有些对象的 值 可以改变。值可以改变的对象被称为 可变对象;值不可以改变的对象就被称为 不可变对象。
# 一个不可变容器对象如果包含对可变对象的引用,当后者的值改变时,前者的值也会改变;
#  一个对象的可变性是由其类型决定的;例如,数字、字符串和元组是不可变的,而字典和列表是可变的。
# a=b=1,a和b的指向id是相同的,

# 语句
# 简单语句,pass,break,continue,return,
# yield,global,del,import,
# 复杂语句,if else,for,while,with,try,
# 异常的写法,


# 整个的学习过程都是围绕对象学习的
# 数字类型,序列(不可变:字符串,元组,字节,可变:列表,),集合,映射,
# 可调用类型:函数,类,
# 模块:网络编程,并发编程,都是模块提供的功能,


# 函数
# 就出现了,函数的定义,函数的参数,函数的调用,函数的装饰器,
# 装饰器的官方定义
# 装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
# 装饰器用于有以下场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。
# 所以装饰器还是挺有用的,就是因为你可能需要再函数的前后加入代码,


# 类
# 就出现了,类的定义,类的参数,类的属性,类的方法,静态方法,类方法,
# 类的实例化,类的方法的调用,
# 类的封装,继承,多态,
# 继承就涉及到方法的重写,
# 单例模式,这样的东西,
# 还有反射,四个方法,

# 模块
# 有很多的内置模块需要学习
# 比如网络编程,并发编程,等,

posted @ 2021-10-06 13:23  技术改变命运Andy  阅读(296)  评论(0编辑  收藏  举报