python语言 基础梳理

1.

① python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

② 多行语句

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句。但在(),[ ]或{}不需要。

python数据类型有6个:number数字(有4个类型:int整数、float浮点数、bool布尔、complex复数),string字符串,list列表,tuple元组,set集合,dictionary字典

  • 不可变数据(3 个)Number(数字)、String(字符串)、Tuple(元组)
  • 可变数据(3 个)List(列表)、Dictionary(字典)、Set(集合)

④ 字符串string

(1)单引号与双引号没区别

(2)‘\’ 是转义符

(3)反斜杠可以用来转义,使用r可以让反斜杠不发生转义。 如 r"this is a line with \n" 则\n会显示,并不是换行

(4)字符串可以用 + 运算符直接连在一起,用 * 运算符重复

(5)有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始

(6)Python 没有char类型,一个字符就是长度为 1 的字符串

(7)与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。

⑤ print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=" "

⑥ Python 中的变量不需要声明,但每个变量在使用前都必须赋值。

    在 Python 中,变量就是变量,本身没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

⑦ 一个变量可以通过赋值指向不同类型的对象;

    数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数;

    在混合计算时,Python会把整型转换成为浮点数。

⑧ 与Python字符串不一样的是,列表中的元素是可以改变的

⑨ 元组

⑩ 字典

2.

① 列表

② 迭代器与生成器

(1)迭代器有两个基本的方法:iter() 和 next()

迭代器对象可以使用常规for语句进行遍历:

也可以使用 next() 函数:

自定义迭代器 :把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。

__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。

__next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。

如,创建一个返回数字的迭代器,初始值为 1,逐步递增 1:

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代:

(2)yield 生成器

③ 不定长参数

加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

加了两个星号 ** 的参数会以字典的形式导入。

注:声明函数时,参数中星号 * 可以单独出现,但*后的参数必须用关键字传入

④ 匿名函数

⑤ 列表推导式

列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

可以用 if 子句作为过滤器:

⑥ 遍历

(1)字典遍历,关键字和值可以使用 items() 方法同时解读

(2)序列遍历,索引位置和值可以使用 enumerate() 函数同时得到

当需要同时遍历两个或更多的序列,可以使用 zip() 组合

(3)按顺序或倒序来遍历序列

⑦ 异常

Python 使用 raise 语句抛出一个指定的异常:

 

如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出:

⑧ 类

(1)类对象

类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:

类定义了 __init__() 方法,类的实例化操作会自动调用 __init__() 方法。如下实例化类 MyClass,对应的 __init__() 方法就会被调用:

当然, __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上。例如:

self代表类的实例,而非类:类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self

从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。

self 不是 python 关键字,我们把他随意换成其他也是可以正常执行的:

(2)类方法

类的专属方法如下:

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。

(3)类继承

单继承:

多继承:

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法

(4)类的方法重写

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法,实例如下:

super()函数是用于调用父类(超类)的一个方法。

(5)类属性与方法

1)类的私有属性

__private_attrs两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

2)类的方法

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。

self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定使用 self。

3)类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods

例1

例2

(6)类的运算符重载

⑨ 全局变量与局部变量

Python 中变量的查找顺序在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再去内置中找。

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字:

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

另外有一种特殊情况,假设下面这段代码被运行:

错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,所以无法修改。

修改方法如下:

修改 a 为全局变量

或者通过参数传递

Python 中变量的查找顺序在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再去内置中找。

举例

函数 f1() 的作用就是调用函数 f2() 来打印变量int的值。

输出结果为:2

因为 local 中的 int = 2,函数将其打印出来。

现在将函数 f2() 中的 int = 2 删除:

调用函数 f1() 输出结果为:1

因为 local 找不到 int 的值,就去上一层 non-local 寻找,发现 int = 1 并打印。

而进一步删除函数 f1() 中的 int = 1:

调用函数 f1() 输出结果为:0

因为 local 和 non-local 都找不到 int 的值,便去 global 中寻找,发现 int = 0 并打印。

若继续删除 int = 0这一条件:

因为 local、non-local、global 中都没有 int 的值,便去 built-in 中寻找 int 的值, 输出<class 'int'> 。

⑩ python 变量互换

通过创建临时变量:

也可不用临时变量:

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值