风格指南
注释
注释解释器不会去执行,直接跳过
注释的写法
行注释:以井号(#)开头 可以单独行,也可以在代码后面
块注释:以三个单引号或者双引号开头并结束,中间可以包裹多行内容
# 这里是行注释,机器不会运行
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 逻辑运算符