今日内容

  函数中高级(闭包/高价函数)

  内置函数

  内置模块(.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/chr/ord

    其他: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/type/len/id/open/sum/max/min等等

    模块:getpass/hashlib/random

20200120--python学习第12天的更多相关文章

  1. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  2. python学习笔记12 ----线程、进程

    进程和线程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进程里的 ...

  3. Python学习(12)日期和时间

    目录 Python 日期和时间 时间元组 获取当前时间 获取格式化时间 格式化日历 获取某月日历 Time模块 日历模块 其他相关模块和函数 Python 日期和时间 Python 程序能用很多方式处 ...

  4. Python学习:12.Python字符串格式化

    字符串格式化 讲解Python这么久,也没有讲解Python的字符串的格式化,那我们今天就来了解一下python字符串格式化的强大之处. 首先我们先理解一下为什么要有字符串的格式化,就是为了方便字符串 ...

  5. python 学习笔记12(事件驱动、IO多路复用、异步IO)

    阻塞IO和非阻塞IO.同步IO和异步IO的区别 讨论背景:Linux环境下的network IO. 1.先决条件(几个重要概念) 1.1.用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32 ...

  6. python学习(12)使用正则表达式

    1.正则表达式知识 符号 解释 示例 说明 . 匹配任意字符 b.t 可以匹配bat / but / b#t / b1t等 \w 匹配字母/数字/下划线 b\wt 可以匹配bat / b1t / b_ ...

  7. Python学习总结12:sys模块

    sys模块常用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互. 1. 导入及函数查看 >>> import sys #导入sys模块 >>&g ...

  8. Python学习笔记12—类

    典型的类和调用方法: #!/usr/bin/env Python # coding=utf-8 __metaclass__ = type #新式类 class Person: #创建类 def __i ...

  9. python学习笔记12(函数三): 参数类型、递归、lambda函数

    一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参 ...

  10. Python学习笔记12:标准库之对象序列化(pickle包,cPickle包)

    计算机的内存中存储的是二进制的序列. 我们能够直接将某个对象所相应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),然后将文本流存入到文件里. 因为Python在创建对象时,要參考 ...

随机推荐

  1. Java 从入门到进阶之路(二十二)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...

  2. VS2015发布WEB项目

    第一步:在打开的VS2015中,右击项目,在弹出的对话框中,点击“发布”. 第二步:配置发布的WEB项目. 1.为要发布的项目起个名称,一般和项目名称相同. 2.选择以文件系统发布. 3.设置相关配置 ...

  3. Scala实践13

    1.隐式参数 方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果该参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,则自动传递. S ...

  4. 用Django自动生成表遇到问题

    因为以前在数据库中已经生成过Django 叫App01下的表,所以无法生成,在数据库中执行这个命令 DELETE FROM django_migrations WHERE app='App01';然后 ...

  5. Springboot引入本地jar时打包

    在项目的开发过程中有时我们需要引入我们本地的jar包,这些jar包没有存在maven仓库中 ,这时没有办法通过pom文件直接引入,在开发过程中我们可以通过add as library的方式,可以在开发 ...

  6. TensorFlow or PyTorch

    既然你已经读到了这篇文章,我就断定你已经开始了你的深度学习之旅了,并且对人造神经网络的研究已经有一段时间了:或者也许你正打算开始你的学习之旅.无论是哪一种情况,你都是因为发现你陷入了困惑中,才找到了这 ...

  7. github 删除库

    1.查看库 2.选择想要删除的库,点击setting 3.删除库

  8. 双指针,BFS和图论(三)

    (一)图论 1.大臣的旅费 很久以前,T王国空前繁荣. 为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任 ...

  9. 3分钟接入socket.io使用

    WebSocket 简介 传统的客户端和服务器通信协议是HTTP:客户端发起请求,服务端进行响应,服务端从不主动勾搭客户端. 这种模式有个明显软肋,就是同步状态.而实际应用中有大量需要客户端和服务器实 ...

  10. Dart语言学习(九) 运算符

    一.运算符及其描述 二.Dart运算符注意点 1. 除法运算符"/" 和 整除运算法"~/" 的区别 除法运算符 "/"  结果是浮点型 整 ...