python基础知识(day11)

day11

今日内容

  • 函数中高级(闭包/高阶函数)

  • 内置函数

  • 内置模块(.py文件)

内容回顾

  • 函数的基础概念

    • 函数基本结构

    • 参数

      • 定义函数时
        • def func(a1,a2):pass
        • def func(a1,a2=None):pass
        • def func(*args,**kwargs):pass
      • 调用函数
        • 位置参数在前,关键字参数在后
    • 函数小高级

      • 函数可以做变量
      • 函数可以做参数
      • Python中以函数为作用域
      • lambda表达式(匿名函数)
      • 内置函数

内容详细

  1. 函数中高级

    1.1 函数可以做返回值

    函数是由谁创建的,作用域就从他那开始

    # 函数当返回值
    def func():
        print(123)
    def bar():
        return func
    v = bar()
    v()
    print(v)
    # 123
    <function func at 0x00000273959B1EA0>
    
    
    name = 'llk'
    def bar():
        name = 'hkq'
        def inner():
            print(name)
        return inner
    v = bar()
    v()
    print(v)
    # hkq 
    <function bar.<locals>.inner at 0x0000026B459CD488>
    
    name = 'llk'
    def bar(name):
        def inner():
            print(name)
        return inner
    v1 = bar('hkq') # {name = hkq,inner} # 闭包,为函数创建一块区域(内部变量供自己使用),提供数据
    v2 = bar('kq') # {name = kq,inner}
    v1()
    v2()
    print(v1)
    print(v2)
    '''
    hkq
    kq
    <function bar.<locals>.inner at 0x000001368AEAD488>
    <function bar.<locals>.inner at 0x000001368AEAD510>
    '''
    
    # 练习1
    name = 'llk'
    def base():
        print(name)
    def func():
        name = 'hkq'
        base()
    func()
    
    # llk
    
    # 闭包
    info = []
    def func(i):
        def inner():
            print(i)
        return inner
    for item in range(10):
        info.append(func(item))
    info[0]()
    info[1]()
    info[4]()
    

1.2 闭包

def func(name):
    def inner():
        print(name)
    return inner
v1 = func('llk')
v1()
v2 = func('hkq')
v2()

1.3 高阶函数

  • 对函数进行赋值
  • 把函数当作参数传递
  • 把函数当作返回值

2.内置函数

  • 编码相关

    • chr,将十进制数字转换成Unicode编码中对应的字符串

      v = chr(65)
      print(v)
      # A 
      
    • ord,根据字符在unicode编码中找到其对应的十进制

      a = ord('A')
      print(a)
      # 65
      
      # 生成随机验证码
      import random
      def get_random_code(length=6):
          data = []
          for i in range(length):
              v = random.randint(65,90)
              data.append(chr(v))
          return ''.join(data)
      code = get_random_code()
      print(code)
      
      • 导入模块

        import random
        v = random.randint(65,90)
        
      • map

        循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回

        # map函数
        v1 = [11,22,33]
        # 第一个参数必须是一个函数
        # 第二个参数必须是可迭代的类型(可被for循环)
        def func(arg):
            return arg + 100
        result = map(func,v1) # 将函数的返回值添加到空列表[]
        print(list(result))
        
        result = map(lambda  x :x + 100,v1)
        print(list(result))
        
    • filter

      过滤出想要的数据

      # filter()函数
      v2 = [11,22,'A','llk']
      def func(x):
          if type(x) == int:
              return True
          return False
      result = filter(func,v2)
      print(list(result))
      # [11,22]
      
    • reduce

      通过函数自定义规则,得到一个结果

      # reduce()函数
      import  functools
      v3 = [11,22,33]
      def func(x,y):
         return x+y
      result = functools.reduce(func,v3)
      print(result)
      # 66
      
  1. 模块

    将指定的字符串进行加密

    import hashlib
    
    def get_md5(data):
        obj = hashlib.md5()
        obj.update(data.encode('utf-8'))
        result = obj.hexdigest()
        return result
    va = get_md5('123')
    print(va)
    

    加盐

    import hashlib
    
    def get_md5(data):
        obj = hashlib.md5('skdsdhsdh'.encode('utf-8'))
        obj.update(data.encode('utf-8'))
        result = obj.hexdigest()
        return result
    va = get_md5('123')
    print(va)
    

    密码不显示

    import  getpass
    pwd = getpass.getpass('请输入密码: ')
    if pwd == '123':
        print('输入正确!')
    
posted @ 2020-03-26 01:48  RaytheonThor  阅读(58)  评论(0编辑  收藏  举报