zoukankan      html  css  js  c++  java
  • 环境小硕转行之路-1-python的一些基本概念


    为什么学python

    python是世界程序语言排名上升速度最快的语言之一。
    Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。


    编译型语言和解释型语言(假设机器码是外文,程序语言是中文)

    编译型语言:一次翻译一本书,必须针对不同系统进行编译

    解释型语言:在程序运行的时候的时候将代码逐行进行解释,然后直接运行。
    平台兼容性:解释型>编译型
    程序执行速度:编译型>解释型

    • python属于一种解释型语言,在写完程序源码之后会进行预编译它会把源码转化成介于机械码和程序语言之间的中介码

    当我们在Dos命令行中输入python hello.py时,其实是激活了Python的"解释器",但是在对机器解释之前,要进行预编译

    PyCodeObjec就是python编译器编译的结果。当python运行时编译的结果会保存在内存中的PyCodeObject中,当python程序运行结束后,python解释器将PyCodeObject写回到pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。pyc文件本质上就是预编译之后的字节码文件。

    当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,直接载入,否则重复上述的过程。

    上述过程能让程序二次运行的时候跳过预编译这个阶段

    python防止源代码改变而.pyc文件不变的方法:检测.pyc和源码的修改时间


    动态类型语言与静态类型语言

    动态类型语言:在程序运行期间才去做数据检查的语言,在用动态类型语言编程时,永远也不用给任何变量指定数据类型。(python

    静态类型语言:数据类型是在编译期间检查的,在写程序时要声明所有变量的数据类型。(c++、java


    强类型定义语言与弱类型定义语言

    强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

    弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

    强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
    例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。

    通过上面这些介绍,我们可以得出,python是一门动态解释性的强类型定义语言。


    python的优缺点

    六大优点

    1. 优雅、明确、简单
    2. 开发效率高:python官方库有相应的库和模块
    3. 可移植性强:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
    4. 扩展性强:如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
    5. 高级语言
    6. 可嵌入性:把python嵌入c/c++程序,从而向程序用户提供脚本功能

    缺点

    1. 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
    2. 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
    3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。

    python解释器

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

    由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

    CPython

    当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

    CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

    IPython

    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

    CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

    PyPy

    PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

    绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

    Jython

    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

    IronPython

    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。


    从ASCII码到Unicode

    古代点狼烟:1-100个敌人->1根狼烟,100-999->2根狼烟

    	4个敌人:64 32 16 8 4 2 1
                           1 0 0
    
    	8个敌人:64 32 16 8 4 2 1
    					 1 0 0 0 
    

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

    西方人二十六个字母+特殊字符占了127个坑。剩下的预留给其它国家。ASCII码中的127-150多被汉字占坑(区域索引码),另有其它区域存折所有汉字。最新的GB18030收录了27484个汉字以及满文、藏文.
    UNICODE(统一码、万国码),英文、汉文占2byte。造成歪果仁硬盘爆炸。歪果人又搞了一套utf-8,英文用ASCII码,其它文字用Unicode(3byte)。

  • 相关阅读:
    Oracle DBMS_PROFILER 的使用方式 (转)
    2010-09-01 22:29 oracle建表、建主键、外键基本语法
    Oracle11g对AWR的扩展
    Oracle中各个命中率的总结及调优笔记整理
    如何用 SQL Tuning Advisor (STA) 优化SQL语句
    aix分配硬盘
    AIX tar命令
    linux gzip命令参数及用法详解--linux压缩gzip文件命令
    AIX6.1下配置Nmon性能工具
    qqq
  • 原文地址:https://www.cnblogs.com/negu/p/11217982.html
Copyright © 2011-2022 走看看