风格指南
- Python风格指南
注释
注释解释器不会去执行,直接跳过
注释的写法
- 行注释:以井号(#)开头 可以单独行,也可以在代码后面
- 块注释:以三个单引号或者双引号开头并结束,中间可以包裹多行内容
# 这里是行注释,机器不会运行
print("hello word")
"""
这里是块注释
可以写很多行
...
"""
注释原则
- 复杂代码注释
- 注释不是越多越好
- 建立有效的沟通
变量
变量就是一个可以重复使用的量
变量的命名
- 变量名只能包含字母、数字和下划线,变量名字可以使用字母或者下划线开头,但不可以使用数字开头。如 1_message
- 变量名不能包含空格
- 变量名不能使用Python关键字、保留字、函数,如print
# 查看关键字方法
import keyword #引入关键子模块
# 打印关键字
print(keyword.kwlist)
- 变量名应该简短且具有描述性
- 不建议以下划线开头命名变量,因为以下划线开头的变量具有特殊含义
- 大小写敏感,age 和 Age不一样
- 可以使用中文,但强烈不建议使用
- 推荐使用posix命名规则
posix命名规则
- 多个单词使用下划线链接
- 单词全部小写
变量的赋值
常用赋值方法
# 将10 赋值给size
size = 10
print(size)
>>>10
给多个变量赋同一个值
size1 = size2 = size3 = 10
print(size1)
>>>10
print(size2)
>>>10
print(size3)
>>>10
一行代码给多个变量赋值
size1, size2, size3 = 10, 12, 16
print(size1)
>>>10
print(size2)
>>>12
print(size3)
>>>16
变量交换
- 普通方式
a = 10
b = 20
c = a # 讲a变量赋值给c, 此时c的值为10
a = b # 讲b变量复制给a, 此时a的值为20
b = c # 讲c变量复制给b, 此时b的值为10
通过中间变量c进行变量的交换
- 利用python定义变量的语法实现
a, b = b, a
数据类型
- 六种标准数据类型
- 数字 Number
- 字符串 Str
- 列表 List
- 元祖 tuper
- 字典 dict
- 集合 set
- 布尔值 bool
- None
使用字符串时注意引号匹配
数字类型Number
整数 int
没有小数部分
包含正数、复数、0
浮点数 float
带小数点的数字称为浮点数
科学计数法
科学计数法在python中的表示
a = 10e2
print(a)
>>>1000.0
复数
复数在python中的表示
python中,用j/J表示复数的虚部
a = 4+3j
b = 3j
c = (3j)
字符串 str
字符串是一系列的字符,在Python中,用引号括起来的是字符串,可以使单引号,也可以是双引号。三引号可以表示多行
字符串的表示
name = 'zhangsan'
name = "zhangsan"
name = """
zhang
san
"""
列表 list
通常用来记录一些列数据
列表的创建
- 使用一对方括号来表示空列表: [] 或者是list()
- 使用方括号,其中的项以逗号分隔: [a], [a, b, c]
- 其中的项成为元素
- 元素可以是其他的任意类型
>>> l1 = []
>>> print(l1, type(l1))
[]
>>> l2 = list()
>>> print(l2, type(l2))
[]
>>> l3 = [1, 2, 3]
>>> print(l3, type(l3))
[1, 2, 3]
元组 tuple
元组是不可变序列,与列表相似,区别是其中的元素不可改变
元祖的创建
- 使用一对圆括号来表示空元组: ()
- 使用一个后缀的逗号来表示单元组: a, 或 (a,)
- 使用以逗号分隔的多个项: a, b, c or (a, b, c)
- 使用内置的 tuple(): tuple() 或 tuple(iterable)
元祖只有一个元素时,最后要加一个逗号。
>>> t1 = ()
>>> t2 = 1,
>>> t3 = (1,)
>>> t4 = 1, 2, 3
>>> t5 = tuple()
>>>
>>> print(type(t1))
字典 dict
- 字典是用于储存一组或多组的数据
- 字典是键值对形式
- 键的名字不能重复,否则会覆盖
- 键必须是字符串或者数字,值可以是任何类型
字典的创建
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True
布尔值
- 布尔值用来表示真假
- 只有两个值 Ture/False
- 在Python中,布尔值可以当做数字使用:Ture = 1, False = 0
None
- 表示没有,返回一个空
数据类型的检测
使用type()函数进行检测
>>> a = 10
>>> b = True
>>> c = 'hello world'
>>> d = 1.01
>>> print(a, type(a))
10
>>> print(b, type(b))
True
>>> print(c, type(c))
hello world
>>> print(d, type(d))
1.01
数据类型分类
是否可变
是否可变指内容创建后,内容是否可变
- 可变数据类型
- 列表
- 字典
- 集合
- 不可变数据类型
- 字符串
- 数字
- 元组
是否容器类
容器类型数据指此类型数据可以容纳其他数据
- 容器类型数据
- 字符串
- 列表
- 元组
- 集合
- 字典
- 非容器类型数据
- 数字
- 布尔值
数据类型的转换
数据类型转换指的是讲一种数据类型转换为另一种数据类型,目的是解决不同数据类型之间的运算问题。
自动类型转换
- 数字与布尔值运算会将布尔值自动转为数字
>>> n = 1
>>> b = True
>>> print(n+b)
2
- 逻辑判断时数字会自动转为布尔值
- 整数与浮点数运算时,整数会转为浮点数
手动类型转换
通过特定的函数,可以将一种数据类型转为另一种数据类型
函数 | 转换后类型 | 可转换类型 |
---|---|---|
str() | 字符串 | 所有类型都可以 |
int() | 整数 | 纯数字字符串、布尔值、浮点数,其他容器类类型不能转 |
float() | 浮点数 | 纯数字字符串、布尔值、整数 |
bool() | 布尔值 | 所有类型都可以 |
list() | 列表 | 字符串、数组、字典(只保留键)集合 |
tuple() | 元组 | 数字类型和非容器类型不能转换、容器类型可以 |
dict() | 字典 | 只有特定的列表和元组可以转,要求列表中的每个元素都是一个只包含俩个元素的列表,其中第一个元素转为字典的键,第二个为值 [[1, a], [2, b], [3, c]],元组要求类似。 |
set() | 集合 | 非容器类不可以转换,容器类转换后无序、去重、字典只保留键。 |
使用函数转换类型
- a 为数字类型
- b经过str()函数将a转为字符串类型
- c经过int()函数将b转回数字类型
>>> a = 1
>>> b = str(a)
>>> c = int(b)
>>> print(b, type(b))
1
>>> print(c, type(c))
1
运算符
运算符的分类
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 身份运算符
算术运算符
假设变量a = 1, b = 2
运算符 | 描述 | 实例 |
---|---|---|
+ | 两个对象相加 | a + b >>>3 |
- | 两个对象相减 | a - b >>>-1 |
* | 两个对象相乘或者是返回若干次的字符串 | a*b >>>2 |
/ | 除法运算 | b/a >>>2 |
// | 地板除,取整 | 9//2 >>>4 |
% | 取模(取余) | 9%2 >>>1 |
** | 幂运算 | a**b >>>1 |
注意:Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。
>>> 1/2
0
>>> 1.0/2
0.5
>>> 1/float(2)
0.5
比较运算符
假设变量a = 1, b = 2
运算符 | 描述 | 实例 |
---|---|---|
== | 比较连个对象是否相等 | a == b >>>False |
!= | 比较两个对象是否不相等 | a != b >>>True |
> | 比较x是否大于y | a > b >>>False |
< | 比较x是否小于y | a < b >>> True |
>= | 返回x是否大于等于y | a >= b >>>Flase |
<= | 返回x是否小于等于y | a <= b >>>True |
赋值运算符
假设变量a = 1, b = 2
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算 | c = a + b 将a + b 的运算结果赋值给c |
+= | 加法赋值运算 | c += a 等效与 c = c + a |
-+ | 减法赋值运算 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算 | c /= a 等效于 c = c / a |
%= | 取模赋值运算 | c % a 等效于 c = c % a |
**= | 幂赋值运算 | c **= a 等效于 c = c ** a |
//= | 地板除赋值运算 | c //= a 等效于 c = c//a |
逻辑运算符
运算符 | 描述 | 实例 |
---|---|---|
and | "与"运算,x、y全部为True返回True,否则返回Flase | True and False >>>False |
or | "或"运算,x、y全部为Flase返回False,否则返回True | True or False >>>True |
not | "非"运算,取反 | not False >>>True |
逻辑运算存在短路问题,程序一旦确定逻辑运算结果不在进行后面的代码
# 短路案例,由于提前确定了c的值为True,程序不在往下运行,不在打印"b"
def a():
print("a")
return True
def b():
print("b")
return True
c = a() or b()
print(c)
>>> a
>>> True
成员运算符
检测一个成员是否在某个实例里面
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在序列中找到指定的值返回True,否则返回False | 1 in [1, 2, 3] >>>True |
not in | 如果在序列中没有找到制定的值返回True,否则返回False | 1 not in [1, 2, 3] >>>False |
身份运算符
运算符 | 描述 | 实例 |
---|---|---|
is | 判断两个变量是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | 判断两个变量是不是引用自不同对象 | x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
可以简单理解为他们指向的内存地址是否相同
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等。
位运算符
按位运算符是把数字看作二进制来进行计算的
二进制转换
使用bin()函数可以讲一个数字转换为二进制数字
>>> print(bin(1), '-', bin(2), '-', bin(3))
0b1 - 0b10 - 0b11
使用int()函数可以讲一个二进制转为十进制
>>> print(int(0b1), '-', int(0b10), '-', int(0b11))
1 - 2 - 3
二进制位运算
下表中变量 a 为 60,b 为 13,二进制格式如下:
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
运算优先级
从高到底以此为:
- 小括号内优先级最高
- ** 指数 (最高优先级)
- ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
- * / % // 乘,除,取模和取整除
- + - 加法减法
- >> << 右移,左移运算符
- & 位 'AND'
- ^ | 位运算符
- <= < > >= 比较运算符
- <> == != 等于运算符
- = %= /= //= -= += *= **= 赋值运算符
- is is not 身份运算符
- in not in 成员运算符
- not and or 逻辑运算符