函数基础概念
函数的基本结构
def func(arg):
return arg:
v1 = func(123)
参数
函数小高级
函数可以做变量
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表达式
- 内置函数
- 输入输出
- 强制转换
- 数学相关
- 进制相关
- 其他
函数内部的数据是否会混乱
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]()
def fucn(name):
def inner():
print(name)
return inner
v1 = func('alex')
v1()
v2 = func('eric')
v2()
编码相关
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)
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
将制定的‘字符串’进行加密
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)
1、学习笔记填充:md文件
2、思维导图:png文件
3、每日作业