函数概念
基本结构
def func(arg):
return arg
v = func(123)
参数
定义函数
调用函数
函数小高级
函数可以做变量
def func():
pass
v = func()
v()
v2 = [func,func,func]
v2[1]()
函数可以做参数
def func(arg)
v2 = arg()
def show()
pass
v1 = func(show)
#注意返回值,func给v1,show给v2
函数的作用域
示例一
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():
pass
v = [lambda x:x+100,]
内置函数
输入输出
强制转换
数学相关
max()
min()
sum()
abs()
divmod() ▲求商和余数,分页使用。
pow()
v = pow(2,3)
print(v)
round()
v = round(1.126,2)
print(v)
进制相关
其它 ▲
数据类型中的方法到底有没有返回值?
无返回值
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()
常用需要记住
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]()
def func(name):
def inner():
print(name)
return inner
v1 = func('alex')
v2 = func('eric')
#外部函数嵌套内部函数,且返回内部函数地址,这样会保留每次创建内部函数时,外部函数里面的数据。
注意:对函数进行赋值
编码相关
chr() 将十进制数字转换成unicode编码中对应的字符串。
v = chr(100)
print(v)
ord() 根据字符在unicode编码中找到对应的十进制。
v = ord('中')
print(v)
应用
#随机验证码
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 #导入一个模块(导入一个py文件)
random.randint(起始,终止) #得到一个随机数
高级一点的内置函数
map 循环每个元素(第二个参数),然后让每个元素执行函数(第一个函数),最后将函数执行的结果放到新的列表中并返回。
v1 = [11,22,33,44]
# 第一个参数必须是一个函数
# 第二个参数必须是可迭代类型(可以被for循环的)
result = map(lambda x:x+100,v1) # 将函数的返回值添加到空列表中
print(result) # [111,122,133,144] py2会直接返回
print(result) # py3返回特殊的东西
print(list(result)) # py3通过列表转换得到
print(v1) # map有返回值,不会影响v1。
应用场景:如果要对列表字典中每个元素做统一操作可以使用map()函数
filter 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用list()来转换。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
v1 = [11,22,33,'alex',44,'eric']
def func(x):
if type(x) == int:
return True
return False
result = filter(func,v1) # 函数,可迭代对象
print(list(result))
result = filter(lambda x: type(x) == int, v1)
print(list(result))
reduce
import functools
v1 = [1,2,3,4,5,6]
def func(x,y):
return x * y
result = functools.reduce(func,v1)
print(result)
import functools
v1 = ['我','好','饿']
def func(x,y):
return x + y
result = functools.reduce(func,v1)
print(result)
result = fuctools.reduce(lambda x,y: x + y,v1)
print(result)
面试题
将指定的字符串进行加密
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