zoukankan      html  css  js  c++  java
  • day 14小结

    1.匿名函数

    匿名 -->没有名字 -->没办法调用 -->只能和某些方法联用

    def f1()
    	pass
    

    匿名函数的语法(通常与max() sorted() filter() sorted()方法联用)

    lambda  # 参数:返回值
    
    # 如果非要用,也可以用,但是会变成有名函数
    f = lambda x, y:x * y
    res = f(1,2)
    print(res)
    

    max 返回最大值

    
    
    
    res = max([1,2,3,4,5])
    print(res)
    
    res = max(1,2,3,4,5)
    print(res)
    

    min返回最小值

    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
    }
    
    def func(name): # nick/jason/tank/sean
        return salary_dict[name]  # 3000/100000/5000/2000
    
    res = max(salary_dict,key=func)  # 默认key的首字符
    res = max(salary_dict,key= lambda name:salary_dict[name])  # 默认key的首字符
    print(res)
    key = func  # 默认做的事
    # 循环遍历salary_dict,会取到所有的key值
    # 然后把所有的key值一次丢到func中,返回薪资
    # 通过返回薪资排序,得到最大值
    
    res = min(salary_dict, key = lambda name: salary_dict[name])
    print(res)
    

    fileter -->筛选

    
    # 首先将可迭代对象变成迭代器对象
    # res = next(迭代器对象),将res当做参数传给第一个指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下.
    def function(item):  # 1/2/3/4
        if item < 5:
            return True
        else:
            return False
        
        
    # res = filter(function, [1,2,3,4])
    res = filter(lambda item:item > 2, [1,2,3,4])
    print(rse)  # 迭代器
    print(list(res))
    
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
    }
    
    res = filter(lambda item: salary_dict[item] > 3000, salary_dict)
    print(list(res))
    

    map -->映射 --> y = x+1

    # 首先将可迭代对象变成迭代器对象
    # res = next(迭代器对象),将res当作参数传给第一个参数的指定函数,然后将该函数的返回值作为map()方法的结果之一
    def function1(item):
        return item + 2
    
    
    res = map(function1,[1,2,3])
    print(res)
    print(list(res))
    

    sorted --> 排序

    
    # 首先将可迭代对象变成迭代器对象
    # res=next(迭代器对象),将res当作参数传给第一个参数指定的函数,然后该函数的返回值当作判断依据
    def function2(item):
        return salary_dict[item]
    
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
    }
    # res = sorted([2,3,4,5,1,5],key=function2,reverse=True)
    res = sorted(salary_dict,key=function2, reverse=True)
    print(list(res))
    
    
    
    def sorted(iter,key=None,reverse=None):
        iter,sort()
        
        if key:
            # key 是一个函数对象
            lt = []
            lt2 = []
            for i in iter:
                res = key(i)
                lt.append(res)
                lt2.append(i)
    		lt.sort()
            
            lt3 = []
            for i in lt:
                for j in lt2:
                    if j[1] == i:
                        lt3.append(j)
    
    		if reverse:
                lt3.reverse()
             return lt3
        
        if reverse:
            iter.reverse()
        return iter
    
    salary_list = list(salary_dict.items())
    print(salary_list)
    print(sorted(salary_list, key=lambda i: i[1],reverse=None))
    

    2.内置函数

    bytes

    解码字符

    res = bytes('中国',encoding='utf8')
    print(res)
    

    chr/ord

    chr()参考Ascall码表将数字转换成对应字符;ord()将字符转换成对应的数字

    print(chr(97))
    print(ord('a'))
    

    divmod

    分栏

    print(divmod(10,4))
    

    enumerate

    带有索引的迭代

    lt = [1,2,3]
    for i in range(len(lt)
                   print(i,lt[i])
                   print(tp)
                   
    for ind,val in enumerate(lt):
                   print(ind,val)
    

    eval

    把字符串翻译成数据类型

    s = '"abc"'
    print(type(eval(s)),eval(s))
    

    hash

    可变不可哈希

    print(hash(123123))
    

    了解

    abs

    绝对值

    print(abs(-1))
    

    all

    可迭代对象内的元素全部为True则为True

    print(all([1,2,3,4]))
    

    any

    可迭代对象中有一元素为真,则为真

    print(any([0,0, ]))
    

    bin/oct/hex

    二进制/八进制/十六进制转换

    print(bin(123))
    print(oct(123))
    print(hex(123))
    

    dir

    列出模块的所有方法

    import time
    
    print(dir(time))
    

    frozenset

    不可变化的集合,类似于元组

    s = frozenset({1,2,4})
    pritn(s)
    

    gloabals/locals

    查看全局名字;查看局部名字

    print(globals())  # 列出所有全局变量
    print('locals():',locals())
    
    def func():
        s = 's1'
        print(globals())  # 列出所有全局变量
        print('locals():',locals())  # 列出当前位置所有变量
        func()
    

    pow

    print(pow(3,2,3))
    

    round

    print(round(10.333))
    

    slice

    s = slice(1, 5, 2)  # 1start,5stop,2step
    lt = [1, 2, 3, 4, 5, 6, 7]
    print(lt[s])
    print(lt[1:5:2])
    

    sum

    print(sum(range(100)))
    

    __import()__

    import 'time'
    
    
    time = __import__('time')
    print(time.time())
    

    3.异常处理

    异常就是程序运行时发生错误的信号(在程序出现错误时,会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止

    1.语法错误

    语法错误根本过不了python解释器的语法检测,必须在程序执行前就改正

    # 语法错误示范一
    if
    
    # 语法错误示范二
    def test:
        pass
    
    # 语法错误示范三
    class Foo
        pass
    

    2.逻辑错误

    # TypeError:int类型不可迭代
    for i in 3:
        pass
    
    # ValueError
    num = input('>>:')  # 输入hello
    int(num)
    
    # NameError
    aaa
    
    # IndexError
    l = ['egon','aa']
    l[3]
    
    # AttributeError
    class Foo:pass
    Foo.x
    
    # ZeroDivisionError:无法完成计算
    res1 = 1/0
    res2 = 1+'str'
    

    异常的种类

    在python中不同的异常可以用不用的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误

    1.常用的异常

    • AttributeError试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

    • IOError输入/输出异常;基本上是无法打开的文件

    • ImportError 无法引入模块或包;基本上是路径问题或名称错误
    • IndentationError 语法错误(的子类) ;代码没有正确对齐
    • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    • KeyError 试图访问字典里不存在的键
    • KeyboardInterrupt Ctrl+C被按下
    • NameError 使用一个还未被赋予对象的变量
    • SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    • TypeError 传入对象类型与要求的不符合
    • UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
    • ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    2.其他异常

    • ArithmeticError
    • AssertionError
    • AttributeError
    • BaseException
    • BufferError
    • BytesWarning
    • DeprecationWarning
    • EnvironmentError
    • EOFError
    • Exception
    • FloatingPointError
    • FutureWarning
    • GeneratorExit
    • ImportError
    • ImportWarning
    • IndentationError
    • IndexError
    • IOError
    • KeyboardInterrupt
    • KeyError
    • LookupError
    • MemoryError
    • NameError
    • NotImplementedError
    • OSError
    • OverflowError
    • PendingDeprecationWarning
    • ReferenceError
    • RuntimeError
    • RuntimeWarning
    • StandardError
    • StopIteration
    • SyntaxError
    • SyntaxWarning
    • SystemError
    • SystemExit
    • TabError
    • TypeError
    • UnboundLocalError
    • UnicodeDecodeError
    • UnicodeEncodeError
    • UnicodeError
    • UnicodeTranslateError
    • UnicodeWarning
    • UserWarning
    • ValueError
    • Warning
    • ZeroDivisionError

    异常的处理

    为了保证程序的健壮性与容错性,即在遇到错误时系统不会崩溃,我们需要对异常进行处理

    1.提前预防

    如果发生错误的条件是可以预知的,我们需要用if进行处理:在错误发生之前进行预防

    AGE = 10
    while True:
        age = input('>>:').strip()
        if age.isdigit():  # 只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
            age = int(age)
            if age == AGE:
                print('you got it')
                break
    

    2.之后的预防

    如果发生错误的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理

    try:
        被检测代码块
    except 异常类型:
        try中一旦检测到异常,就执行这个位置的逻辑
    

    异常类只能用来处理指定的异常情况,如果非指定异常则无法处理.

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:  # 为捕获到异常,程序直接报错
        print(e)
    

    多分支

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    

    万能的异常Exception

    s1 = 'hello'
    try:
        int(s1)
    except Exception as e:
        print(e)
    

    异常的最终执行

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    # except Exception as e:
    # 	print(e)
    else:
        print('try内代码块没有异常则执行我')
    finally:
        print('无论是否异常,都会执行该模块,通常是进行清理工作')
    

    try...except总结

    1.把错误处理和真正的工作分开来

    2.代码更易组织,更清晰,复杂的工作任务更容易实现;

    3.毫无疑问,更安全了,不至于由于一些小的疏忽而是程序意外崩溃了

    抛出异常raise

    try:
        raise TypeError('抛出异常,错误类型')
    except Exception as e:
        print(e)
    
    

    断言assert

    assert 1 == 1
    
    try:
        assert 1 == 2
    except Exception as e:
        print(e)
    

    4.面向过程编程

    面条版--> 面向过程编程 --> 思想 -->面向对象编程

    思想没有好坏

    面向(代词-->使用) 过程 (流程-->步骤) 编程 (写代码,写文件)

    面向过程编程:类似于流水线,一步一步往下走

    优点:逻辑非常清晰

    缺点:上一步错了,下一步就跟着错

    为什么会报错

    逻辑--> 控制变量改变的方向出错了

    检查错误--> 打印变量的变化状态-->

    x = 10
    y = 20
    z = x + y
    print(1,z)  # 30
    
    z = z + 10
    print(2,z)  # 40
    
    z = z - 20
    print(z)
    

    debug

  • 相关阅读:
    [转]采样和滤波
    "我的电脑"和所有文件夹打不开的解决办法
    巨无霸“火星”CPU散热器亮相
    [转]规范化编程:ANSI和UNICODE的使用
    2006第三季度:10大最糟科技事件
    【掉下巴】如此公路
    Windows CE 初体验 幻灯
    Windows CE.NET Core OS 特性详解(二)最终用户应用程序
    基于PB的Windows CE模拟环境的配置及调试
    非阻塞I/O
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/11585732.html
Copyright © 2011-2022 走看看