高阶函数-map:
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','4','1','6']
res = map(chr2int,list1)
print(res)
print(list(res))
l = map(str,[1,2,3,4])
print(list(l))
结果:
<map object at 0x0000000002826E10>
[2, 4, 1, 6]
[‘1’, ‘2’, ‘3’, ‘4’]
高阶函数reduce(fit,lsd):
参数1为函数,参数2 为列表
功能:一个函数作用在序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素累计运算。
reduce(f,[a,b,c,d]
f(f(f(a,b),c),d)
高阶函数-filter(fn,lsd):
参数1 为函数,参数2为序列
功能:用于过滤序列,把传入的函数依次作用与序列的每个元素,根据返回的是True还是Flase决定是否保留该元素。
list1 = [1,2,3,4,5,6,7,8,9]
def func(num):
if num%2==0:
return True
return False
l = filter(func,list1)
print(list(l))#[2, 4, 6, 8]
高阶函数-sorted:
排序:冒泡、选择、 快速、插入、计数器等排序方法
#升序排序
list1 = [1,9,3,4,5,6,7,8]
print(sorted(list1))#[1, 3, 4, 5, 6, 7, 8, 9]
#按绝对值大小排序,key接受函数来实现自定义排序规则
list2 = [1,9,-3,4,5,-6,7,8]
print(sorted(list2,key = abs))#[1, -3, 4, 5, -6, 7, 8, 9]
print(sorted(map(abs,list2)))#[1, 3, 4, 5, 6, 7, 8, 9]
#降序排序,reverse表示反转
print(sorted(list1,reverse = True))#[9, 8, 7, 6, 5, 4, 3, 1]
list3 = ['e3rf','fgea43r12','34567xcv','21sazcvf']
print(sorted(list3,key = len))#默认升序['e3rf', '34567xcv', '21sazcvf', 'fgea43r12']
def mylen(str):
return len(str)
print(sorted(list3,key = mylen))#结果同上,说明这里的len可以自己定义函数
对函数进行单元测试:
单元测试:
作用:用来对一个函数、类、模块来进行正确性校验工作。
结果:1、单元测试通过,说明我们测试的函数功能正常
2、单元测试不通过,说明函数功能有BUG,要么测试条件输入有误
def mySum(x,y):
return x+y
def mySub(x,y):
return x-y
import unittest
from ceshi import mySum
from ceshi import mySub
class Test(unittest.TestCase):
def setUp(self):
print('开始测试自动调用')
def tearDown(self):
print('结束测试时自动调用')
#为了测试mySum
def test_mySum(self):
self.assertEqual(mySum(1,2),3,'加法有误')
def test_mySub(self):
self.assertEqual(mySub(2,1),1,'减法有误')
if __name__ == '__main__':
unittest.main()
对类进行单元测试:
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def getAge(self):
return self.age
from person import Person
per = Person('tom',20)
print(per.getAge())
import unittest
from person import Person
class Test(unittest.TestCase):
def test_init(self):
p = Person('zhangsan',23)
self.assertEqual(p.name,'zhangsan','属性赋值有误')
def test_getAge(self):
p = Person('zhangsan',25)
self.assertEqual(p.getAge(),p.age,'函数有误')
if __name__ == '__main__':
unittest.main()
文档测试:
import doctest
#doctest模块可以提取注释中的代码执行,严格按照python交互模式的输入提取
def mySum(x,y):
'''
get The Sum from x and y
:param x: firstNum
:param y: SecondNum
:return: sum
example:
#注意有空格
>>> print(mySum(1,2))
3
'''
return x+y
print(mySum(1,2))
doctest.testmod()
远程访问windows:
import telnetlib
def telnetDoSomething(IP,user,passwd,command):
try:
#链接服务器
telnet = telnetlib.Telnet(IP)
#设置调试级别
telnet.set_debuglevel(2)
#读取输入用户名信息
rt = telnet.read_until('Login username:'.encode('utf-8'))
#写入用户名
telnet.write((user+'\r\n').encode('utf-8'))
# 读取输入用户密码信息
rt = telnet.read_until('Login passwd:'.encode('utf-8'))
# 写入密码
telnet.write((passwd + '\r\n').encode('utf-8'))
# 读取验证IP
rt = telnet.read_until('Domain name:'.encode('utf-8'))
# 写
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 True
except:
return False
if __name__ == '__main__':
IP = '10.0.142.197'
user = ''
passwd = '***'
command = 'tasklist'
telnetDoSomething(IP,user,passwd,command)
密码破解:
#Arrangement:排列
# Permutation:全排列
import itertools
mylist = list(itertools.permutations([1,2,3,4],3))
print(mylist)
print(len(mylist))
#组合
mylist = list(itertools.combinations([1,2,3,4],3))
print(mylist)
print(len(mylist))
#用于生成密码,其他可能还需要加大小写的字母
mylist = list(itertools.product([0,1,2,3,4,5,6,7,8,9],repeat=4))
print(mylist)
print(len(mylist))
破解密码:穷举法
import itertools
import time
passwd = (''.join(x) for x in itertools.product('0123456789',repeat=3))
# print(next(passwd))
# print(next(passwd))
# print(next(passwd))
while True:
try:
time.sleep(0.5)
str = next(passwd)
print(str)
except StopIteration as e:
break