• forth day ---内置函数、匿名函数


    一、内置函数:  
    画思维导图
    迭代器中:range next iter
    locals() 本地的命名空间
    globals() 全局的命名空间
    # def func():
    #     a = 1
    #     b = 2
    #     print(locals())
    #     print(globals())
    # 全局命名空间中的名字
    # print(locals())   # 本地的命名空间
    # print(globals())  # 全局的命名空间
    # func()
    View Code

    input
    print
    99乘法表 %2s 输入一个字符也占两个位置
    sep以什么分割 end 不换行
    #99乘法表
    # for i in range(1,10):
    #     for j in range(1,i+1):
    #         print('%s * %s = %2s' %(i,j,i*j),end='  ')
    #     print()  #注意位置
    99乘法表

    进度条例子 :
    flush=True 立即打印到屏幕上
    相当于seek0 只适合于越写越长的情况
    1 # import time
    2 # for i in range(0,101,2):  #0,2,4,6,8
    3 #      time.sleep(0.1)
    4 #      char_num = i//2      #打印多少个'*'     4
    5 #      if i == 100:
    6 #          per_str = '
    %s%% : %s
    ' % (i, '*' * char_num)
    7 #      else:
    8 #         per_str =  '
    %s%% : %s'%(i,'*'*char_num)
    9 #      print(per_str,end='',flush=True)   # 0.01
    进度条
           print() 写文件
          # python 能直接操作文件 —————— 需要发起系统调用 才能操作文件
    hash
    字典底层的存储和set集合的去重 都相关---可了解
    # print(hash('1291748917'))
    # print(hash('1291748917'))
    
    #对可hash的数据类型进行hash之后会得到一个数字
    # 在一次程序的执行过程中 对相同的可哈希变量 哈希之后的结果永远相同的
    # 在一次程序的执行过程中 对不相同的可哈希变量 哈希之后的结果几乎总是不相同的
    # hash 字典底层的存储 和set 集合的去重机制 都相关
    View Code

    id()

    import
    help---帮助
    callable 可调用 返回True False
    # callable 可调用
    # def func():pass
    # a = 1
    # print(callable(func))       #True
    # print(callable(a))        #False
    callable 可调用

    dir 查看内置函数的属性!!学面向对象常用
    查看一个变量所拥有的所有名字

    bin(10) 0b1010
    oct(10) 0o12
    hex(10) 0xa

    与数字有关:
    abs() 绝对值 abs(-4) 4
    divmod商余函数----分页用
    print(divmod(7,3)) #返回一个元祖(2,1)
    round(3.1415926,4) #默认取整,小数精确,会四舍五入
    pow 次方
    pow(2,3) 2**3 8
    pow(2,3,5) (2**3)%5 3

    sum求和 接收可迭代对象 数字要加[]
    sum([1,2],20) 从20开始求和
    sum(range(1,6))
    print(sum([1,2,3,4,5]))
    print(sum([1,2,3,4,5],0))
    print(sum([1,2,3,4,5],20))
    print(sum(range(1,6)))
    sum
        
    min 最小值 3个例子
    -2 !!先取key之后,根据返回值排序,再返回原来那个数 面试!
    -2 取第一个 带key的是重点!
    1 # print(min([1,2,3,4,5]))                   #1
    2 # print(min(1,2,3,4))                        #1
    3 # print(min(1,-2,3,-4))                     #-4
    4 # print(min(1,-2,3,-4,key=abs))       #1
    5 # def func(num):
    6 #     return num%2
    7 # print(min(-2,3,-4,key=func))        #-2
    min
    max 最大

    reversed
    reverse在原列表上修改
    reversed 原列表不变,生成一个迭代器,可用next调用
     1 # ret = [1,2,3,4,5]
     2 # ret.reverse()
     3 # print(ret)
     4 
     5 # ret1 = reversed(ret)
     6 # ret2 = reversed((1,2,3,4,5))
     7 # print(ret)
     8 # print(list(ret1))
     9 # print(list(ret2))
    10 
    11 结果:
    12 [5, 4, 3, 2, 1]
    13 [5, 4, 3, 2, 1]
    14 [1, 2, 3, 4, 5]
    15 [5, 4, 3, 2, 1]
    reversed
    format 与格式化相关的方法
    # print(format('test', '<20'))
    # print(format('test', '>20'))
    # print(format('test', '^20'))
    
    结果:
    test                
                    test
            test        
    View Code

    ord('a') 97
    小写的a 97+26 大写的A-Z 65+26
    chr(97) a
    repr 显示数据的类型!!常用
    # print(1)
    # print('1')
    # print(repr(1))
    # print(repr('1'))
    
    
    结果:
    1
    1
    1
    '1'
    repr

    enumerate() 接收容器类型 列表、元祖
    打印索引与值-----给商品加序号
    enumerate(li,1) 以1开始
    枚举函数 一个容器类型,一个序号起始值 返回值:可迭代的
     1 # l = ['苹果','香蕉']
     2 # # ret = enumerate(l,1)   # 枚举  接收两个参数:一个容器类型,一个序号起始值   返回值:可迭代的
     3 # # print(ret)
     4 # for num,item in enumerate(l,1):
     5 #     print(num,item)
     6 
     7 
     8 结果:
     9 <enumerate object at 0x0000000002167708>
    10 1 苹果
    11 2 香蕉
    enumerate
       
    函数记参数及返回值!

    all 主要有一个为假,就为False 不常用
    any 主要有一个为真,就为True 不常用
     1 # print(all([1,2,3,4,5]))
     2 # print(all([0,1,2,3,4,5]))
     3 # print(all(['a',1,2,3,4,5]))
     4 # print(all(['',1,2,3,4,5]))
     5 # print(any([0,None,False]))
     6 
     7 
     8 结果:
     9 True
    10 False
    11 True
    12 False
    13 False
    View Code
    zip  面试题!矩阵!拉链方法
    按最短的拉起来 返回可迭代的
    1 # ret = zip([1,2,3,4,5],('a','b','c','d'),(4,5))   #拉链方法
    2 # print(ret)
    3 # for i in ret:
    4 #     print(i)
    5 
    6 结果:
    7 (1, 'a', 4)
    8 (2, 'b', 5)
    zip

    内置函数无视频,电脑卡死

    filter 常考
    filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,
    filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

    例子 返回:可迭代的
    练习开平方根!
     1 lst =  [1, 4, 6, 7, 9, 12, 17]
     2 # def func(num):
     3 #     if num % 2 == 0:return True
     4 # filter(func,lst)
     5 # for i in filter(func,lst):
     6 #     print(i)
     7 
     8 注释的相当于下面三行的功能
     9 g = (i for i in lst if i%2 == 0)
    10 for i in g :
    11     print(i)
    filter
    1 l = ['test', None, '', 'str', '  ', 'END']
    2 def func(item):
    3     if item and item.strip():return True
    4 for i in filter(func,l):
    5     print(i)
    filter去除空

    map 常考 返回可迭代的

    Python中的map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。
    map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
    例子 书写
     1 # print([i**2 for i in range(10)])
     2 
     3 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
     4 
     5 # def func(num):
     6 #     return num ** 2
     7 # for i in map(func,range(10)):print(i)
     8 
     9 结果:
    10 0
    11 1
    12 4
    13 9
    14 16
    15 25
    16 36
    17 49
    18 64
    19 81
    map  
    sorted
        
    补充列表中sort排序:加key
    sorted不会改成原有列表,要赋值新列表

    长度例子
     1 # 排序功能
     2 l = [1,-4,-2,3,-5,6,5]
     3 l.sort(key=abs)
     4 print(l)
     5 l = [1,-4,-2,3,-5,6,5]
     6 new_l = sorted(l,key=abs,reverse=True)
     7 print(new_l)
     8 
     9 l = [[1,2],[3,4,5,6],(7,),'123']
    10 print(sorted(l,key=len))
    11 
    12 
    13 结果;
    14 [1, -2, 3, -4, -5, 5, 6]
    15 [6, -5, 5, -4, 3, -2, 1]
    16 [(7,), [1, 2], '123', [3, 4, 5, 6]]
    sorted
    eval()  执行字符串中代码,有返回值  慎用
    eval('print(123)') 可以执行
    exec() 执行字符串中代码,无返回值 慎用
    例子
     1 eval('print(123)')
     2 exec('print(123)')
     3 print(eval('1+2-3*20/(2+3)'))
     4 print(exec('1+2-3*20/(2+3)'))
     5 
     6 结果:
     7 123
     8 123
     9 -9.0
    10 None
    View Code

    读内置函数的博客
    https://www.processon.com/view/link/5adc6062e4b04721d63171eb
    3218
    首先掌握标红、标黄的;;可以看老师内置函数的博客,自己去分类
    标红的不会,无法写代码
    标黄的 能够节省你的代码,面试会问到
    最重要的:min max sorted filter map 面试明星知识点
    你经常不见的,没被说重点的,就不用了解了

    二、匿名函数

    函数写法:。。。
    匿名函数:为了解决那些功能很简单的需求而设计的一句话函数
    
    函数名 = lambda 参数 :返回值
    
    #参数可以有多个,用逗号隔开
    #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
    #返回值和正常的函数一样可以是任意数据类型
    

      

     1 # lambda表达式
     2 def add(a,b):
     3     return a+b
     4 print(add(1,3))
     5 
     6 add = lambda a,b : a+b
     7 print(add(1,2))
     8 
     9 
    10 
    11 结果:
    12 4
    13 3
    初识

    lambda表达式
    add=lambda a,b:a+b
    print(add(1,2))

    平方、min练习写成lambda
     1 print([i**2 for i in range(10)])
     2 
     3 
     4 # def func(num):
     5 #     return num ** 2
     6 # for i in map(func,range(10)):print(i)
     7 
     8 
     9 
    10 for i in map(lambda num : num ** 2 ,range(10)):print(i)
    10以内数平方的三种写法
    1 def func(num):
    2     return num%2
    3 print(min(-2,3,-4,key=func))
    4 
    5 
    6 相当于
    7 print(min(-2,3,-4,key=lambda num:num%2))
    最小值的lambda写法

    面试题:
    print(x) 24
    1 # d = lambda p:p*2
    2 # t = lambda p:p*3
    3 # x = 2
    4 # x = d(x)   # x = 4
    5 # x = t(x)   # x = 12
    6 # x = d(x)
    7 # print(x)
    11
    zip
    # 现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]
    
    
    # def func(t):
    #     return {t[0]:t[1]}
    # ret = map(func,zip((('a'),('b')),(('c'),('d'))))
    # print(list(ret))
    
    或
    # ret = map(lambda t:{t[0]:t[1]},zip((('a'),('b')),(('c'),('d'))))
    # print(list(ret))
    22
    []--()
     1 # 3.以下代码的输出是什么?请给出答案并解释。
     2 def multipliers():
     3     return [lambda x:i*x for i in range(4)]
     4 print([m(2) for m in multipliers()])
     5 
     6 
     7 # def multipliers():
     8 #     lst = []
     9 #     i = 0
    10 #     lst.append(lambda x:i*x)
    11 #     i = 1
    12 #     lst.append(lambda x:i*x)
    13 #     i = 2
    14 #     lst.append(lambda x:i*x)
    15 #     i = 3
    16 #     lst.append(lambda x:i*x)
    17 #     # lst = [lambda x:3*2,lambda x:i*x,lambda x:i*x,lambda x:i*x]
    18 #     return lst
    19 # print([m(2) for m in multipliers()])
    20 结果:
    21 [6, 6, 6, 6]
    22 
    23 
    24 # 请修改multipliers的定义来产生期望的结果。
    25 
    26 # def multipliers():
    27 #     return (lambda x:i*x for i in range(4))
    28 g = (lambda x:i*x for i in range(4))
    29 # print([m(2) for m in g])
    30 
    31 结果:
    32 [0, 2, 4, 6]
    33
    自己整理笔记(基础数据类型、文件操作、函数)


    三、递归函数
    error 998
    可以修改最大递归深度 import sys
    加if
    递归就是自己调用自己,有一个停止的条件
    往下走 递 往上走 归
     1 # def func():
     2 #     print(1)
     3 #     func()
     4 #
     5 # func()    # 997 /998
     6 
     7 # import sys
     8 # def foo(n):
     9 #     print(n)
    10 #     n += 1
    11 #     foo(n)
    12 # foo(1)
    初识
     1 # 6!
     2 # print(6*5*4*3*2*1)
     3 def fn(n):
     4     if n == 1:return 1
     5     return n*fn(n-1)
     6 print(fn(6))
     7 
     8 # 递归 就是自己调用自己
     9 # 递归需要有一个停止的条件
    10 # def fn(6):
    11 #     if 6 == 1:return 1
    12 #     return 6*fn(5)
    13 # print(fn(6))
    14 #
    15 # def fn(5):
    16 #     return 5*fn(4)
    17 #
    18 # def fn(4):
    19 #     return 4*fn(3)
    20 #
    21 # def fn(3):
    22 #     return 3*fn(2)
    23 #
    24 # def fn(2):
    25 #     return 2*fn(1)
    26 #
    27 # def fn(1):
    28 #     return 1
    6!例子
  • 相关阅读:
    【GoLand】分享项目到Github平台
    【Git】实用教程
    【Go】Mac系统下安装GoLand 及 环境配置
    CF 901C Bipartite Segments
    CF 811E Vladik and Entertaining Flags
    Luogu P6300 悔改
    Luogu P3943 星空
    CSP2020 | T4
    NOIP2017 | D2T3
    Luogu P6852 Mex
  • 原文地址:https://www.cnblogs.com/lijie123/p/8922252.html
Copyright © 2020-2023  润新知