Python基础笔记_Day16_Python2和Python3区别、Python高阶函数、代码调试、单元测试

Day16_Python2和Python3区别、Python高阶函数、代码调试、单元测试

17.01python语言基础(python2和python3区别)(了解)
17.02python语言基础(高阶函数--map)(掌握)
17.03python语言基础(高阶函数--reduce)(掌握)
17.04python语言基础(高阶函数--filter)(掌握)
17.05python语言基础(高阶函数--sorted)(掌握)
17.06python语言基础(高阶函数--选择排序)(掌握)
17.07python语言基础(高阶函数--冒泡排序)(掌握)
17.08python语言基础(调试--打印)(掌握)
17.09python语言基础(调试--断言)(了解)
17.10python语言基础(调试--logging)(熟练)
17.11python语言基础(调试--pdb)(了解)
17.12python语言基础(调试--dug)(掌握)
17.13python语言基础(单元测试--对函数进行测试)(熟练)

17.01python语言基础(python2和python3区别)(了解)

17.02python语言基础(高阶函数–map)(掌握)

  • 定义:
    • map():会根据提供的函数对指定的序列做映射
  • 格式:

map(function,iterable)
function--->函数,两个参数  -----》返回值是一个新的列表
iterable---》一个或者多个序列

python2:返回列表
python3:返回的是迭代器

map使用案例

a = (1,2,3,4,5)
b = [1,2,3,4,5]
c = "xiaoming"

la = map(str,a)
lb = map(str,b)
lc = map(str,c)

print(la)
print(list(la))
print(list(lb))
print(list(lc))

输出结果:
<map object at 0x000001CD7A1927F0>
['1', '2', '3', '4', '5']
['1', '2', '3', '4', '5']
['x', 'i', 'a', 'o', 'm', 'i', 'n', 'g']

练习:将单个字符转换为对应的字面量整数

def chr_int(chr):
	return {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7}[chr]


list01 = ["1", "3", "5"]
result = map(chr_int, list01)

print(result)
print(type(result))
print(list(result))

输出结果:
<map object at 0x000001291318A550>
<class 'map'>
[1, 3, 5]

案例:将整数元素的序列,转换为字符串类型

# [1,2,3,4]---->["1","2","3","4"]

result = map(str, [1, 2, 3, 4])
list02 = list(result)
print(list02)
print(list(map(str, [1, 2, 3, 4])))

输出结果:
['1', '2', '3', '4']
['1', '2', '3', '4']

17.03python语言基础(高阶函数–reduce)(掌握)

  • 定义:
    • reduce()函数会对参数中的元素进行累积
  • 格式:

reduce(function,iterable[,initializer])
function:函数,有两个参数
iterable:可迭代的对象
initializer:可选,初始化参数

返回值:返回函数计算的结果

两个数的求和

from functools import reduce

def add_num(a, b):
    return a + b

result = reduce(add_num, [1, 2, 3, 6, 9])
print(result)

print(reduce(add_num, range(101)))

输出结果:
21
5050

方式2

from functools import reduce

add_num = lambda a, b: a + b
result = reduce(add_num, (1, 2, 5, 8, 9))
print(result)
print(reduce(lambda a, b: a + b, (1, 2, 5, 8, 9)))

输出结果:
25
25

注意:

一个函数作用在一个序列上,该函数必须要接受两个参数,

reduce把结果和序列中的下一个元素进行计算,
返回值:计算后的结果


17.04python语言基础(高阶函数–filter)(掌握)

  • 定义:
    • filter()函数:
      • 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件的元素组成的新的列表
  • 格式:
    • filter(function,iterable)
    • function:函数
      • 判断函数
    • iterable:序列,
      • 序列的每一个元素作为参数传递到函数进行判断,返回True,False,最后将True的元素存放到一个新的列表中
    • 返回值:列表

案例:筛选指定的元素

# 案例:筛选指定的元素
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

def get_num(num):
    if num % 2 == 0:
        return True
    else:
        return False

result = filter(get_num, list1)
print(list(result))

输出结果:
[2, 4, 6, 8]

