zoukankan      html  css  js  c++  java
  • 匿名函数, 内置函数, 异常处理

    匿名函数

    引入

    def 函数名(): -->有名函数

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

    匿名函数语法需要关键字lambda

    lambda 参数:返回值
    1.没有名字,只有参数和返回值,参数返回值都可以有多个
    2.没有代码块,代码块可以集成在返回值中,但是只能对参数中的变量进行操作
    3.强行调用也可以,两种调用方式

    #查看函数对象
    print(lambda x:x**2+x)
    #调用方式一
    print((lambda x:x**2+x)(4))
    #调用方式二(变成有名函数调用)
    f = lambda x:x**2+x
    print(f(4))
    

    匿名函数与max()方法联用

    dic = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
        'z': 1000
    }
    print(max(dic))
    def f(i):
        return dic[i]
    print(max(dic))
    res = max(dic,key=f)
    print(res)
    #key = dic作用
    #1.循环遍历dic,会取到所有的key值
    #2.然后把所有的key值一次丢入func,返回薪资
    #3.通过返回的薪资排序,得到最大值薪资对应的key
    res2 = max(dic, key=lambda name:dic[name])
    

    匿名函数与filter()方法联用---filter---过滤

    for i in res:
        print(i)
    def f2(item):
        if item < 2:
            return True
        else:
            return False
    print(list(filter(f2,[1,2,3,0])))
    print(list(filter(lambda item:item**item<20,[1,2,3,4])))
    
    #筛选工作小于5000的人的名字
    dic = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
        'z': 1000
    }
    for i in filter(lambda name:dic[name]<5000,dic):
        print(i)
    

    匿名函数与map()方法联用---map---映射

    dic = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
        'z': 1000
    }
    def f3(arg):
        return arg**5
    for i in map(f3,[1,2,3]):
        print(i)
    print(list(map(lambda m,n:m**n,[1,2,3,5],(6,7,8,9))))
    

    匿名函数与sorted()

    lt=['asdg','sagjoij','weoiwjfhfpif']
    print(sorted(lt,key=lambda i:i[1],reverse=True))
    print(sorted(dic,key=lambda i:dic[i]))
    

    内置函数

    python解释器内置函数

    print(bytes('中国',encoding='utf8'))  #用'utf8'将'中国'编码成二进制串
    
    print(chr(97))  #将二进制解码成字符
    
    print(ord('b')) #将字符编码成二进制
    
    print(divmod(10,3)) #两数相除后分别取余取整,并将结果存放在元组中
    
    print(enumerate(['a','b','c'])) #####非常重要;返回生成器对象;以元组形式将元素索引和元素存放在生成器对象中
    for i in enumerate(['a','b','c']):
        print(i)
    
    t = '[1,2,3]'
    print(type(eval(t)),eval(t))    ###重要,把字符串引号去掉,留下什么类型就是什么类型
    print(eval('"a"'))
    print(eval("'b'"))
    
    # print(hash([1,2]))    #可哈希(不可变数据类型)返回原值,不可哈希报错
    
    print(abs(-1))  #求绝对值
    
    print(all([1,2,3])) #参数为i则为iterable(可迭代对象)
    print(all([1,2,0])) #可迭代对象内元素全部为True则为True,否则为False
    
    print(any([1,0]))   #可迭代对象内有任何一个元素为True则为True,否则为False
    
    print(bin(123)) #转换为二进制
    print(oct(123)) #转换为8进制
    print(hex(123)) #转换为16进制
    
    # import time
    # print(dir(time))    #以列表形式列出模块所有方法
    
    sets = frozenset({4,5,6})   #不可变化的集合,类似于集合
    # sets.add()  #不含add方法
    
    print(globals())    #以字典形式列出所有全局变量,放哪都是全局
    def f():
        x = 1
        print(locals()) #以字典形式列出当前位置所有变量,放全局则为全局,放局部则为局部
    f()
    
    print(pow(2,4)) #幂运算
    
    print(round(3.7))   #四舍五入
    
    cut = slice(1,5,2)  #1==start,5==stop,2==step
    lt = [1,2,3,4,5,6,7]
    print(lt[cut])
    
    print(sum([1,2,3,4,5])) #求和
    
    a = __import__('time')  #通过字符串导入模块
    print(a.time())  #通过字符串导入模块
    

    异常处理

    num = input('请输入数字:')
    dic = {'a':1}
    try:
        print(dic['b'])
        1/int(num)
    except KeyError:
        print('非法输入key')
    except ZeroDivisionError:
        print('0不能做分母')
    # 报错之后不运行下面代码只捕捉一个错误
    
    try:
        print(dic['b'])
        1/int(num)
    except Exception as e:
        print(e)
        print('蔡启龙')
    #也只能捕捉一个错误信息,为第一个出错点的错误信息
    print('错误后面的代码')
    
    #异常捕捉只能捕捉逻辑错误
    
    fr = open('test14.py','r')
    try:
        #文件中途报错
        1/0
        fr.close()
    except Exception as e:
        print(e)
    finally:    #无论报不报错,都执行织一行代码
        print('报错行下面代码也执行')
        # print(x)
    

    面向过程编程

    IPO

    I input 输入(定义的变量) P Process 过程(控制变量的改变) O output(新的变量) 输出编程 == 面向过程编程

    原材料 -》 烧成液体 -》倒入模具 -》 冷却 -》敲打 -》冷却 -》输出一个青铜器

    类似于流水线,一步一步往下走,一个步骤就是一个函数

    优缺点

    优点:逻辑非常清晰

    缺点:扩展性差,下一阶段的输入与上一阶段的输出有关

    debug原理

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

    检查错误-->不断打印每一步之前和之后变量的变化状态

  • 相关阅读:
    怎样打印日志
    log4j(一)
    idea没有subversion问题
    tomcat启动报异常(一)
    HashSet
    spring容器初始化bean和销毁bean之前进行一些操作的定义方法
    MyBatis中$和#的区别
    基本数据类型与引用数据类型
    Access restriction: The method 'CharacterEncoder.encode(byte[])' is not API...
    Object源码
  • 原文地址:https://www.cnblogs.com/-406454833/p/11595739.html
Copyright © 2011-2022 走看看