zoukankan      html  css  js  c++  java
  • python语言简介、解释器、字符编码介绍

    一、为什么要选择python作为学习语言:

    各个语言的对比:

    C和python、java、C#等

    C语言:代码编译得到机器码,机器码在处理器上直接执行,每一条指令控制cpu工作

    其他语言:代码编译得到字节码,虚拟机执行字节码并转换成机器码后再在处理器上执行。

    其他语言比c语言在执行过程中多一步“编译成字节码”,所以c语言快。

    既然c那么牛,为什么要学其他语言。因为如果用c实现一个简单功能,需要上百行代码,而高级语言只需要10行代码。

    如果功能要求非常非常关心性能,就需要用c写了。

    其他语言进行对比:

    python、java、php、c#

    没有太多底层的比较。

    1.它们各自有擅长领域,2.先入为主的概念。

    java用于企业级应用。相对于其他语言还是快些。

    php 管理系统

    python跟其他语言比还是慢一些,有的时候慢、有的时候不慢,GIL,python全局解释器锁(GLOBAL INTERPRETER LOCK)。

    python目前Linux自带,所以运维学的多。

    python的种类:

    cpython  c语言

    jpython  java语言

    ironpython  c#语言

    对于上面多种python,程序猿在写代码的时候没有任何不同。只有在执行代码的时候有区别。

    举例:

    cpython 在执行时,生成.pyc的机器码。然后再把.pyc编译成机器码执行。

    jpython在执行时,把你的写的python语言,用java的解释器去解释,解释成java认识的字节码,然后在转成机器码最后被cpu调用。

    ironpython  用c#解释器

    cpython比其他种类的快。

    但是实际用的时候,根据情况而采用不同版本的,比如写java程序的接口,java认识的字节码就更快。

    还有一个比较特殊的pypy,早晚会火,为什么?因为它快。

    p y p y快跟机器码有关,它有自己的解释器。

    解释python语言时,解释成py认识的字节码紧接着转换成机器码,也就说c语言生成的.pyc为字节码文件。而p ypy在编译的时候,存的文件就直接就是机器码。

    二、执行python程序的内部过程

    内部使用open(),read()方法打开文件读入内存。

    语法分析

    词法分析

    语法、词法分析没有问题在读入内存。

    然后内部用if语句进行判断,如果是函数怎么编译成字节码,如果是类怎么编译成字节码...

    执行时,再调用python解释器将字节码转成机器码。

    三、python解释器

    在程序文件开头第一行

    #!/usr/bin/env python 

    这句话的意思是在你执行这个程序文件时,调用/usr/bin/env python 程序去执行。这个程序,就称为解释器。

    四、内部编码

    python解释器在加载.py文件中的代码时,会对内容进行编码(默认ascill)

    ASCII(American Standard Code for Information Interchage,美国标准信息交换码)是基于拉丁字幕的一套电脑编码系统,主要用于显示现代应用和其他西欧语言,最多只能用8位来表示(一个字节),即:2**8 = 258 ,所以,ASCII码最多只能表示256个符号。

    python3.x中默认使用utf-8码。(支持中文,是unicode的扩展)

    unicode:用至少16位来表示.python2.7解释器在加载.py文件默认是按照unicode编码格式加载的。unicode 已经涵盖了所有字符,但是当你表示一个数字或者字符时,也要用16位表示,那么加载文件时是很浪费内存空间的。如何解决呢,理想情况下,当遇到数字、字符、字母时用ASCII编码格式加载,而中文字符用24位来表示,

    utf-8 是对unicode的压缩、精简优化。

    utf-8 内部规定,如果是字母、数字和字符用8位存,如果遇到欧洲的字符一般用两个字节来存,汉子这种用3个字节来存。utf-8减少了内存的占用。

    python2.7中,默认用unicode,那么想用utf-8就的加上

    #!/usr/bin/env python 

    #-*-coding:utf-8-*-

    内部编码之间的转换。

    unicode 转成gbk、utf-8这叫编码  encoding

    gbk转成unicode叫做解码 uncoding

    gbk想转成utf-8就需要先解码成unicode,在编码成utf-8

    五、接收执行参数

    当我们创建一个python代码文件x.py时,在执行./x.py时后面加入参数,可以使用sys模块下的argv方法。

    #!/usr/bin/env python
    #-*-conding:utf-8-*-

    import sys
    print(sys.argv)

    $ python /Users/tedzhou/scripts/argvtest.py ssss
    ['/Users/tedzhou/scripts/argvtest.py', 'ssss']

    六、python内部的缓冲机制

    1.提高执行效率2.减少内存压力。

    python对于数字有个小数字池:-5~257(作用:如果没有这个池,10个地方用到5这个小数,那么就会在内存中创建10个存储5的内存空间,而有这个池,python解释器内部就会共享这个5,不去开内存空间。从而减少内存的使用率,降低浪费。)

    字符串也有内存池,给了2k空间,python内部有算法,按照内部权重排列,如果级别高了就把你放入内存。列表、字典都有。

    对于python一切书屋都是对象,对象基于类创建的:

    1.一切事物都是对象,对象是由类创建的

    类创建对象:创建了对象和给对象一个指引到类的指引标志。告诉类,如果用类的某些功能,通过这个指引标记找到类,类来执行。

    2.type查看对象的类型
    3、dir(类型名) 查看类中提供的所有功能
    4、help(类型名) 查看类中所有详细的功能
    5、help(类型名.功能) 查看类中某功能的详细内容
  • 相关阅读:
    无标题
    UVA 11987 并查集删点
    屯题 (bestcoder #62~#75)
    codeforces 293E Close Vertices 点分治+滑窗+treap
    hdu4670 Cube number on a tree 点分治
    hdu4812 D Tree 点分治
    poj2112 Boatherds 点分治
    HDU 4866 Shooting 二分+主席树
    poj1741 Tree 点分治
    关于点分治。。。
  • 原文地址:https://www.cnblogs.com/zhming26/p/5332604.html
Copyright © 2011-2022 走看看