Day12
今日内容
- 函数中高级(闭包/高阶函数)
- 内置函数
- 内置模块(.py文件)
内容回顾
函数基础概念
函数的基本结构
def func(arg): return arg: v1 = func(123)
参数
- 写参数
- def func(a1,a2): pass
- def func(a1,a2=None): pass
- def func(*args,**kwargs)::
- 执行函数
- 位置参数在前 关键字参数在后
- 写参数
函数小高级
函数可以做变量
def func(): pass v1 = func
v1()
v2 = [func,func,func]
v2[1]()
```
- 函数可以做参数
```python
def func(arg):
v2 = arg()
def show():
pass
v1 = func(show)
#注意返回值
```
- python中以函数为作用域
```python
#第一题
for item in range(10):
pass
print(item)
#第二题
item = 10
def func():
for item in range(10):
pass
print(item)
func()
#第三题
item = 10
def func():
item = 2
def inner():
print(item)
for item in range(10):
pass
inner()
func()
#第四题(新浪微博面试题)
def func():
for num in range(10):
pass
v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]
result1 = v4[1]()
result2 = v4[2]()
print(result1,result2)
func()
```
- lambda表达式
- 内置函数
- 输入输出
- 强制转换
- 数学相关
- 进制相关
- 其他
函数内部的数据是否会混乱
- 函数内部执行相互不混乱
- 执行完毕 + 内部元素不被其他使用 —>>销毁
内容详细
1、函数中高级
1.1 函数可以做返回值
def func():
print(123)
def bar():
return func
v= bar()
v()
name = '武藤兰'
def func():
print(name)
def bar():
return func
v= bar()
v()
def bar():
def inner():
print(123)
return inner
v= bar()
v()
name = '加藤鹰'
def bar():
name = '苍井空'
def inner():
print(123)
return inner
v= bar()
v()
name = '加藤鹰'
def bar(name):
def inner():
print(123)
return inner
v1 = bar('武藤兰') #{name=武藤兰, inner} #闭包,为函数创造一块区域(内部变量供自己使用),为他以后执行提供数据
v2 = bar('苍井空') #{name=苍井空, 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()
# 第三题
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.2 闭包
def fucn(name):
def inner():
print(name)
return inner
v1 = func('alex')
v1()
v2 = func('eric')
v2()
1.3 高阶函数
- 对函数进行赋值
- 把函数当做参数传递
- 把函数当做返回值
1.4 总结
- 函数执行的流程分析(函数到底是谁创建的?画图理解)
- 闭包的概念:为函数创建一块区域保留并为其维护自己数据,以后执行时方便调用。
- 闭包的应用场景:装饰器,SQLAichemy源码
2、内置函数
编码相关
chr 将十进制数字转换成Unicode编码中的对应字符
v = chr(99) print(v)
ord 根据字符在Unicode编码中找到其对应的十进制
num = ord('中国') print(num)
应用(随机验证码)
import random #导入模块 def get_random_code(length=6): data = [] for i in range(6): v = random.randint(65,90) data.append(chr(v)) return ''.join(data) code = get_random_code() print(code)
import random #导入模块 v = random.randint(起始,终止) # 得到一个范围内随机数
高级一点的内置函数
map , 循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回。
v1 = [11,22,33] # result = map(函数,可迭代对象) 循环对可迭代对象进行函数 result = map(lambda x:x+100,v1) print(result) #[111,122,133] py2直接展现列表 print(list(result)) #py3特殊,对象object
filter , 过滤
v1 = [11,22,33,'小萝莉',44,'御姐'] # result = filter(函数,可迭代对象) 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)) # lambda表达式实现 方法二 import functools v1 = [1,2,3,4,5,6] def func(x,y): retunr x + y result = functools.reduce(func,v1) print(result) # lambda表达式实现 import functools result = functools.reduce(lambda x,y:x+y,v1) print(result)
lambda表达式实现 方法二
result = filter(lambda x:type(x) == int ,v1)
print(list(result))- reduce ```python import functools v1 = [1,2,3,4,5,6] def func(x,y): retunr x + y result = functools.reduce(func,v1) print(result) # lambda表达式实现 import functools result = functools.reduce(lambda x,y:x+y,v1) print(result)
面试题:
你常用的内置函数有哪些?
fillter/map/reduce是什么意思?
什么是匿名函数?
def func(): pass lambda x:x+100
3、模块
将制定的‘字符串’进行加密
import hashlib
obj = hashlib.md5()
obj.update('要加密的字符串'.encode('utf-8')) #py3需要转码
result = obj.hexdigest()
print(result)
加盐
import hashlib
obj = hashlib.md5('dasdsada'.encode('utf-8')) #加盐,将这段字符串和要加密的字符串一起加密
obj.update('要加密的字符串'.encode('utf-8')) #py3需要转码
result = obj.hexdigest()
print(result)
案例:
import hashlib
USER_LIST[]
def get_md5(data):
obj = hashlib.md5('dasdsada'.encode('utf-8'))
obj.update('data'.encode('utf-8')) #py3需要转码
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('登录失败')
输入密码不显示
只能在终端运行
import getpass
pwd = getpass.getpass('请输入密码')
print(pwd)
总结
- 自定义函数
- 基本函数结构
- 高级
- 参数
- 闭包
- 内置函数
- 模块
- random
- hashlib
- getpass
本周作业
1、学习笔记填充:md文件
2、思维导图:png文件
3、每日作业
版权声明:本文为s4cott原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。