筛选有效信息:

data01 = [["姓名", "年龄", "爱好"], ["xiaoming", 25, "无"], ["laowang", 30, "写代码"]]

def get_name(var):
    if var == "无":
        return False
    else:
        return True

for info in data01:
    result = filter(get_name, info)
    print(list(result))

练习:

序列:字典 学生的基本信息 姓名 年龄
过滤条件20岁以上 或者 名字是两个字的


17.05python语言基础(高阶函数–sorted)(掌握)

  • 定义:
    • sorted()函数对所有的可迭代的对象进行排序的操作
    • sort:list
    • sorted返回值:为一个新的list

格式:

sorted(iterable[,cmp[,key[,reverse]]])
iterable:可迭代的对象
cmp:比较的函数,这个函数中具有两个参数,参数的值都是从可迭代的对象中取出,
   大于返回1
   小于返回-1
   等于返回0
key:比较的规则,参照

reverse:排序规则  reverse= False(升序,默认)   reverse= true(降序)

排序案例

#普通排序
list01 = [1, 4, 7, 3, 2]
list02 = sorted(list01)
print(list02)
print(id(list01))
print(id(list02))

list01.sort()
print(list01)
print(id(list01))

输出结果:
[1, 2, 3, 4, 7]
3187095275208
3187095275272
[1, 2, 3, 4, 7]
3187095275208

总结:
使用sorted排序后,输出新的列表
使用sort排序后,还是原来的列表

#按绝对值大小排序
list4 = [1,2,3,-4,-6,9]
list4.sort()
print(list4)

#key接受函数来实现自定义排序的规则

list5 = sorted(list4,key=abs)
print(list5)

#降序
list6 = [1,2,4,7,3,2,5,3]
list7 = sorted(list6,reverse=True)
print(list7)

#函数可以自己写
def myLen(str):
    return len(str)

list8 = ["3333333","aaa","b222","c2277","d34567"]

list9 = sorted(list8,key=myLen)
print(list9)

输出结果:
['aaa', 'b222', 'c2277', 'd34567', '3333333']

17.06python语言基础(入门算法–选择排序)(掌握)

每次从待排序的数据中选取最小(最大)的一个元素,存放到序列的起始位置,直到全部排完
[1,3,5,6,8,9,2,3,5,2,1]

#选择排序
#[1,2,3]
def select_sort(list00):
# 每次找到一个最大值,直到结束
for i in range(len(list00) - 1, 0, -1):
    # 假设一个最大值
    max_one = 0
    # 用假设的最大值和全部元素比较,如果假设的最大值不成立,就把真正的最大值获取到
    for j in range(1, i + 1):
        if list00[j] > list00[max_one]:
            max_one = j
    # 把最大值放到最后
    list00[i], list00[max_one] = list00[max_one], list00[i]
# 比较结束,返回排序后的列表
return list00


list01 = [1, 2, 4, 6, 4, 34, 57654, 5, 7, 8, 9, 4, 3, 235]
print(select_sort(list01))

17.07python语言基础(入门算法–冒泡排序)(掌握)

  • 第一次:相邻两个数相比,大的往右,最后一个元素就是最大值
  • 第二次:相邻两个数相比,大的往右,最后一个元素就是最大值

冒泡排序案例:

#冒泡排序

list01 = [1, 2, 4, 6, 4, 34, 57654, 5, 7, 8, 9, 4, 3, 235]


def bubble_sort(list00):
    # 每次比较的内容总数目减少一个
    for i in range(len(list00) - 1, 0, -1):
        # 比较相邻的两个元素,如果前面的元素比较大就换到后面
        for j in range(i):
            if list00[j] > list00[j + 1]:
                list00[j], list00[j + 1] = list00[j + 1], list00[j]
    return list00


print(bubble_sort(list01))

17.08python语言基础(调试–打印)(掌握)

打印

#打印
# def test(s):
#     n = int(s)
#     try:
#         print(">>>n = %d"%n)
#         return 10/n
#         print(">>>n = %d" % n)
#     except Exception:
#         pass
# def main():
#     test("0")
# main()

