python 入门学习 载抄

python入门

解释型语言 和编译型语言

计算机本身不能识别高级语言,当我们运行一个程序的时候,需要一个“翻译” 来把 高级语言转换成计算机能读懂的语言。 “翻译”过程分两种:

  1. 编译 编译型语言在执行程序前,首先会通过编译器执行一个编译的过程,把程序编译成机器语言。 之后,程序再次运行的时候,就不要“翻译”了,而是可以直接执行。比如C语言。 编译型语言的优点在于在运行程序的时候不用解释,可直接利用已经翻译过的文件。
  2. 解释 解释型语言就没有编译的过程,而是在程序运行的时候,通过解释器逐行解释代码,然后运行。比如python。

java等基于虚拟机的语言兴起之后,编程语言又不能单纯的在划分为编译型语言或解释型语言。 java是首先通过编译器将代码编译成字节码文件,然后在JVM执行java字节码,将其解释成机器语言。 所以我们说java是一种半编译半解释的语言。

C#,在第一次执行的时候,将代码编译成IL中间码文件,然后由JIT编译器编译成本地的机器码执行。 相当于编译了两次。

关于python,看下面详解。


第一个python程序

首先我们打开python 交互式解释器, 执行如下命令:

1 # python3
2 Python 3.5.1+ (default, Mar 30 2016, 22:46:26)
3 [GCC 5.3.1 20160330] on linux
4 Type "help", "copyright", "credits" or "license" for more information.
5 >>> print("Hello World")
6 Hello World

然后我们 写一个最简单的python程序。 新建 first.py文件,文件内容如下:

1 print("First Hello World!")

新建 second.py

import first
print("Second Hello World!")

然后我们喜欢执行第二个文件:

python second.py

输出:

First Hello World!
Second Hello World!

python程序的执行过程

这个时候我们会发现生成了一个 pycache 目录; 目录下 有文件first.cpython-35.pyc。 如果python版本是2.x 则会在当前目录直接生成first.pyc。 我们说python是解释型语言 ,那这个pyc是什么文件呢? 按照一般的理解来说,pyc 中的c 应该是compile的意思, 既然是这样,那么python代码是如何被转换成一系列的机器指令呢?现在我们就好好深究一下这里的因果关系。 其实本质上python和java、C#是一样的,三者的 程序执行原理都可以用两个词概括——虚拟机、字节码。 在python中有一个非常核心的东西——interpreter,当我们在命令行敲入python,当我们在shell中敲入命令python的时候, 目的就是为了激活这个解释器; 当我们执行 python second.py的时候,python解释器立即被激活,然后执行python程序。在pyhton的解释器还要完成一个非常重要的工作——编译.py文件。

python解释器在执行程序的时候,首先就是对文件中的python源代码进行编译,生成一个python的字节码(byte code),然后 将字节码交给python虚拟机,虚拟机则按照顺序一条一条的执行字节码,直到程序执行完。 上面在执行python second.py时,我们发现只有second.py文件生成了pyc文件,原因我们不知道,但是我们可以猜测python在执行的时候,只对需要编译的文件进行编译。那什么是需要编译的文件呢? 比如说,first.py文件不只被 second.py调用, 还被其他的py文件调用,这个时候,如果把 first.py 进行编译,那下次就直接调用编译后的pyc文件,这样就加快了执行速度。

那么有人就要问了,如果我修改了first.py文件,下次调用first.pyc的时候不就不是最新的代码了吗,对于这个我们并不需要担心。pyc文件中包含自身创建的时间,在python程序执行的时候,首先会尝试加载pyc文件,在加载的过程中,python会比对py文件和 pyc文件的时间,如果pyc文件时间早于py文件时间,就会重新编译py文件,生成新的pyc文件, 否则就会直接调用py从文件。


python整体架构

