python(二十二)——python2、3区别,函数map、reduce、sorted,单元测试,远程链接
发布日期:2021-06-30 16:35:20 浏览次数:2 分类:技术文章

本文共 4226 字,大约阅读时间需要 14 分钟。

目录

 


python3和python2区别

性能:python3起始比python2效率低,但python3有极大的优化空间,效率正在追赶

编码:python3源码使用utf-8编码,使得变量更加广阔

在python2中可以使用<>代表不等于,在python3中使用!=

python3中加入as和with关键字,还要True,False,None

python2中使用除号(/)会自动取整,而python3中使用除号(/)会取小数,必须使用 //

python2中有print语句,而python3中是print()函数

python3去除raw_input,加入了input()函数

新的super(),在python3中可以不给super()传参数

在python2中,即使比较类型不匹配也能执行,比如2<'4',会返回True。在python3中改变了顺序操作符的行为,例如x<y,而当x和y的类型不匹配时,会抛出TypeError而不是返回bool值

python2字符串以8bit字符串存储,在python3中以16bit Unicode字符串存储,并且字符串只有str一种类型

在python3中所有的异常都是从BaseException继承,并删除了StardardError

python2 :try:    ......except Exception,e:    ......python3:try:    ......except Exception as e:    ......

在python2中有一个自带的类型file去处理文件,python3中没有file类

 

高阶函数map和reduce

最早提出在Google的mapreduce文章上

map()把数据分散出去进行解析,会生成一个列表

reduce()数据收集进行处理,会处理这个列表

python内置了map()和reduce()函数

例子:使用map()

#map()#原型 map(fn,lsd)#fn是函数   lsd是序列#功能:将传入的函数依次作用在序列的每一个元素,并把结果作为新的Iterator返回#将单个字符转成对应的字面量整数def chr2int(chr):    return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[chr]list1 = ['2','1','6','5']#map处理后的列表是惰性列表res = map(chr2int,list1)print(res)#将惰性列表转换成列表print(list(res))

运行结果: 

 

例子:ruduce()的简单使用

from functools import reduce#reduce(fn,lsd)#fn是函数   lsd是序列#功能:一个函数作用在序列上,这个函数必须接受两个参数,reduce把结果继续和序列的下一个元素累计运算#reduce(f,[a,b,c,d])#f(f(f(a,b),c),d)#求一个序列的和list = [1,2,3,4,5,6]#1 + 2#1 + 2 + 3#1 + 2 + 3 + 4#1 + 2 + 3 + 4 + 5#1 + 2 + 3 + 4 + 5 + 6def sum(x,y):    return x + yall = reduce(sum,list)print(all)

运行结果: 

 

高阶函数filter

原型:filter(fn,lsd)

fn为函数,lsd为序列

功能:用于过滤序列,把传入的函数依次作用于序列的每个元素,根据返回的是True还是False,来决定是否保留该元素

例子:保留序列里的奇数

#保留序列的奇数list1 = [1,2,3,4,5,6,7,8,9]def isjishu(num):    #偶数保留    if num%2 != 0:        return True    #奇数剔除    return Falsel = filter(isjishu,list1)print(list(l))

运行结果: 

 

高阶函数sorted

排序:冒泡排序,选择排序   快速排序,插入排序,计数器排序

相对来说,冒泡排序,选择排序的效率低于快速排序,插入排序,计数器排序

sorted可以对序列进行排序,对字符串进行排序时,比较的是ASCLL码值

例子:

#排序list1 = [4,8,6,-4,9,1,3,7,-8]#sorted默认升序排序list2 = sorted(list1)print(list2)#按列表绝对值排序,key可以接受函数来实现自定义排序规则list3 = sorted(list1,key=abs)print(list3)#降序排序list4 = sorted(list1,reverse=True)print(list4)

运行结果:

 

单元测试

一般开发都要有测试人员。

单元测试作用:用来对一个函数,一个类或者一个模块来进行正确性校验工作

结果:

  1. 单元测试.通过,说明函数功能正常;
  2. 单元测试不通过,说明函数出现bug,要么输入条件有误

 

对函数进行单元测试

例子:一个x+y的加法函数测试

第一次是成功的加法,第二次对加法函数进行了修改

import unittest# from 对函数进行单元测试 import 函数def sum(x,y):    return x + y class Test(unittest.TestCase):    def setUp(self):        print('开始测试时自动调用')    def tearDown(self):        print('结束测试时自动调用')    #为了测试sum    def test_sum(self):        self.assertEqual(sum(1,2),3,'加法有误')if __name__=='__main__':    unittest.main()

运行结果:

修改加法函数:

def sum(x,y):    return x + y + 1

运行结果:

 

对类进行单元测试

先定义一个Person类

class Person(object):    def __init__(self,name,age):        self.name = name        self.age = age    def getAge(self):        return self.age

对这个类进行测试

import unittest# from 对函数进行单元测试 import 函数from Person import Personclass Test(unittest.TestCase):    def setUp(self):        print('开始测试时自动调用')    def tearDown(self):        print('结束测试时自动调用')    #为了测试sum    def test_init(self):        per = Person('tom', 20)        self.assertEqual(per.name,'tom','属性赋值有误')    def test_getAge(self):        per = Person('tom', 20)        self.assertEqual(per.getAge(),per.age,'getAge函数有误')if __name__=='__main__':    unittest.main()

运行结果:

 

远程链接Windows

import telnetlibdef telnetDoSomething(IP,user,passwd,command):    #链接服务器    telnet = telnetlib.Telnet(IP)    #设置调试级别    telnet.set_debuglevel(2)    #读取用户信息    rt = telnet.read_until('Login username:'.encode('utf-8'))    #写入用户名,'\r\n'是回车    telnet.write((user+'\r\n').encode('utf-8'))    # 读取密码信息    rt = telnet.read_until('Login password:'.encode('utf-8'))    # 写入密码,'\r\n'是回车    telnet.write((passwd + '\r\n').encode('utf-8'))    # 读取验证IP信息    rt = telnet.read_until('Domain name:'.encode('utf-8'))    # 写入IP,'\r\n'是回车    telnet.write((IP + '\r\n').encode('utf-8'))    #登录成功,写指令    rt = telnet.read_until('>'.encode('utf-8'))    telnet.write((command + '\r\n').encode('utf-8'))    #上面命令执行成功,会继续>    #失败,一般不会是>    rt = telnet.read_until('>'.encode('utf-8'))    #断开链接    telnet.close()    return Trueif __name__ == '__main__':    IP = '10.0.142.197'    user = 'xumingbin'    passwd = '*********'    command = 'tasklist'    telnetDoSomething(IP,user,passwd,command)

 

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论 

转载地址:https://kongchengji.blog.csdn.net/article/details/95189600 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python(二十三)——正则表达式,re模块
下一篇:力扣一日一练(19)——最后一块石头的重量

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月17日 07时37分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章