1. 注释
单行注释:使用#符号表示单行注释,注释内容写在#后面,如下所示:
1 | # 这是一条单行注释 |
多行注释:使用’’’或”””表示多行注释,注释内容写在这两个符号之间,如下所示:
1 | ''' |
2. 变量
python 中变量很简单,不需要指定数据类型,直接使用等号定义就好。python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前那个变量知道那个变量值的内存地址存起来,而不是指向之前的那个变量。
定义变量:使用赋值符号=定义变量,变量名由字母、数字、下划线组成,不能以数字开头,如下所示:
1 | x = 10 |
变量类型:Python中的变量是动态类型的,既不需要事先声明变量的类型,而是在运行时根据值的类型来确定变量的类型,如下所示:
1 | x = 10 # 整数 |
注意,以下关键字不能声明为变量名:
1 | ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif'',for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'try', 'while', 'with', 'yield'] |
3. 数据类型
3.1. 数字
Python中的数字包括整数、浮点数和复数,如下所示:
1 | x = 10 # 整数 |
python 中数字类型的变量可以表示任意大的数值
十六进制一 0x 开头,八进制以 0o 开头,二进制以 0b 开头
python中可以表示复数用j来表示虚部,complex(a,b) 函数可以形成复数
1
2
3a=3+4j
b=complex(5,6)
c=a+breal() 查看实部,imag() 查看虚部,conjugate()返回共轭复数
1
2
3
4print(c)
print(c.real)
print(c.imag)
print(c.conjugate())运行结果
1
2
3
4(8+10j)
8.0
10.0
(8-10j)
3.2. 字符串
Python中的字符串可以使用单引号、双引号、三单引号和三双引号来表示。三引号也可以多行注释代码,单行注释,使用#。如下所示:
1 | s1 = 'hello' # 单引号字符串 |
3.3. 列表
Python中的列表是由一组有序的元素组成,可以包含任意类型的数据,用中括号[]表示,如下所示:
1 | list1 = [1, 2, 3, 'hello', 'world'] # 列表中可以包含不同类型的元素 |
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
1 | list1 = ['physics', 'chemistry', 1997, 2000] |
你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示:
1 | list = [] ## 空列表 |
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。如下所示:

列表推导式
列表推导式(list comprehension),可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。语法如下所示:
1 | [ 表达式 for 迭代变量 in 可迭代对象 if 条件表达式 ] |
不使用列表推导式的语法:
1 | for 迭代变量 in 可迭代对象 : |
举几个栗子:
1 | # 列表推导式 |
来看复杂点的列表推导式:
1 | # in后面跟其他可迭代对象,如字符串 |
- 列表推导式会遍历后面的可迭代对象,然后按照for前的表达式进行运算,生成最终的列表.
- 如果有if条件语句,for遍历后紧跟着进行条件判断.
- 如果有多个for循环,则最终的数据数量为多个for循环的笛卡尔积.
- 可以进行嵌套的列表推导,与嵌套for循环的原理相同.
常用List列表函数&方法
1 | Python 包含以下函数: |
3.4. 元组
Python中的元组也是由一组有序的元素组成,但是元素不能修改,用小括号()表示,如下所示:
1 | tuple1 = (1, 2, 3, 'hello', 'world') # 元组中可以包含不同类型的元素 |
3.5. 字典
Python中的字典是由一组键值对组成,用大括号{}表示,如下所示:
1 | dict1 = {'name':'Tom', 'age': 18, 'gender': 'male'} # 字典中的键值对用冒号:分隔 |
字典推导式
如果列表推导的概念已经为你所熟知,接受字典推导并不难.直接看代码吧:
1 | # 因为key是唯一的,所以最后value都是1 |
3.6. 集合
Python中的集合是由一组无序的、唯一的元素组成,用大括号{}或set()函数表示,如下所示:
1 | set1 = {1, 2, 3, 4, 5} # 使用大括号{}表示集合 |
集合推导式
同样的,直接看代码,这样可以直观的看到集合推导式
1 | # 遍历一个可迭代对象生成集合 |
运行结果:
1 | {'负', '有', '人', '轻', '前', '云', '重', ',', '淡', '风', '行'} |
集合是无序且不重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样。
4. 条件语句
if语句:用于判断一个条件是否成立,如果成立则执行if块中的语句,否则跳过if块,如下所示:
1 | if x > 0: |
if/else语句:用于判断一个条件是否成立,如果成立则执行if块中的语句,否则执行else块中的语句,如下所示:
1 | if x > 0: |
if/elif/else语句:用于判断多个条件是否成立,如果第一个条件成立则执行if块中的语句,否则判断第二个条件,如果第二个条件成立则执行elif块中的语句,否则执行else块中的语句,如下所示:
1 | if x > 0: |
5. 循环语句
for循环:用于遍历一个序列(如列表、元组、字符串等),如下所示:
1 | for item in sequence: |
while循环:用于重复执行一段代码,直到条件不成立为止,如下所示:
1 | while condition: |
6. 函数
定义函数:使用def关键字定义函数,函数名由字母、数字、下划线组成,参数可以有默认值、可变参数、关键字参数等,如下所示:
1 | def add(x, y): |
调用函数:使用函数名和参数列表来调用函数,如下所示:
1 | result = add(1, 2) |
6.1. range()函数
python 的 range() 函数可用来创建一个整数列表,一般用在 for 循环中.
- range()语法:range(start, stop[, step])
- start:计数从start开始,默认是从0开始(闭区间),如:
range(5)等价于range(0,5)。 - stop:计数到stop结束,但不包括stop(开区间),如:
range(0,5)是[0, 1, 2, 3, 4],不包含5。 - step:步长,相邻两个值的差值,默认为1,如:
range(0,5)相当于range(0, 5, 1)。
7. 模块和包
python 中有大量第三方库可用 “pip3 install 。。。”进行有需要的安装
在使用库函数时,需要导入,有两种方法:
- import 模块名【as 别名】:使用这种方式导入后,需要在使用的对象前加上前缀 “模块名 . 对项名”的方式进行访问,也可以用“别名 . 对象名”的方式使用其中的对象
- from 模块名 import 对象名【as 别名】:使用这种方式仅导入使用的对象,并且可以为这个对象起一个别名,这种方法可以减少查询次数,减少程序员的代码量,不需要使用模块名作为前缀
比较极端的情况是一次导入模块中全部的对象:
1 | from math import * |
不推荐使用这中方法,一旦多个模块中有同名的对象,会导致混乱
8. 创建类
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
1 | class ClassName: |
类的帮助信息可以通过
ClassName.__doc__查看。class_suite 由类成员,方法,数据属性组成。
以下是一个简单的 Python 类的例子:
1 | #!/usr/bin/python |
- empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
- 第一种方法
__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法 self代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,按照惯例它的名称是 self。
8.1. 创建实例对象
实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
以下使用类的名称 Employee 来实例化,并通过 init 方法接收参数。
1 | # 创建 Employee 类的第一个对象 |
8.2.访问属性
可以使用点号 . 来访问对象的属性。使用如下类的名称访问类变量:
1 | emp1.displayEmployee() |
可以添加,删除,修改类的属性,如下所示:
1 | emp1.age = 7 # 添加一个 'age' 属性 |
也可以使用以下函数的方式来访问属性:
- getattr(obj, name, [default]) : 访问对象的属性。
- hasattr(obj,name) : 检查是否存在一个属性。
- setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
- delattr(obj, name) : 删除属性。
1 | hasattr(emp1, 'age') # 如果存在 'age' 属性返回 True。 |
9. 格式化输出
什么是格式化输出呢,就是说把你的输出都格式化成一个样子的,比如说登录的欢迎信息,都是welcome to login,Marry。每个用户登录都是这样欢迎,但是每个用户的用户名都是一样的,不能一个用户写一行代码,所以这就用到了格式化输出。
格式化输出,有三种方式,
第一种是用“+”连接,直接把输出的字符串和变量连接起来就可以了;
第二种是用占位符,占位符有常用的三种:%s,%d和%f , %s是后面的值是一个字符串,%d后面的值必须是一个整数,%f后面是小数;
第三种是使用{}和format方法。
官方推荐使用format方法,不推荐使用第一种,第一种用加号的,会在内存里面开辟多个内存空间,而后面两种是只开辟一块内存空间。如下所示:
1 | name=input('请输入你的名字:') |