print的弊端,明文显示,将来要删除

17.09python语言基础(调试–断言)(了解)

断言

"""
断言  assert
格式:assert 表达式

def test(s):
    n = int(s)
    assert n != 0, 'n is zero'
    return 10 / n


def main():
    test("1")


main()

assert  1 + 1 == 2

assert isinstance("hello",str)
assert isinstance("hello",int)

如果assert断言失败,assert语句本身同样抛出异常AssertionError


17.10python语言基础(调试–logging)(熟练)

  • logging
    • 把print替换logging,和assert相比,logging不会出现异常,而且可以输出到文件
  • 模块
    • 导入logging模块

####案例1:
import logging
logging.basicConfig(level=logging.INFO)
s = “0”
n = int(s)
logging.info(“n = %d”%n)
print(10/n)

案例2:

import logging
# 设置显示内容优先级
logging.basicConfig(level=logging.INFO)
n = 1

for i in range(10):
    n += i
    logging.info(n)
print(n)
# 记录目标的
"""
DEBUG
INFO
NOTICE
WARNING
ERROR
CRITICAL
ALERT
EMERGENCY
"""

17.11python语言基础(调试–pdb)(了解)

pdb概述

import pdb

pdb
pdb是python中自带的模块,
作用:
    为python程序提供一种交互的源代码调试功能

pdb案例:

import pdb
def add01(a, b):
    return a + b

def add02(a, b):
    pdb.set_trace()
    c = add01(a, b)
    print(c)

add02(3, 6)

pdb命令提示符启动方式:

启动pdb方式:
   DOS--->当前目录---》python -m -pdb XXX.py(已经安装了python)
   直接在PyCharm中导入运行

pdb常用命令

命令           用途
break 或则 b	设置断点
continue/c	继续执行程序,或者跳到下一个断点
next/n		执行下一行
step/s		进入函数
list/l      查看当前的代码段
return/r    执行代码直到从当前函数的返回
exit/q		终止,退出
p/!			打印变量的值    p a
help/h		帮助

17.12python语言基础(调试–debug)(掌握)

17.13python语言基础(单元测试–对函数进行测试)(熟练)

  • 概述:

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

    • 1.单元测试通过:说明测试的函数功能正常
    • 2.单元测试不通过:函数有BUG,测试条件输入有误
  • 如果要使用单元测试—》python内置的模块unittest

单元测试案例

from Day17.Demos.demo01 import add_num, sub_num
import unittest

class Test(unittest.TestCase):
    def setUp(self):
        print("开始测试时候调用")

    def tearDown(self):
        print("测试结束时候调用")

    def test_add(self):
        self.assertEqual(add_num(1, 2), 4, "加法不行")

    def test_sub(self):
        self.assertEqual(sub_num(5, 3), 2, "减法不行")

if __name__ == '__main__':
    unittest

17.14python语言基础(单元测试–对类进行测试)(熟练)

1.创建Person模块

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

    def getAge(self):
        return self.age

2.进行自测:

from Person import Person
per = Person("xiaoming",29)
print(per.getAge())

3.单元测试

import unittest

from Day17.Demos.Person import Person


class Test(unittest.TestCase):
    def test_init(self):
        xiao = Person("小", 30)
        self.assertEqual(xiao.name, "小", "属性赋值错误")

    def test_age(self):
        xiao = Person("大", 28)
        self.assertEqual(xiao.getAge(), 29, "年龄设置错误")


if __name__ == '__main__':
    unittest

17.15python语言基础(单元测试–文档测试)(熟练)

  • 如果要进行文档测试需要导入doctest模块
  • doctest模块可以提取注释中的代码执行

文档测试案例:

import doctest

def add_num(a, b, c):
    """

    :param a:
    :param b:
    :param c:
    :return: sum

	注意空格
    >>> print(add_num(1,2,3))
    5
    6
    """
    sum = a + b + c
    return sum

#进行文档测试
doctest.testmod()

猜你喜欢

转载自blog.csdn.net/dushine2008/article/details/85594461