刘沙河 刘沙河
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希

花开半夏,半夏花开
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希
  • Python基础

    • 运算符-while循环
    • 数据类型
    • 知识补充&数据类型列表,元祖
    • 字典
    • 数据类型-集合
    • 深浅拷贝&文件操作
    • 文件操作Ⅱ
    • 函数Ⅰ(基础)
    • 函数Ⅱ(参数&作用域)
    • 函数Ⅲ(内置函数&lambda表达式)
    • 函数Ⅳ(闭包&内置模块)
      • 1.内置函数(补充)
      • 2.闭包
      • 3.高阶函数
        • 小结
      • 4.内置模块(.py文件)
        • 1.将指定的字符串加密:
        • 2.随机验证码模块应用:
        • 3.密码不显示(只能在终端运行)
    • 装饰器&推导式
    • 装饰器(二)&模块(一)
    • 模块(二)
    • 模块(总)
    • 迭代器&生成器
    • 面向对象(一)
    • 面向对象(二)类成员&成员修饰符
    • 面向对象(三)特殊方法
    • 面向对象(四) 约束&反射
    • 正则表达式
    • re模块
  • Python进阶

  • Python并发编程

  • Django

  • Flask

  • 爬虫

  • Python
  • Python基础
bigox
2022-06-16
1.3k
5.7m
目录
1.内置函数(补充)
2.闭包
3.高阶函数
小结
4.内置模块(.py文件)
1.将指定的字符串加密:
2.随机验证码模块应用:
3.密码不显示(只能在终端运行)

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

  • 企业面试题
- 常用的内置函数有哪些?
- filter/map/reduce是什么意思?
- 什么是匿名函数?
1
2
3

# 1.内置函数(补充)

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

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

    item = 10
    def func():
        item = 2
        def inner():
            print(item)
        for item in range(10):
            pass 
        inner()
    func()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 函数销毁条件:

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

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

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

    num = ord('中')
    
    1

# 2.闭包

  • 应用场景:

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

  • 函数可以作为参数

  • 函数可以作为返回值

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

    # 基本格式
    def func(name):
        def inner():
            print(name)
    	return inner 
    
    v1 = func('alex')
    v1()
    v2 = func('eric')
    v2()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #练习
    # 第一题
    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()
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    ########################闭包企业面试题#######################

    # 题1 
    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]()
    """
    闭包过程中 每一次遍历执行func(item), 系统会将func(item)返回值 inner压入栈,并将item的值一并放入(值传递), info[0]()调用的时候将inner从栈中取出执行,inner中的指向不同的内存地址
    """
    
    
    # 题2
    def fun():
        temp=[lambda x:x*i for i in range(4)]
        return temp
    for every in fun():
        print(every(2))
    
    """
    在列表生成式中匿名函数lambda 每一次调用都是将i的引用压入栈(引用传递),在列表生成式中最后一次更改i的值时, temp中所有的i都指向同一块内存地址, 所以在遍历temp时执行结果都是一样的
    """
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

​

# 3.高阶函数

  • 对函数进行赋值

  • 函数当做返回值

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

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

      v1 = [11,22,33,44]
      result = map(lambda x:x+100,v1)
      print(list(result)) # 特殊
      
      1
      2
      3
    • 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))
      
      1
      2
      3
      4
      5
    • 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)
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

# 小结

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

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

func() # {name=eric, }
1
2
3
4
5
6
7
8
9
10

# 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)
1
2
3
4
5
6
7
8
  • 加盐

    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)
    
    1
    2
    3
    4
    5
    6
    7
    8

应用:

#账户密码加密函数:
import hashlib
USER_LIST = []
def get_md5(data):
    obj = hashlib.md5("gfdsjdxff123ad".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('登陆失败')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 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)
1
2
3
4
5
6
7
8
9
10
import random # 导入一个模块 
v = random.randint(起始,终止) # 得到一个随机数
1
2

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

import getpass
pwd = getpass.getpass('请输入密码:')
if pwd == '123':
    print('输入正确')
1
2
3
4
#Python#
上次更新: 2023/04/16, 18:35:33
函数Ⅲ(内置函数&lambda表达式)
装饰器&推导式

← 函数Ⅲ(内置函数&lambda表达式) 装饰器&推导式→

最近更新
01
go与http代理
05-24
02
自制申威架构k8s-reloader
12-06
03
Docker Buildx 教程
12-01
更多文章>

Gitalking ...

Theme by Vdoing | Copyright © 2020-2025 小刘扎扎 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式