Python简介¶
Python 是著名的“龟叔”Guido van Rossum在 1989 年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。
Python是一种动态类型(自动跟踪类型而不需要声明)的,强类型(只能对一个对象进行适合该对象的有效操作)语言。python中一切皆对象。
一、Python简介¶
1. Python解释器¶
在windows安装的Python软件包就是一个解释器,解释器是代码与计算机之间的软件逻辑层。当我们写了一段python程序,Python解释器会读取程序,并按照其中的命令执行。Python安装后会生成一些组件,至少包括一个解释器和一套支持库。
2. Python的主流实现¶
- CPython:标准Python,由ANSI C语言编写
- JPython:基于Java的Python
- IronPython:基于.NET的Python
- Stackless:注重并发的Python
- PyPy:注重速度的Python,CPython标准的另一个实现
3. 冻结二进制文件¶
冻结二进制文件可以将程序文件的字节码、PVM(解释器)以及任何程序所需要的Python支持文件捆绑在一起形成一个单独的可执行的二进制程序(如windows下的exe)。
- py2exe 在Windows使用
- PyInstaller 在Linux和Mac OS X使用
- py2app 在Mac OS X使用
4.python程序的执行¶
第一步:python内部会将源代码编译成字节码,这些字节码被保存__pycache__
的目录下以.pyc
结尾的文件中(需要注意的是,字节码只针对被导入的文件而生成),文件名还包含了python解释器的版本信息,比如:hello.cpython-36.pyc
。这样的处理是对启动速度(严格来说是对导入)的一种优化,如果下一次运行程序时,源文件和python解释器的版本都没有变化,python就是跳过编译这个步骤,直接加载.pyc文件。
第二步:一旦程序编译成字节码(或字节码从已经存在的.pyc文件中载入),之后的字节码发送到Python虚拟机(Python Virtual Machine)中来执行
5. Python的优缺点¶
Python优点:
- 丰富的内置库和第三方库
- 学习曲线低,容易上手
- 支持面向对象编程和函数式编程
Python的缺点:
- 代码不能加密
- 在现有的实现方式下,与C和C++这类完全编译并且较底层的语言相比,Python的执行速度还不够快。
二、 Python基础知识点¶
1. Python的编码方式¶
python3默认使用utf-8
python2默认使用ASCII,可以在首行声明编码方式
1 |
|
2. 变量¶
python变量不需要提前声明,当给一个变量赋值的时候就创建了它,可能赋的是任何类型的对象,在使用变量的值前必须对其进行赋值。
变量就是用来代指某个东西的名字。
1 |
|
在操作符两边加上空格会让代码更容易阅读
1. 变量的命名规则¶
- 变量名只能包含字母、数字和下划线,不能以数字开头
- 变量名不能包含空格
- 不要将python关键字和函数名作为变量名
- 变量名应该简短且具有描述性
- 慎用小写字母
l
和大写字母O
1 2 3 4 5 6 7 |
|
2. 引用¶
在Python中,从变量到对象的连接称作引用。
- 变量是一个系统表的入口,包含了指向对象的连接
- 对象是被分配到的一块内存,有足够的空间去表示它们所代表的值
- 引用是自动形成的从变量到对象的指针
3. 变量的命名风格¶
- 驼峰命名法: 类名、Type 变量、异常 exception 名推荐使用
- 蛇形命名法: 包名、模块名、方法名和普通变量名推荐使用
snake_case
3. 注释¶
3.1 单行注释¶
1 |
|
3.2 多行注释¶
python中没有多行注释的语法,多行注释就是在每一行前面加
#
,但是可以三引号的方式注释(这并不是真正意义上的注释,python解释器还是会读取里面的内容)。
1 2 3 4 5 6 7 |
|
4. 核心数据类型¶
对象类型 | 字面量/构造示例 |
---|---|
数字 | 123,3.14,3+4j,0b111,Decimal(),Fraction() |
字符串 | 'spam',"Bob's",b'a\x01c' |
列表 | [1,[2,3],4],list(range(10)) |
字典 | {'name':'Kobe','age':41},dict(hours=10) |
元组 | (1,'B'),tuple('span'),namedtuple |
文件 | open('file','wb') |
集合 | set('abc'),{'a', 'b', ''c'} |
其他核心类型 | 类型、None、布尔型 |
程序单元类型 | 函数、模块、类 |
Python实现相关类型 | 已编译代码、调用栈跟踪 |
5. 输入与输出¶
1 2 3 4 |
|
6. 运算符¶
6.1 算数运算符¶
运算符 | 描述 |
---|---|
+ |
加 |
- |
减 |
* |
乘 |
/ |
除 |
// |
取整除 |
% |
取余 |
** |
幂 |
6.2 比较运算符¶
比较运算符 | 描述 |
---|---|
== |
等于 |
!= |
不等于 |
> |
大于 |
>= |
大于等于 |
< |
小于 |
<= |
小于等于 |
6.3 赋值运算符¶
6.3.1 增量赋值¶
赋值运算符 | 描述 |
---|---|
= | 简单赋值 |
+= | 加法赋值 |
-= | 减法赋值 |
*= | 乘法赋值 |
/= | 除法赋值 |
//= | 取整除赋值 |
%= | 取余赋值 |
**= | 幂赋值 |
6.3.2 链式赋值¶
1 2 3 4 |
|
6.3.3 交叉赋值¶
1 2 3 4 5 |
|
6.3.4 解压赋值(解包)¶
1 2 3 4 5 6 7 8 |
|
星号表达式
1 2 3 4 5 6 7 8 |
|
解压赋值可以用在任何可迭代对象上面(列表,元组,字符串,文件对象,迭代器和生成器)。
6.4 逻辑运算符¶
逻辑算法 | 描述 |
---|---|
and |
逻辑与 |
or |
逻辑或 |
not |
取反 |
优先级not>and>or
6.5 成员运算符¶
成员运算符 | 描述 |
---|---|
in |
包含 |
not in |
不包含 |
1 2 3 4 |
|
6.6 身份运算符¶
身份运算符 | 描述 |
---|---|
is | 两个对象id相同返回True |
is not | 两个对象id不相同返回True |
==
双等号比较的是值是否相等,而is
比较的是id是否相等。id不同的情况下,值有可能相同(即两块不同的内存空间里可以存相同的值),id相同的情况下,值一定相同 。
7. 代码块分隔符¶
python以行缩进检测块的边界。