Python 入门
字面量和变量
- 字面量就是一个一个的值,比如:1,2,3,4,5,6,‘HELLO’字面量所表示的意思就是它的字面的值,在程序中可以直接使用字面量
- 变量(variable)变量可以用来保存字面量,并且变量中保存的字面量是不定的 变量本身没有任何意思,它会根据不同的字面量表示不同的意思
数据类型
数据类型指的就是变量的值得类型,也就是可以为变量赋哪些值
对象(object)
- Python是一门面向对象的语言
- 一切皆对象!
- 程序运行当中,所有的数据都是存储到内存当中然后再运行的!
- 对象就是内存中专门用来存储指定数据的一块区域
- 对象实际上就是一个容器,专门用来存储数据
对象的结构
每个对象中都要保存三种数据
id
(标识)
- id 用来标识对象的唯一性,每一个对象都有唯一的 id
- 对象的 id 就相当于人的身份证号一样
- 可以通过
id()
函数来查看对象的 id
- id 是由解析器生成的,在
CPython
中,id 就是对象的内存地址
- 对象一旦创建,则它的 id 永远不能再改变
type
(类型)
- 类型用来标识当前对象所属的类型
- 比如:
int
、str
、float
、bool
...
- 类型决定了对象有哪些功能
- 通过
type()
函数来查看对象的类型
- Python 是一门强类型的语言,对象一旦创建类型便不能修改
value
(值)
- 值就是对象中存储的具体的数据
- 对于有些对象值是可以改变的
- 对象分成两大类:可变对象 不可变对象
- 可变对象的值可以改变
- 不可变对象的值不能改变,之前学习的对象都是不可变对象
变量和对象
- 对象并没有直接存储到变量中,在 Python 中变量更像是给对象起了一个别名
- 变量中存储的不是对象的值,而是对象的 id(内存地址),当我们使用变量时,实际上就是在通过对象 id 在查找对象
- 变量中保存的对象,只有在为变量重新赋值时才会改变
- 变量和变量之间是相互独立的,修改一个变量不会影响另一个变量
类型转换
- 所谓的类型转换,将一个类型的对象转换为其他对象
- 类型转换不是改变对象本身的类型,而是根据当前对象的值创建一个新对象
序列
列表(list
)
- 列表是 Python 中的一个对象
- 对象(object)就是内存中专门用来存储数据的一块区域
- 之前我们学习的对象,像数值,它只能保存一个单一的数据
- 列表中可以保存多个有序的数据
- 列表是用来存储对象的对象
- 列表的使用:
序列(sequence
)
- 序列是 Python 中最基本的一种数据结构
- 数据结构指计算机中数据存储的方式
- 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
- 序列的分类:
- 可变序列(序列中的元素可以改变):
- 不可变序列(序列中的元素不能改变):
可变对象
- 每个对象中都保存了三个数据:
- 列表就是一个可变对象
a[0] = 10
(改对象)
- 这个操作是在通过变量去修改对象的值
- 这种操作不会改变变量所指向的对象
- 当我们去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现
a = [4,5,6]
(改变量)
- 这个操作是在给变量重新赋值
- 这种操作会改变变量所指向的对象
- 为一个变量重新赋值时,不会影响其他的变量
- 一般只有在为变量赋值时才是修改变量,其余的都是修改对象
字典(dict
)
- 字典属于一种新的数据结构,称为映射(
mapping
)
- 字典的作用和列表类似,都是用来存储对象的容器
- 列表存储数据的性能很好,但是查询数据的性能的很差
- 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素
- 在查询元素时,字典的效率是非常快的
- 在字典中可以保存多个对象,每个对象都会有一个唯一的名字
- 这个唯一的名字,我们称其为
键(key)
,通过 key
可以快速的查询 value
- 这个对象,我们称其为
值(value)
- 所以字典,我们也称为叫做
键值对(key-value)
结构
- 每个字典中都可以有多个键值对,而每一个键值对我们称其为一
项(item)
集合(set
)
- 集合和列表非常相似
- 不同点:
- 集合中只能存储不可变对象
- 集合中存储的对象是无序(不是按照元素的插入顺序保存)
- 集合中不能出现重复的元素
函数
函数简介(function
)
- 函数也是一个对象
- 对象是内存中专门用来存储数据的一块区域
- 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用
- 创建函数:
def 函数名([形参1,形参2,...形参n]) :
代码块
- 函数名必须要符号标识符的规范(可以包含字母、数字、下划线、但是不能以数字开头)
- 函数中保存的代码不会立即执行,需要调用函数代码才会执行
- 调用函数:
函数对象()
- 定义函数一般都是要实现某种功能的
函数的参数
- 在定义函数时,可以在函数名后的
()
中定义数量不等的形参,多个形参之间使用 ,
隔开
- 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
- 实参(实际参数)
- 如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参
函数式编程
- 在 Python 中,函数是一等对象
- 一等对象一般都会具有如下特点:
- 对象是在运行时创建的
- 能赋值给变量或作为数据结构中的元素
- 能作为参数传递
- 能作为返回值返回
- 高阶函数
- 装饰器
对象(object)
- 对象是内存中专门用来存储数据的一块区域。
- 对象中可以存放各种数据(比如:数字、布尔值、代码)
- 对象由三部分组成:
- 对象的标识(id)
- 对象的类型(type)
- 对象的值(value)
类(class)
- 我们目前所学习的对象都是 Python 内置的对象
- 但是内置对象并不能满足所有的需求,所以我们在开发中经常需要自定义一些对象
- 类,简单理解它就相当于一个图纸。在程序中我们需要根据类来创建对象
- 类就是对象的图纸!
- 我们也称对象是类的实例(instance)
- 如果多个对象是通过一个类创建的,我们称这些对象是一类对象
- 像
int()
、float()
、bool()
、str()
、list()
、dict()
.... 这些都是类
a = int(10)
创建一个 int
类的实例 等价于 a = 10
- 我们自定义的类都需要使用大写字母开头,使用大驼峰命名法(帕斯卡命名法)来对类命名
- 类也是一个对象!
- 类就是一个用来创建对象的对象!
- 类是 type 类型的对象,定义类实际上就是定义了一个 type 类型的对象
类的定义
- 类和对象都是对现实生活中的事物或程序中的内容的抽象
- 实际上所有的事物都由两部分构成:
- 在类的代码块中,我们可以定义变量和函数,变量会成为该类实例的公共属性,所有的该类实例都可以通过
对象.属性名
的形式访问;函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名()
的形式调用方法
- 注意:方法调用时,第一个参数由解析器自动传递,所以定义方法时,至少要定义一个形参!
- 实例为什么能访问到类中的属性和方法:类中定义的属性和方法都是公共的,任何该类实例都可以访问
- 属性和方法查找的流程
- 当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,
- 如果有,则直接返回当前的对象的属性值,
- 如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,
- 如果类对象中依然没有,则报错!
- 类对象和实例对象中都可以保存属性(方法)
- 如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中
- 如果这个属性(方法)是某个实例独有,则应该保存到实例对象中
- 一般情况下,属性保存到实例对象中,而方法需要保存到类对象中
创建对象的流程
p1 = Person()
的运行流程
- 创建一个变量
- 在内存中创建一个新对象
__init__(self)
方法执行
- 将对象的 id 赋值给变量
类的基本结构
class 类名([父类]) :
公共的属性...
# 对象的初始化方法
def __init__(self,...):
...
# 其他的方法
def method_1(self,...):
...
def method_2(self,...):
...
...
异常和文件
异常
- 程序在运行过程当中,不可避免的会出现一些错误,比如:
- 使用了没有赋值过的变量
- 使用了不存在的索引
- 除0
- ...
- 这些错误在程序中,我们称其为异常。
- 程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行!
处理异常
程序运行时出现异常,目的并不是让我们的程序直接终止!
Python是希望在出现异常时,我们可以编写代码来对异常进行处理!
try:
代码块(可能出现错误的语句)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
else:
代码块(没出错时要执行的语句)
finally:
代码块(该代码块总会执行)
- try 是必须的 else 语句有没有都行
- except 和 finally 至少有一个
- 可以将可能出错的代码放入到 try 语句,这样如果代码没有错误,则会正常执行,如果出现错误,则会执行 expect 子句中的代码,这样我们就可以通过代码来处理异常,避免因为一个异常导致整个程序的终止
异常的传播(抛出异常)
- 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播,
- 如果函数中没有对异常进行处理,则异常会继续向函数调用处传播,
- 如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播
- 直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息
- 当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中
- 而异常传播时,实际上就是异常对象抛给了调用处
- 比如:
ZeroDivisionError
类的对象专门用来表示除 0 的异常
NameError
类的对象专门用来处理变量错误的异常
- ....
- 在Python为我们提供了多个异常对象
抛出异常
可以使用 raise
语句来抛出异常,raise
语句后需要跟一个 异常类
或 异常的实例
文件(File)
- 通过 Python 程序来对计算机中的各种文件进行增删改查的操作
- I/O(Input / Output)
- 操作文件的步骤:
- 打开文件
- 对文件进行各种操作(读、写),然后保存
- 关闭文件
关于 Python 基础
原文:https://www.cnblogs.com/geekfx/p/13733158.html