No.12函数(四)

时间:2020-03-19 09:06:22   收藏:0   阅读:41

No.12

今日概要

内容回顾和补充

1.回顾

2.补充

  1. 数据类型中的方法到底有没有返回值?

    • 无返回值

      v = [11,22,33]
      v.append(66) #无返回值
    • 仅有返回值

      v = 'alex'
      result = v.split('l')
      
      v = {'k1':'v1'}
      result1 = v.get('k1')
      result2 = v.keys()
    • 有返回值 + 修改数据

      v = [11,22,33]
      result = v.pop()
    • 常用需要记住

      • str
        • strip 返回字符串
        • split 返回列表
        • replace 返回字符串
        • join 返回字符串
      • list
        • append 无返回值
        • insert 无
        • pop 返回要删除的数据
        • remove 无
        • index 返回索引的位置
      • dict
        • get
        • keys
        • values
        • items
  2. 一个函数被同时执行时内部数据是否混乱?
    • 函数内部执行时相互之间不会混乱
    • 执行完毕 + 内部元素不被使用 → 销毁

内容详细

1.函数的中高级

1.1函数可以做返回值

def func():
    print(123)
    
def bar():
    return func

v = bar()
v()
name = 'oldboy'
def func():
    print(name)
    
def bar():
    return func

v = bar()
v()
def bar():
    def inner():
        print(123)
    return inner

v = bar()
v()
name = 'oldboy'
def bar():
    name = 'alex'
    def inner():
        print(name)
    return inner

v = bar()
v()
name = 'oldboy'
def bar(name):
    def inner():
        print(name)
    return inner

v1 = bar('alex') #{name=alex,inner1的地址}   
v2 = bar('eric') #{name=eric,inner2的地址}
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[2]()

1.2闭包

def func(name):
    def inner():
        print(name)
    return inner

v1 = func('alex')
v2 = func('eric')
#外部函数嵌套内部函数,且返回内部函数地址,这样会保留每次创建内部函数时,外部函数里面的数据。 

1.3高阶函数

注意:对函数进行赋值

1.4总结

2.内置函数

3.模块

将指定的字符串进行加密

import hashlib   #导入模块
def get_md5(data):
    obj = hashlib.md5()    #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('随便写'.encode('utf-8'))    
    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()    #md5加密
    obj.update(data.encode('utf-8'))
    result = obj.hexdigest()
    return result

USER_LIST = []
def register():
    print('******注册账户******')
    while True:
        user = input('请输入用户名:')
        if user == 'n':
            return
        pwd = input('请输入密码:')
        temp = {'name': user,'password':get_md5(pwd)}
        USER_LIST.append(temp)
register()

def login():
    print('******用户登录******')
    user = input('请输入用户名:')
    pwd = input('请输入密码:')
    for item in USER_LIST:
        if item['name'] == user and item['password'] == get_md5(pwd):
            return True

result = login()
if result:
    print('登陆成功')
else:
    print('登陆失败')

赠送:密码不显示(只能在终端运行)

import getpass

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

总结

原文:https://www.cnblogs.com/elliottwave/p/12521813.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!