跳转至

Python简介

Python 是著名的“龟叔”Guido van Rossum在 1989 年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。

Python是一种动态类型(自动跟踪类型而不需要声明)的,强类型(只能对一个对象进行适合该对象的有效操作)语言。python中一切皆对象。

一、Python简介

1. Python解释器

在windows安装的Python软件包就是一个解释器,解释器是代码与计算机之间的软件逻辑层。当我们写了一段python程序,Python解释器会读取程序,并按照其中的命令执行。Python安装后会生成一些组件,至少包括一个解释器和一套支持库。

2. Python的主流实现

  1. CPython:标准Python,由ANSI C语言编写
  2. JPython:基于Java的Python
  3. IronPython:基于.NET的Python
  4. Stackless:注重并发的Python
  5. PyPy:注重速度的Python,CPython标准的另一个实现

3. 冻结二进制文件

冻结二进制文件可以将程序文件的字节码、PVM(解释器)以及任何程序所需要的Python支持文件捆绑在一起形成一个单独的可执行的二进制程序(如windows下的exe)。

  1. py2exe 在Windows使用
  2. PyInstaller 在Linux和Mac OS X使用
  3. 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优点:

  1. 丰富的内置库和第三方库
  2. 学习曲线低,容易上手
  3. 支持面向对象编程和函数式编程

Python的缺点:

  1. 代码不能加密
  2. 在现有的实现方式下,与C和C++这类完全编译并且较底层的语言相比,Python的执行速度还不够快。

二、 Python基础知识点

1. Python的编码方式

python3默认使用utf-8

python2默认使用ASCII,可以在首行声明编码方式

1
# -*- encoding:utf-8 -*-

2. 变量

python变量不需要提前声明,当给一个变量赋值的时候就创建了它,可能赋的是任何类型的对象,在使用变量的值前必须对其进行赋值。

变量就是用来代指某个东西的名字。

1
x = 100

在操作符两边加上空格会让代码更容易阅读

1. 变量的命名规则

  1. 变量名只能包含字母、数字和下划线,不能以数字开头
  2. 变量名不能包含空格
  3. 不要将python关键字和函数名作为变量名
  4. 变量名应该简短且具有描述性
  5. 慎用小写字母l和大写字母O
1
2
3
4
5
6
7
# python 保留字
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> import sys
>>> sys.version
'3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]'

2. 引用

在Python中,从变量到对象的连接称作引用。

  1. 变量是一个系统表的入口,包含了指向对象的连接
  2. 对象是被分配到的一块内存,有足够的空间去表示它们所代表的值
  3. 引用是自动形成的从变量到对象的指针

3. 变量的命名风格

  1. 驼峰命名法: 类名、Type 变量、异常 exception 名推荐使用
  2. 蛇形命名法: 包名、模块名、方法名和普通变量名推荐使用 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
# 输入
name = input("please input your name: ")
# 输出
print(name)

6. 运算符

6.1 算数运算符

运算符 描述
+
-
*
/
// 取整除
% 取余
**

6.2 比较运算符

比较运算符 描述
== 等于
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于

6.3 赋值运算符

6.3.1 增量赋值
赋值运算符 描述
= 简单赋值
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
//= 取整除赋值
%= 取余赋值
**= 幂赋值
6.3.2 链式赋值
1
2
3
4
>>> x=y=z=100
>>> x,y,z
(100, 100, 100)
# 三个变量指向内存中的同一个对象
6.3.3 交叉赋值
1
2
3
4
5
>>> n = 2
>>> m = 3
>>> n,m = m,n
>>> n, m
(3, 2)
6.3.4 解压赋值(解包)
1
2
3
4
5
6
7
8
>>> p = ['Tom', 18]
>>> name, age = p
>>> name, age
('Tom', 18)
>>> name
'Tom'
>>> age
18

星号表达式

1
2
3
4
5
6
7
8
>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
>>> name, email, *phone_numbers = record
>>> name
'Dave'
>>> email
'dave@example.com'
>>> phone_numbers
['773-555-1212', '847-555-1212']

解压赋值可以用在任何可迭代对象上面(列表,元组,字符串,文件对象,迭代器和生成器)。

6.4 逻辑运算符

逻辑算法 描述
and 逻辑与
or 逻辑或
not 取反

优先级not>and>or

6.5 成员运算符

成员运算符 描述
in 包含
not in 不包含
1
2
3
4
>>> not 1 in [2, 3, 4]
True
>>> 1 not in [2, 3, 4]  # 推荐使用not in
True

6.6 身份运算符

身份运算符 描述
is 两个对象id相同返回True
is not 两个对象id不相同返回True

==双等号比较的是值是否相等,而is比较的是id是否相等。id不同的情况下,值有可能相同(即两块不同的内存空间里可以存相同的值),id相同的情况下,值一定相同 。

7. 代码块分隔符

python以行缩进检测块的边界。

三、垃圾回收机制

1. 引用计数

2. 标记-清除

3. 分代回收