s21day12 python笔记
一、函数中高级
1.1 函数可以做返回值
#示例:
def func():
print(123)
def bar():
return func
v = bar()
v()
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 高阶函数
- 把函数当作参数传递
- 把函数当作返回值
- 注意:对函数进行赋值
二、 内置函数补充
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('输入正确')