python学习day12 函数Ⅳ (闭包&内置模块)

函数Ⅳ (闭包&内置模块)

1.内置函数(补充)

  • lambda表达式也叫匿名函数.

  • 函数与函数之间的数据互不影响,每次运行函数都会开一个辟新的内存.

    item = 10
    def func():
        item = 2
        def inner():
            print(item)
        for item in range(10):
            pass 
        inner()
    func()
  • 函数销毁条件:

    • 函数运行完毕
    • 函数内部元素没有被其他使用
  • 可迭代数据类型:可被for循环的类型

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

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

    num = ord('中')

2.闭包

  • 应用场景:

    • 装饰器/SQLAIchemy源码
  • 函数可以作为变量

  • 函数可以作为参数

  • 函数可以作为返回值

    def bar():
        def inner():
            print(123)
        return inner
    v = bar()
    v()
  • 闭包:为一个函数创建一块区域(内部变量供自己使用),为他以后执行提供数据

    # 基本格式
    def func(name):
        def inner():
            print(name)
      return inner 
    
    v1 = func('alex')
    v1()
    v2 = func('eric')
    v2()
    #练习
    # 第一题
    name = 'alex'
    def base():
        print(name)
    
    def func():
      name = 'eric'
        base()
    
    func() # {name=eric, }
    
    
    # 第二题
    name = 'alex'
    
    def func():
      name = 'eric'
        def base():
          print(name)
        base()
    func()
    
    # 第三题
    name = 'alex'
    
    def func():
      name = 'eric'
        def base():
          print(name)
        return base 
    base = func()
    base()
    

    闭包企业面试题

    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]()

3.高阶函数

  • 对函数进行赋值

  • 函数当做返回值

  • 高级一点的内置函数(了解,懂什么意思)

    • map(函数,可迭代对象),映射函数,循环每个元素,然后让每个元素执行函数,将每个函数执行的结果保存到新的列表,并返回.

      v1 = [11,22,33,44]
      result = map(lambda x:x+100,v1)
      print(list(result)) # 特殊
      
    • fifter(函数,可迭代对象),筛选过滤,循环每个元素然后执行函数,将每个函数执行的结果筛选保存到新的列表并返回.

      result = filter(lambda x: True if type(x) == int else False ,v1)
      print(list(result))
      
      result = filter(lambda x: type(x) == int ,v1)
      print(list(result))
      
    • reduce(函数,可迭代对象),循环每个元素,然后执行函数,将每个函数执行的结果删选保存到新的列表并返回.

      import functools
      v1 = ['wo','hao','e']
      
      def func(x,y):
          return x+y
      result = functools.reduce(func,v1) 
      print(result)
      
      result = functools.reduce(lambda x,y:x+y,v1)
      print(result)
      

小结

  • 函数执行流程
  • 闭包:为一个函数创建一块区域(内部变量供自己使用),为他以后执行提供数据
# 第一题
name = 'alex'
def base():
    print(name)

def func():
    name = 'eric'
    base()

func() # {name=eric, }

4.内置模块(.py文件)

1.将指定的字符串加密:

  • 将指定的字符串加密md5加密
import hashlib
def get_md5(data):
    obj = hashlib.md5()
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()
    return result
val = get_md5('123')
print(val)
  • 加盐

    import hashlib
    def get_md5(data):
        obj = hashlib.md5("sxff123ad".encode('utf-8'))#md5(加入任意字符串增加密码复杂度)
        obj.update(data.encode('utf-8'))
        result = obj.hexdigest()
        return result
    val = get_md5('123')
    print(val)
    

应用:

#账户密码加密函数:
import hashlib
USER_LIST = []
def get_md5(data):
    obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()
    return result
#用户注册:
def register():
    print('**************用户注册**************')
    while True:
        user = input('请输入用户名:')
        if user == 'N':
            return
        pwd = input('请输入密码:')
        temp = {'username':user,'password':get_md5(pwd)}
        USER_LIST.append(temp)
#用户登录
def login():
    print('**************用户登陆**************')
    user = input('请输入用户名:')
    pwd = input('请输入密码:')
    for item in USER_LIST:
        #校验新输入密码加密后与用户注册加密是否相同
        if item['username'] == user and item['password'] == get_md5(pwd):
            return True
register()
result = login()
if result:
    print('登陆成功')
else:
    print('登陆失败')

2.随机验证码模块应用:

  • chr() 十进制数字转换成unicode编码中的对应字符串
  • ord() 根据字符在unicode编码中找到其对应的十进制
  • random.randit(最小值,最大值) 生产随机数
#生产随机验证码
import random
def get_random_code(length=6):
    data = []
    for i in range(length):
        v = random.randint(65,90)   #random.randit(最小值,最大值) 生产随机数
        data.append(chr(v))
    return  ''.join(data)
code = get_random_code()
print(code)
import random # 导入一个模块 
v = random.randint(起始,终止) # 得到一个随机数

3.密码不显示(只能在终端运行)

import getpass
pwd = getpass.getpass('请输入密码:')
if pwd == '123':
    print('输入正确')

猜你喜欢

转载自www.cnblogs.com/bigox/p/10698773.html