之前学习的Python是基于实战演练的,很多细节还没有学到,这里跟着课本补充一下内容。
————————————————————————————————————————————
1.1 Python版本号查看
版本号的查看大致有三种方法。
① 交互模式启动Python时可见
C:\Users\dell>python Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 08:53:46) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>② 命令提示符下输入python -V
C:\Users\dell>python -V Python 3.7.8③ Python的sys库查看
def show_version(): import sys print(sys.version) print(sys.version_info) return 01.2 IDLE快捷键
浏览历史命令(上一条)
快捷键
功能说明
Alt + P
Alt + N
浏览历史命令(下一条)
Ctrl + F6
重启Shell,之前定义的对象和导入的模块全部失效
F1
打开Python帮助文档
Alt + /
自动不全前面出现过的单词,如果有多个前缀相同的,则在多个中循环选择
Ctrl + ]
缩进代码块
Ctrl + [
取消代码块缩进
Tab
补全代码或批量缩进
Alt + 3
注释代码块(注意不是小键盘的3)
Alt + 4
取消代码块注释(注意不是小键盘的4)
* 你知道为啥不是小键盘的数字吗?因为在windows环境下,Alt+键盘会输出十进制Unicode码对应的字符!
* 在小键盘上试试Alt+80 Alt+121 Alt+116 Alt+104 Alt+111 Alt+110
1.3 使用pip管理Python扩展库
pip命令
说明
pip freeze [>packages.txt]
列出已安装模块及其版本号,可使用重定向符>把扩展库信息保存到packages.txt文件中(有时也叫requirements.txt)
pip install SomePackage[==version]
在线安装SomePackage模块,可以使用方括号内的形式指定扩展库版本。(不指定默认安装最新版)
pip install SomePackage.whl
通过whl文件离线安装扩展库(一定不能修改文件名)
pip install -r packages.txt
读取文件packages.txt中的扩展库信息,并安装这些扩展库
pip install -upgrade SomePackage
升级SomePackage模块
pip uninstall SomePackage[==version]
卸载SomePackage模块
1.4 Python对象类型 和 数据类型
Python中一切都是对象。
数字(int float complex)、字符串(str)、字节串(bytes)、列表(list)、字典(dict)、元组(tuble)、集合(set、frozenset)、布尔型(bool)、空类型(NoneType)、异常(Exception ValueError TypeError)、文件(比如<_io.TextIOWrapper name='test1.txt' mode='w+' encoding='cp936'>)、其它可迭代对象(range对象、zip对象、enumerate对象、map对象、filter对象)、编程单元(def函数 class类 module模块)
type(x) 查看x的对象类型
id(x) 查看x指向的内存地址
字符串和元组属于不可变序列。
python中允许多个变量引用同一个值,Python采用基于值的内存管理方式。
Python启动时,会对[-5,256]的整数进行缓存,多个等于这个值的变量都会使用同一个值的内存空间。对于此范围之外的整数,同一个程序中或交互模式下同一语句中同值不同名的变量会共用一个内存空间。不同程序或交互模式下不同语句不遵守这个规定(此外Python3.7版本也进行了一定的改动,不过在后续版本又改回来了)。
确定某个变量不再使用时可以用del(x)删除该变量,此时该变量指向的值的引用次数将会-1。当某个值的引用次数为0时,会被Python 的垃圾回收机制自动删除并释放内存空间。可以用sys.getrefcount(x)查看x对应值的引用次数。
print(keyword.kwlist) 查看所有Python关键字。
1.数字
Python中数字类型变量可以表示任意大的数值(只要你内存够大)
图示计算9999的9999次方
Python中数值类型主要有整数、浮点数、复数。十进制的直接写,十六进制0x开头,八进制0o开头,二进制0b开头
Python中复数的形式和数学中复数的形式完全一致。c=1+5i c.real c.imag c.conjugate (共轭复数)
Python3.6开始支持数字中间用下划线隔开,从而提高数字的可读性。可以在除了开始和结束的任意位置添加。1_000_000
2.字符串。
字符串在Python中是不可变序列,一般用单引号、双引号、三引号(三引号就是三个单引号或双引号)界定。三者可以相互嵌套,用来表示复杂的字符串。三引号包含的内容可以换行,也可也用来写多行注释。
转义字符表:
字符串界定符(最外面那个引号)前面加r或者R表示原始字符串,不会对其中的字符进行转义,但是字符串的末尾不能是\
转义字符
含义
\n
换行符
\t
制表符
\r
回车
\'
单引号
\uhhhh
4位16进制数对应的字符
\"
双引号
\\
一个\
\ooo
3位八进制数对应的字符
\xhh
2位16进制数对应的字符
\Uxxxxxxxx
8位十六进制数对应的字符,要求不大于\U0010FFF
3.运算符和表达式
+:算数加法 列表、元组、字符串合并
-:算数减法 集合差集
*:算数乘法 序列重复(比如'#' * 6就相当于'######' ,该方法可用于列表、元组、字符串等)
/:真除法,结果为实数
x // y:求整商,向下取整(地板除,floor division,即向下取整。与之对应的是ceiling division,天花板除,即向上取整)
-:加在变量前表示取相反数
%:两数取余,如果前面是字符串则为字符串格式化
**:幂运算,后者可以为实数,如0.5表示平方根
> < = <= >=大小比较,可以连用。同时可用于集合包含关系比较。
== != 相等和不等关系比较
or and 逻辑或 逻辑与 (惰性求值)
not 逻辑非
in not in 成员测试运算符
is is not 对象同一性测试(测试两个对象的引用地址是否相同)
| ^ & << >> ~ 位运算符(先转换成二进制,右对齐,左侧补0再运算) <<左移 &与 | 或 ^ 异或
& | ^ 集合交集 并集 对称差集。
Python内部把True当成1处理,False当成0处理
abs(x) x的绝对值或复数x的膜
all(可迭代对象) 全为True则返回True
any(可迭代对象) 任一个为True则返回True
bin(x) 返回整数x的二进制格式 ord(x) 八进制 hex(x) 十六进制
complex(real,[imag]) 返回复数(real实部imag虚部)
chr(x) 返回Unicode编码为x的字符
ord(x) 返回一个字符x的Unicode编码
dir([obj]) 返回指定对象或模块obj成员列表
enumerate(可迭代对象) 返回包含元素形式为(0,可迭代对象[0]),(1,可迭代对象[1]) ...的迭代器对象
map(函数,可迭代对象) 返回包含若干函数值的map对象
reversed(seq) 返回seq中所有元素逆序后的迭代器对象
sort直接排序,无返回值 sorted有返回值key用来指定排序规则和依据,reverse指定升降序,默认为升序(False)
sum(可迭代对象) 返回所有对象的和
zip() 组合,取最短的为长度
list(zip('abcdef', [1,2,3])) [('a', 1), ('b', 2), ('c', 3)]4.模块导入
import 模块名[ as 别名]
或
from 模块名 import 对象名[ as 别名]
一次性导入所有对象(一般不推荐)
from 模块名 import *
reload()重新导入模块(测试模块时用)
单元测试
unittest包
自动测试代码是否有问题
建一个类,继承unittest.TestCase
里面写测试的方法,方法名需要以test_开头,这样才能自动测试
然后在主函数里使用unittest.main()来自动执行每一个测试,而不需要手动调用。
import unittest class Unitest_test(unittest.TestCase): """学习单元测试""" def test_sum_fun(self): """测试加法""" result = 0.1 + 0.2 self.assertEqual(result, 0.3)
if __name__ == '__main__': unittest.main()
这样运行之后他就会自动测试是否有问题,检查 result 和 0.3 是否相等
我们都知道由于二进制精度的问题,python中0.1+0.2是不等于0.3的,所以我们得到了这样的结果:
Testing started at 19:32 ... Launching unittests with arguments python -m unittest test.py in Ran 1 test in 0.015s FAILED (failures=1) 0.3 != 0.30000000000000004 Expected :0.30000000000000004 Actual :0.3 <Click to see difference> Traceback (most recent call last): File "test.py", line 16, in test_sum_fun self.assertEqual(result, 0.3) AssertionError: 0.30000000000000004 != 0.3 Process finished with exit code 1
他显示,由于0.1+0.2等于0.3000000000000004,不等于0.3,所以单元测试失败。
这种情况可以使用assertAlmostEqual方法来大致判断相等
result = 0.1 + 0.2
self.assertAlmostEqual(result, 0.3, 5)
后面的5表示验证小数点后5位,多的就不验证了,这样就能测试通过了。
上面是对单个函数的测试,也可以对类进行测试,称为测试类。
要测试类的行为,需要先创建其实例。
unittest中的setUp()方法让我们只需要创建一次对象就能在每个测试方法中都使用。(当然不嫌麻烦也可以一个测试函数创建一个对象)
import unittest class Unitest_test(unittest.TestCase): """学习单元测试""" def setUp(self): self.employee = Employee('Zhao', 'Kugua', 114514) self.custom_rise = 1919810 def test_give_default_raise(self): self.employee.give_rise() self.assertEqual(self.employee.salary, 114514+5000) def test_give_custom_raise(self): self.employee.give_rise(self.custom_rise) self.assertEqual(self.employee.salary, 114514+1919810) def test_sum_fun(self): """测试加法""" result = 0.1 + 0.2 self.assertAlmostEqual(result, 0.3, 5) class Employee: def __init__(self, first_name, lastname, salary): self.first_name = first_name self.last_name = lastname self.salary = salary def give_rise(self, add_num=5000): self.salary += add_num if __name__ == '__main__': print('Hello World') # one000000_test() unittest.main()
常用的六种断言方法
self.assertEqual(a, b) # 核实ab相等
self.assertNotEqual(a, b) # 核实ab不相等
self.assertTrue(x) # 核实x为True
self.assertFalse(x) # 核实x为False
self.assertIn(item, list) # 核实item在list中
self.assertNotIn(item, list) # 核实item不在list中
本文地址:https://blog.jixiaob.cn/?post=70
版权声明:若无注明,本文皆为“赵苦瓜のBlog~”原创,转载请保留文章出处。