了解了python程序的执行过程,那么也应该了解python的整体架构是什么。 python的整体架构可以分为三个主要的部分。

  • 左边的部分 python提供的大量模块、库 和用户自定义的模块。
  • 中间的部分 python的核心——解释器,也可以叫虚拟机,这里的箭头方向是python运行过程中数据流的方向, Scanner对应词法分析,用来将文件或命令输入的每一行代码切分为一个个的token; Parser对应语法分析,在Scanner的分析结果上进行语法分析,建立抽象语法树(AST); Compiler 则根据建立的AST 生成指令集合——字节码; Code Evaluator 执行字节码文件,所以又被称为虚拟机。
  • 右边的部分 对象/类型、内存分配 和解释器之间的箭头表示两者之间的“使用”关系; 运行时状态与解释器之间的箭头表示“修改”关系。python在执行的过程中会不断的修改当前解释器的所处的状态,在不同的状态之间切换。

python程序文件头部的 #!

#!/usr/bin/env python
print("Hello World!")

Shebang 是一个由井号和叹号构成的字符串行(#!), 其出现在文本文件的第一行的前两个字符. 在文件中存在Shebang的情况下, 类Unix操作系统的程序载入器会分析Shebang后的内容, 将这些内容作为解释器指令, 并调用该指令, 并将载有Shebang的文件路径作为该解释器的参数。#!先用于帮助内核找到Python解释器, 但是在导入模块时, 将会被忽略. 因此只有被直接执行的文件中才有必要加入#!.


文件编码

什么是文件编码 (了解的可忽略)

我们在显示器看见的文字图片等信息在电脑上存储的时候并不是我们看到的样子。如果你拆开硬盘,把里面的盘片拿出来用显微镜来看就会看到上面有很多凹凸的地方。和我们平时见到的光盘类似。凹凸的位置分别表示0和1。这是因为在电脑中电信号只有两种状态,有电和没电。在存储数据的时候,如果我们要保存一个字母“A”,那么就可以用一定长度的0和1来表示。比如说用“01000001”来表示A。有了这样的对应关系,我们就可以保存我们平时见到的一些字符了。 于是就是有ASCII(美国(国家)信息交换标准(代)码),使用7个或8个二进制位进行编码的方案,最多可以给256个字符。使用了ASCII码,不同的计算机之间就可以实现数据的标准化。 但是ASCII使用的时候有一些限制。他最多之可以表示256个字符。如果有其他的字符就无能为力了。ASCII只能表示26个基本的拉丁字母、阿拉伯数字和英式标点。因此也只能用于显示现代美国英语。 后来计算机世界开始有了其他语言,ASCII码已经无法满足需求。后来不同语言的人各自为自己定制了一套属于自己的编码,同时与ASCII保持兼容。这些编码统称MBCS,到了这里大家都开始好似用双字节。(中国的叫GB*,比如GBK). 在后来有人开始觉得,这么多编码,有些编码之间还不兼容,太让人头大了,于是有这么一群人就坐在一起想出了一个办法:所有的语言都使用同一种编码,这种编码就是Unicode。 Unicode使用最少2个字节(1个字节=1BYTE=8bit=一个长度为8的二进制数) 来表示字母和符号等,有时候是4个字节。这样就解决了上面遇到的问题。 Unicode又叫万国码,是业界的一种标准。但是有人又觉得如果我要表示一个ASCII里的字符,使用unicode来表示不是太浪费空间了吗,于是就有人想出了另外一种解决方案——UTF-8。 UTF-8是对Unicode编码的压缩和优化,最大的特点是它采用了变长的编码方式,他不再是最少使用2个字节,而是将所有的字符进行分类。ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…

  • 不同编码之间的关系

python2中文件的默认编码为ASCII,在文件中含有中文的时候就会报错,这时,我们需要是设置一下文件的默认编码,如下:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-  # 指定python文件编码方式 

在python3中,文件的默认编码为UTF-8,已经不存在这个问题。



python 入门学习 载抄

时间: 2024-08-02 20:50:36

python 入门学习 载抄的相关文章

Python入门学习:1.变量和简单的数据类型

python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用 ??变量,顾名思义是一个可变的量,每个变量都存储一个值--与变量关联的信息. 1message = "hello world!"2# message 是一个变量3print(message) ??在python中使用变量时,需要遵循一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或者下划线打头,但不能以数

python入门学习:7.函数

python入门学习:7.函数 关键点:函数 7.1 定义函数7.2 传递实参7.3 返回值7.4 传递列表7.5 传递任意数量的实参7.6 将函数存储在模块中 7.1 定义函数 ??使用关键字def告诉python要定义一个函数,紧接着跟着函数名,冒号.后面的缩进构成函数体.例如: 1def func_name():2    函数体34def greet_user():5    """显示简单问候语"""6    print("hel

python入门学习:8.类

python入门学习:8.类 关键点:类 8.1 创建和使用类8.2 使用类和实例8.3 继承8.4 导入类 8.1 创建和使用类 ??面向对象编程是最有效的软件编写方法之一.在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象.根据类来创建对象被称为实例化,这让你能够使用类.8.1.1 创建dog类??下面创建一个dog类: 1calss Dog(): 2 3    def __init__(self,name,age): 4        self.name = n

Python入门学习指南--内附学习框架

Python入门学习指南 最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的同平台: 78486745 ,欢迎大家加入共同交流学习. 对于初学者,入门至关重要,这关系到初学者是从入门到精通还是从入门到放弃.以下是结合Python的学习经验,整理出的一条学习路径,主要有四个阶段 NO.1 新手入门阶段,学习基础知识 总体来讲,找一本靠谱的书,由浅入深,边看边练. 网上的学习教程有很多,多到不知道如何选择.所有教程在基础知识介绍方面都差不多,区别在于讲的是否足够细(例如运

Python入门学习:一步步教你怎么用Python写贪吃蛇游戏

前几天,有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),再合适不过了. 这里通过一个Python入门学习的例子跟大家详细讲解一下! 先通过下面这个效果图来感受下吧! 1 环境 操作系统:Windows Python版本:3.7.3 2 需求分析 我们先来回顾下贪吃蛇中的游戏元素及游戏规则. 首先呢,需要有贪吃蛇.有食物:需要能控制贪吃蛇来上下移动获取食物:贪吃蛇在吃取食物后,自身长度增加,同时食物消

Python入门学习 DAY 01 计算机基础

Python入门 DAY 01 作为一名刚刚学习python的小白,我首先去学习的并不是python语言的基础知识,而是先对计算机的基础进行了一个初步的了解,以下内容便是在学习python之前我去学习到的大致内容. 1.什么是编程语言    语言是一个事物与另外一个事物沟通的介质    编程语言是程序员与计算机沟通的介质    2.什么是编程    编程就是程序按照某种编程语言的语法规范将自己想要让计算机做的事情表达出来    表达的结果就是程序,程序就是一系列的文件    3.为什么要编程  

python入门学习课程推荐

最近在学习自动化,学习过程中,越来越发现coding能力的重要性,不会coding,基本不能开展自动化测试(自动化工具只是辅助). 故:痛定思痛,先花2个星期将python基础知识学习后,再进入自动化的学习. 现推荐几个学习python基础知识的途径: 1.<笨办法学python>(第三版),从头到尾一个字一个字的照着程序敲: 2.慕课网<python入门>课程: 3.网易云课堂<疯狂的python>公开课. 4.<廖雪峰Python3>pdf文件. 这也是

python入门学习

最近闲来无事,搞搞py交易吧! 作为一个快速崛起的语言,python编程确实是好用的不得了,当然这不是说他就可以代替其他语言,这是目前所有语言都不可能做到的: python有他的优点: 简单,简洁,易懂,入门快: 学过python的应该都有体会,python比其他很多语言都要轻便的多,易于编写: 比如python的hello world: #!/usr/bin/python print('hello world') 就这一句就ok了: 简单的了解下python,下面我们来了解下python2和3

[原创]Python入门学习之数据结构

Preamble: 在未学习python之前,使用c/c++已有5年之久.虽对python刚学习,但也领略到了python的强大之处,开拓了自己的视野和思维. 一 变量 python中的变量与c/c++中的变量不同.在c/c++中,变量的本质就是内存的地址,但在python中,当我们定义一个变量并赋值时,如下: a='ABC' python的解释器干了两件事情:(1)在内存中创建一个‘ABC’的字符串:(2)在内存中再创建一个名为a的变量,并把它指向‘ABC’.也就是说,对于python占用的内