zoukankan      html  css  js  c++  java
  • python解释器相关

    1 语言相关

    1.1 解释型和编译型语言的区别

    • 解释型语言:Python JavaScript PHP Shell MATLAB等
    • 编译型语言:C、C++、Goloang、Pascal(Delphi)、汇编等
    1.1.1 解释型语言通用解释

    通常不用对源代码进行编译,通过解释器一边执行一边转换,需要哪些源代码就转换哪些源代码,不生成可执行程序

    这种编程语言称为解释型语言,使用的转换工具称为解释器

    但是个解释型语言太过于以来解释器环境,而解释器本身就是一个虚拟环境,没运行代码前就申请内存、开辟空间启动解释器,这样其实过于消耗内存影响效率。

    • 特点:写代码的效率高,立竿见影看效果,调bug比较轻松,跨平台性好,但是执行效率不行
    1.1.2 编译型语言通用解释

    编译型语言写完后需要进行打包和编译,这会导致编写代码的过程见效慢,但是打包之后就省事了,以后都可以直接使用,也就是说编译后的使用方法非常方便,不像解释型语言,虽然写代码见效快,但是执行起来慢。

    编译语言要求必须提前将所有的源代码一次性转换为二进制指令,生成一个可执行程序,比如像C这样的编程语言就是编译型语言,它所使用的工具称为编译器,也就是经常在linux下安装程序时需要的GCC或者G++

    • 特点:执行效率高,但是调bug真的很麻烦
    1.1.3 二进制指令

    二进制指令也就是机器码,是CPU能够识别的硬件层面的代码,简陋的硬件(古老的单机片)只能使用几十个指令,强大的硬件(PC、智能手机)能使用成百上千个指令

    1.2 p2 和 p3 的区别

    • p2:print为语句,p3:print为方法
    • p2:默认为Ascii编码,P3:默认为Unicode(utf-8)
    • p2:除法结果为整数,p3:除法结果为浮点数
    • p2:默认四个字节表示一个字符,p3:默认二个字节表示一个字符
    • p2:map方法返回list,p3:map方法返回iteration

    1.3 解释器的种类及特点

    • CPython:C语言开发的,是使用最广的解释器,具有GIL全局解释器锁
    • IPython:基于CPython的交互式解释器,功能与CPython无异
    • Jython:试运行在Java平台上的Python解释器,可以直接把Python的代码编译成Java字节执行,但CPython没有Jython的垃圾回收机制
    • IronPython:IronPython和Jython类似,只不过IronPython是运行在微软.NET平台上的Python解释器,可以直接把Python代码编译成.Net字节码
    • PyPy:另一个Python解释器,目标是执行效率采用JIT技术,对Python代码进行动态编译,提高执行效率

    1.4 列举几个PEP8规范

    1.4.1 RFC
    • 专门用来定义网路请求的标准文档,是一系列以编号排定的文件,文件收集了有关互联网相关信息
    1.4.2 PEP8
    • 每一级缩进使用4个空格,每行最大字符限制为79个,除了长导包语句,和url地址
    • 导入通常在分开的行,不推荐同行导入多个模块
    • 不能使用单字符(1 I O)作为变量名
    • 类的首字母大写,函数的首字母小写

    2 代码验证

    2.1 切换盘符----命令行

    C:>F:
    

    2.2 不同解释器验证高并发

    • 使用全局解释器GIL的原因:高并发情况下,逻辑是没问题的,但是编辑器存在问题
    num = 0
    
    def change_it(n):
        global num
        for i in range(1000000):		# 人为构造高并发
            num -= n
            num += n
        print(num)
    
    threads = [
        threading.Thread(target=change_it, args=(8,)),
        # 加()是调用,声明变量是不需要的,args里面是元祖类型,不写就是默认整形
        threading.Thread(target=change_it, args=(10,))
    ]
    
    [t.start() for t in threads]
    # 列推性能是普通for循环的7倍左右,因为在底层中,是不需要引用计数的
    [t.join() for t in threads]
    # 阻塞,所有线程结束,子线程才会结束
    print(num)
    # 对于pypy来说,可以解决高并发问题,性能远超于Cpython
    # 高并发情况下,逻辑是没问题的,但是编辑器存在问题,要加GIL锁
    

    2.3 不同解释器效果

    2.3.1 Cpython 效果
    f:monthForthDjangosNewdjango19django19>python test.py
    2
    -6
    -6
    
    f:monthForthDjangosNewdjango19django19>python test.py
    0
    0
    0
    
    f:monthForthDjangosNewdjango19django19>python test.py
    -30
    -30
    -30
    
    2.3.2 pypy3 效果
    f:monthForthDjangosNewdjango19django19>python test.py
    0
    0
    0
    
    f:monthForthDjangosNewdjango19django19>python test.py
    -30
    -30
    -30
    
    f:monthForthDjangosNewdjango19django19>pypy3 test.py
    10
    10
    10
    
    f:monthForthDjangosNewdjango19django19>pypy3 test.py
    0
    0
    0
    
  • 相关阅读:
    java多线程小节, 总结的不错
    奇瑞风云, 你还在路上么
    android NDK 环境建立
    外企下岗白领正成为“新4050”
    搭积木
    祝MORIENTES在LIVERPOOL有所成就
    简单生活
    为什么要更新
    归去来
    随记一笔
  • 原文地址:https://www.cnblogs.com/mapel1594184/p/14169397.html
Copyright © 2011-2022 走看看