s21day12 python笔记

一、函数中高级

1.1 函数可以做返回值

#示例:
def func():
    print(123)
def bar():
    return func

v = bar()
v()

1.2 闭包

  1. 概念:为函数创建一块区域并为其维护自己数据,以后执行方便调用
  2. 应用场景:
    • 装饰器
    • SQLAlchemy源码
#示例:
name = 'oldboy'
def bar(name):
    def inner():
        print(name)
    return inner
v1 = bar('alex') # { name=alex, inner }  # 闭包,为函数创建一块区域(内部变量供自己使用),为他以后执行提供数据。
v2 = bar('eric') # { name=eric, inner }
v1()
v2()
#练习题:
#第一题
name = 'alex'
def base():
    print(name)
def func():
    name = 'eric'
    base()
func() 

# 第二题
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():
    print(item)
for item in range(10):
    info.append(func)

info[0]()

#面试题
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.3 高阶函数

  1. 把函数当作参数传递
  2. 把函数当作返回值
  3. 注意:对函数进行赋值

二、 内置函数补充

2.1 数学相关补充

  • pow():指数

    v = pow(2,3)      #相当于2**3
    print(v)         # 8
  • round():保留几位小数,默认保留整数,还会四舍五入

    v = round(1.127,2)       #第二个数代表保留几位小数,默认是None
    print(v)         # 1.13  四舍五入

2.2 编码相关

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

  • ord():根据字符在 unicode 编码中找到其对应的十进制

    #应用:生成随机验证码
    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)

2.3 内置函数高级

  • map(函数,可迭代对象):一起执行

    • 循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回
    #示例:
    v1 = [11,22,33,44]
    result = map(lambda x:x+100,v1)
    print(list(result)) 
  • filter(函数,可迭代对象):进行筛选

    #示例:
    v1 = [11,22,33,'asd',44,'xf']
    
    def func(x):
        if type(x) == int:
            return True
        return False
    result = filter(func,v1)
    print(list(result))
    
    # 用lambda表达式:
    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)
    
    # 用lambda表达式:
    result = functools.reduce(lambda x,y:x+y,v1)
    print(result)

三、模块

3.1 random:随机数模块

import random    # 导入一个模块
v = random.randint(起始,终止)    # 得到一个随机数

#示例:生成随机验证码
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)

3.2 hashlib:加密模块

# 将指定的 “字符串” 进行 加密
import hashlib     # 导入一个模块

def get_md5(data):          # md5 加密函数
    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("sidrsdxff123ad".encode('utf-8'))            # 加盐
    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):                   # md5 加密函数
    obj = hashlib.md5("12:;idrsicxwersdfsaersdfs123ad".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('登陆失败')

3.3 getpass:只能在终端运行

import getpass        # 导入一个模块

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

s21day12 python笔记的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

随机推荐

  1. D1图论最短路专题

    第一题:poj3660 其实是Floyed算法的拓展:Floyd-Wareshall.初始时,若两头牛关系确定则fij = 1. 对于一头牛若确定的关系=n-1,这说明这头牛的排名是确定的. 通过寻找 ...

  2. 剑指offer(43)左旋转字符串

    题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...

  3. Codeforces 955F Heaps - 动态规划

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一棵以1为根的树,定义$dp_{k}(u)$表示在$u$的子树内存在的深度最大的满k叉树的深度,求$\sum_{u = 1}^{n}\su ...

  4. Windows Update Medic Service 拒绝访问

    修改注册表:HEKY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc 中Start的值改为4.

  5. JavaScript-DOM(1)

    DOM简介 DOM 节点分类 DOM 节点层级关系 1.文档节点 1.父节点 2.标签(元素)节点 2.子节点 3.属性节点 3.兄弟节点 4.注释节点 4.根节点 5.文本节点 DOM节点分类 DO ...

  6. 伪分布式安装core-site.xml和hdfs-site.xml配置文件

    hadoop的伪分布式安装流程如下所示: 其中core-site.xml和hdfs-site.xml是两个很重要的配置文件. core-site.xml <configuration> & ...

  7. 4th,Python三级菜单

    1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 data = { '北京': ...

  8. Jade入门学习笔记

    jade是超高性能的node JavaScript模板引擎,有着非常强大的API和大量杰出的特性.它主要针对node的服务端.由于商标的原因,改为Pug,哈巴狗.Pug有它本身的缺点--可移植性差,调 ...

  9. GO | KEGG的注释是怎么来的?

    但凡是做过基因表达数据分析的(芯片.RNA-seq,scRNA-seq),肯定是跑过基因集功能注释和通路富集的,因为它是研究未知基因集的利器. 但跑过之后老板肯定会给反馈,通常得到的注释都是没有太多意 ...

  10. Python自学:第三章 使用列表中的各个值

    bicycles = ['trek','cannondale','redline','specialized'] message = "My first bicycle was a &quo ...