一、学习知识点概要
Python 是一种通用编程语言,其在科学计算和机器学习领域具有广泛的应用。
本次学习包括以下内容:
- 变量、运算符与数据类型
- 位运算
- 循环语句
- 异常处理
二、学习内容
2.1.变量、运算符与数据类型
2.1.1.注释
在Python中,#表示注释,作用于整行,''' '''或""" """表示区间注释,在三个引号之间的信息为注释,例如:
"""
多行注释
三个双引号
"""
print('Hello World!')
#单行注释
'''
多行注释
三个单引号
'''
2.1.2.位运算符
2.1.3.三目运算符
对分支语句,在Python中可以运用更简洁的写法:
a=2
b=5
value=a if a>b else b
print(value)
使用 if else 实现三目运算符(条件运算符)的格式如下:
exp1 if contion else exp2
condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。
2.1.4.其他运算符
运算结果为布尔型数据,以上示例结果都为True。
注:
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
2.1.5.基本数据类型与转换
基本数据类型有整形(int)、浮点型(float)、布尔型(boolean),可通过type()方法查看对象的数据类型,还可以用isinstance()方法查看两种数据的类型是否相同。
整形(int)即为内容为整数的数据,如:5,112,-32等;
浮点型(float)为含有小数点的数据,如:1.0,2.3e-07等;
布尔型(boolean)数据只能取两个值,True和False。但布尔型的数据参与数字运算时,用1和0分别代表True和False。
创建布尔型变量除了直接给变量赋值和用运算符之外,还可以用bool(x)方法创建。其中x可以是:基本类型:整型、浮点型、布尔型
容器类型:字符串、元组、列表、字典和集合
当x为整形或浮点型时,若x=0或x=0.0,bool(x)就为False,否则为True;
当x为容器类型的数据时,若x为空,bool(x)为False,若x 为非空,bool(x)为True。
2.2.位运算
位运算是直接对整数在二进制中进行操作。我们的电脑电路设计都是基于二进制的,所以在二进制层面效率很高。通常位运算多用在对程序效率要求很高的场景。
2.2.1.原码、反码、补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部用补码表示。
- 原码:就是对象的二进制表示。原码的首位为符号位,用于表示数据的正负,当对象为非负数时符号位为0,负数时符号位为1。取该整数的绝对值的二进制,再加上符号位。原码只是为了让我们看二进制更直观,直接看出正负数和比较大小。但原码不是计算机保存的二进制,所以不能直接参与计算。例:
- 反码:反码主要是针对负数的处理,非负数的反码就是原码。在原码的基础上,符号位不变,其他数值位取反,即把1变成0,把0变成1。反码是为了在计算机中存储二进制,但非真正的二进制值,所以也不直接参与计算。例如:
- 补码:补码主要也是针对负数。非负数不变,而负数是在反码的基础上加1。
2.3.循环语句
Python中的While循环和For循环与其他语言中的用法相似,此处只写一些不同的地方。
2.3.1.while - else循环
while - else循环的结构如下:
while 布尔表达式:
代码块
else:
代码块
当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句(如break),将不执行else代码块的内容。
2.3.2.for - else循环
与while - else循环类似,当for循环正常执行完的情况下,执行else输出,如果在循环途中执行了跳出循环的语句,则不会执行else的内容。例如:
for 循环变量 in 可迭代对象:
代码块
else:
代码块
2.3.3.range()方法
range() 返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印(print)的时候不会打印列表。
range(start=0,stop,step=1),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)
2.3.4.enumerate()方法
enumerate(sequence,start=0),参数start可省略,默认为0
sequence:一个序列、迭代器或其他支持迭代对象。
start:下标起始位置。
返回 enumerate(枚举) 对象
enumerate(X)不仅返回了X中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用enumerate(X,j)还可以确定索引起始值为j
enumerate()方法可与for循环配合使用:
seq=['one', 'two', 'three']
for i, element in enumerate(seq):
print(i, element)
'''
0 one
1 two
2 three
'''
2.4.异常处理
异常就是运行期检测到的错误。计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。
2.4.1.Python标准异常总结
BaseException:所有异常的 基类
Exception:常规异常的 基类
StandardError:所有的内建标准异常的基类
ArithmeticError:所有数值计算异常的基类
FloatingPointError:浮点计算异常
OverflowError:数值运算超出最大限制
ZeroDivisionError:除数为零
AssertionError:断言语句(assert)失败
AttributeError:尝试访问未知的对象属性
EOFError:没有内建输入,到达EOF标记
EnvironmentError:操作系统异常的基类
IOError:输入/输出操作失败
OSError:操作系统产生的异常(例如打开一个不存在的文件)
WindowsError:系统调用失败
ImportError:导入模块失败的时候
KeyboardInterrupt:用户中断执行
LookupError:无效数据查询的基类
IndexError:索引超出序列的范围
KeyError:字典中查找一个不存在的关键字
MemoryError:内存溢出(可通过删除对象释放内存)
NameError:尝试访问一个不存在的变量
UnboundLocalError:访问未初始化的本地变量
ReferenceError:弱引用试图访问已经垃圾回收了的对象
RuntimeError:一般的运行时异常
NotImplementedError:尚未实现的方法
SyntaxError:语法错误导致的异常
IndentationError:缩进错误导致的异常
TabError:Tab和空格混用
SystemError:一般的解释器系统异常
TypeError:不同类型间的无效操作
ValueError:传入无效的参数
UnicodeError:Unicode相关的异常
UnicodeDecodeError:Unicode解码时的异常
UnicodeEncodeError:Unicode编码错误导致的异常
UnicodeTranslateError:Unicode转换错误导致的异常
2.4.2.Python标准警告总结
Warning:警告的基类
DeprecationWarning:关于被弃用的特征的警告
FutureWarning:关于构造将来语义会有改变的警告
UserWarning:用户代码生成的警告
PendingDeprecationWarning:关于特性将会被废弃的警告
RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
SyntaxWarning:可疑语法的警告
ImportWarning:用于在导入模块过程中触发的警告
UnicodeWarning:与Unicode相关的警告
BytesWarning:与字节或字节码相关的警告
ResourceWarning:与资源使用相关的警告
三、学习问题与解答
在学习Task1时,出现的主要问题在于对位运算的不了解,例如在用位运算实现整数集合时,就不知道为什么那些整数集合可以表示为01的长串信息。通过在网上搜索才了解到是以01长串的位置来表示这个整数位置上的符号是否是1来表示这个整数在不在集合里,然后那些运算也就能看明白了。
四、学习思考与总结
现在还有的问题基本上都是例程里出现的一些陌生的函数方法不知道什么作用,我还需要通过继续学习才能弄明白。