20200120--python学习第12天
Posted limin1027
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20200120--python学习第12天相关的知识,希望对你有一定的参考价值。
今日内容
函数中高级(闭包/高价函数)
内置函数
内置模块(.py文件)
内容回顾
函数基础概念
a.函数基本结构
def func(arg):
return arg
v1 = func(123)
b.参数
写参数
def func(a1,a2):pass
def func(a1,a2=None):pass
def func(*args,**kwargs):pass
执行参数:位置参数在前/关键字参数在后
c.函数小高价
函数可以做变量
def func():
pass
v1 = func
v1 ()
v2 = [func,func,func]
v2[0]()
函数可以做参数
def func(arg):
v2 = arg()
def show():
pass
v1 = func(show)
#请注意返回值
d.python中以函数为作用域
第一题
for item in range(10):
pass
print(item) #输出结果为:9
第二题
item = 10
def func():
for item in range(10):
pass
print(item)
func() #输出结果为:9
第三题
item = 10
def func():
item = 2
def inner():
print(item)
for item in range(10):
pass
inner()
func() #输出结果为:9
第四题:
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() #输出结果为1:109 109
第五题
def func():
for num in range(10):
pass
v4 = [lambda: num + 10, lambda: num + 100, lambda: num + 100, ]
result1 = v4[1]()
num = 73
result2 = v4[2]()
print(result1, result2)
func() #输出结果为1:109 173
3.lambda表达式(匿名函数)
v = [lambda x : x+100]
4.内置函数
输入输出:input/print
强制转换:int/bool/str/list/tuple/dict/set
数学相关:abs/max/min/sum/divmod/float/pow/round
进制:bin/oct/hex/int
其他:len/range/id/type/open
补充
1.数据类型宏的方法到底有没有返回值
无返回值
v= [11,22,33]
v.append(99) #无返回值
仅有返回值
v = "alex"
result = v.split(‘l‘) #有返回值
v={‘k1‘:‘k2‘}
result1 = v.get(‘k1‘)#有返回值
result 2= v.keys#有返回值
有返回值+修改数据
v= [11,22,33]
result = v.pop() #有返回值,并将删除的33值赋值给result变量
常用需要记住
str类型
strip(返回字符串)/split(返回列表)/replace(返回字符串)/join(返回字符串)
list类型
append(无返回值)/insert(无返回值)/pop(有返回值)/extend(无返回值)/remove(无返回值)/find(返回索引的位置)/index(返回索引的位置)
dict类型
get(有返回值)/keys(有返回值)/values(有返回值)/items(有返回值)
2.函数内部的而数据是否会混乱;
函数内部执行相互之间不影响;
执行完毕+内部元素不被其他使用 ==》销毁
内容详细
1.函数中高价
1.1函数可以做返回值
函数可以做返回值
def func():
print(123)
def bar():
return func
v = bar()
v() #输出结果为:123
name = "oldboy"
def func():
print(name)
def bar():
return func()
v= bar() #返回oldboy
v() #该处报错
def bar():
def inner():
print(123)
return inner
v = bar()
v() #输出结果为:123
name = "oldboy"
def bar():
name = "alex"
def inner():
print(name)
return inner
v= bar()
v() #输出结果为:alex
name = "oldboy"
def bar(name):
def inner():
print(name)
return inner
v1= bar(‘alex‘) #闭包:为函数创建一块区域,内部变量供自己使用,为以后执行调用方便
v1() #输出结果为:alex
v2 = bar(‘eric‘)
v2() #输出结果为:eric
练习题
第一题
name = "alex"
def base():
print(name)
def func():
name ="eric"
base()
func() #输出结果为:alex
第二题:
name = "alex"
def base():
print(name)
def func():
name ="eric"
base()
func() #输出结果为:alex
第三题
name = "alex"
def func():
name = "eric"
def base():
print(name)
return base
base = func()
base() #输出结果为:eric
#注意:函数在何时被谁创建的,面试题
info =[]
def func():
print(i)
for i in range(10):
info.append(func)
info[0]() #输出内容为:9
试题二
info =[]
def func(i):
def inner():
print(i)
return inner
for item in range(10):
info.append(func(item))
info[0]() #输出内容为:0
info[1]() #输出内容为:1
info[4]() #输出内容为:4
1.2闭包
def func(name):
def inner():
print(name)
return inner
v1 = func(‘alex‘) #v1为inner函数的内存地址
v1() #输出结果为:alex
v2 = func(‘eric‘)
v2() #输出结果为:eric
1.3高价函数
把函数当作参数传递;
把函数当作返回值
注意:对函数进行赋值
1.4总结
函数执行的流程分析(函数到底是由谁创建的)
闭包概念:为函数创建一块区域并维护其自己的数据,方便以后执行调用方便【应用场景:装饰器 /SQLAlchemy源码】
2.内置函数
(1)编码相关
chr 将十进制数字转化为unicode编码中的对应字符串;
v= chr(99)
print(v) # 输出结果为:c
ord 根据字符在unicode中的编码找到其对应的十进制。
num = ord(‘中‘)
print(num) #输出结果为:20013
(2)应用
将随机产生一段验证码,具体实现方式如下:
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)
import random #导入一个模块
v = random.randint(start开始,end结束) #将得到一个随机数
(3)高级一点的内置函数
map:循环每个元素(第二个参数),然后将第二个参数中个每一个元素参与第一个函数的运算,将每个函数的执行结果保存到一个新的列表中,并返回。
v = [11,22,33,44]
result = map(lambda x :x+100 ,v)
print(list(result)) #输出结果为:[111, 122, 133, 144]
filter函数应用
v1 =[11,22,333,‘asd‘,44,‘x‘]
def func(x):
if type(x)==int:
return True
return False
result = filter(func,v1)
print(list(result)) #返回结果为:[11,22,333,44]
#等同写法二
result2 = filter(lambda x : True if type(x)==int else False ,v1)
print(list(result2)) #返回结果为:[11,22,333,44]
#等同写法三
result3= filter(lambda x :type(x)==int ,v1)
print(list(result3)) #返回结果为:[11,22,333,44]
reduce函数的应用
import functools
v1=[‘wo‘,‘hao‘,‘e‘]
def func(x,y):
return x+y
result = functools.reduce(func,v1)
print(result) #返回结果为:wohaoe
#等同写法二
result2 = functools.reduce(lambda x,y:x+y ,v1)
print(result2)#返回结果为:wohaoe
面试题
常见的内置函数有哪些?
filter/map/reduce函数是什么意思?
什么是匿名函数?
def func():
pass
v = [lambda x:x+100,]
3.模块
将指定的“字符串”进行加密。
import hashlib
def get_md5(data):
obj = hashlib.md5()
obj.update(data.encode("utf-8"))
result = obj.hexdigest()
return result
val = get_md5(‘123‘)
print(val)
输出结果为:202cb962ac59075b964b07152d234b70
#加盐
import hashlib
def get_md5(data):
obj = hashlib.md5("aeodejidfaofdfe".encode("utf-8"))
obj.update(data.encode("utf-8"))
result = obj.hexdigest()
return result
val = get_md5("123")
print(val)
#输出结果为:291bacaab367bf289bbdd7e7de089a66
应用
import hashlib
USER_LIST=[]
def get_md5(data):
obj = hashlib.md5("weojfeoe".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("登录失败")
赠送:密码不显示(只能在终端运行)
import getpass
pwd = getpass.getpass(‘请输入密码:‘)
if pwd == ‘123‘:
print(‘输入正确‘)
总结
自定义函数
基本函数结构(98%)
高级:闭包/参数
内置函数:map/filter/reduce
模块:getpass/hashlib/random
以上是关于20200120--python学习第12天的主要内容,如果未能解决你的问题,请参考以下文章
Linux内核设计第二周学习总结 完成一个简单的时间片轮转多道程序内核代码