python入门基础day14

## 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

>**注意:**<br/>
一个函数作用在一个序列上,该函数必须要接受两个参数,
<br/>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))


>**练习:**<br/>
序列:字典   学生的基本信息   姓名  年龄
过滤条件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)
    # 记录目标的

## 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语言基础(调试--dug)(掌握)

## 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/qq_42336700/article/details/81488143