美文网首页
python 10天快速教程 Day5

python 10天快速教程 Day5

作者: XaviSong | 来源:发表于2020-07-16 19:40 被阅读0次

本节重点

  1. 偏函数
  2. 返回函数
  3. 高阶函数
  4. 闭包
  5. 简单装饰器

一、偏函数

函数的参数偏爱某个值,类似于缺省参数,但是在此基础之上,可以设定函数的参数靠拢哪个偏爱值

# 先定义好一个函数
def show(num1,num2,num3 = 3):
    return num1+num2+num3

# 定义偏函数来修改偏爱值
def show2(num1,num2,num3 = 4):
    return show(num1,num2,num3)
print(show2(1,2))
'''
7
'''

# 另一种实现偏函数的方式,使用functools模块
import functools
newfunc = functools.partial(show,num3 = 1)
print(newfunc(1,2))
'''
4
'''

具体的应用场景:可以使用偏函数来对系统的内置函数设置偏爱值

# 譬如说对int()函数的参数进行偏爱,转换时偏爱二进制
int_b = functools.partial(int,base = 2)
result = int_b("11")
print(result,type(result))
'''
3 <class 'int'>
'''

二、返回函数

定义:

在函数中定义,从函数调用中返回,类似于函数嵌套。根据传入的不同参数,返回不同的函数(返回函数的重要意义)。

示例:
def calc(operation):
    if operation == "+":
        def sum(num1,num2):
            return num1+num2
        return sum
    if operation == "-":
        def sub(num1,num2):
            return num1-num2
        return sub

顺便一提:函数可以返回多个值,多个返回值被包装为元组

def more(num1,num2):
    return num1+num2,num1-num2
result = more(2,1)
print(result)
'''
(3,1)
'''

三、高阶函数

函数参数可以接收外部的函数名,或返回值也为函数名,二者满足其一即可。

示例:

# 两个条件都满足的情况
def text(new_func):
    # 调用传入的外部函数
    new_func()
    # 内部函数
    def inner():
        print("我是返回的内部函数")
    return inner
def show_msg():
    print("供调用外部的函数")
new_func = text(show_msg)
new_func()
'''
供调用外部的函数
我是返回的内部函数
'''

四、闭包

在函数嵌套的前提下,内部函数使用了外部函数的参数或变量。并把这个内部函数返回,返回的函数称为闭包。(一种高阶函数)

示例:
def show(msg):
    #外部变量
    num = 100
    def inner():
        print(num,msg)
    return inner
new_func = show("开始")
new_func()

一般闭包的应用场景:可以根据参数的不同生成不同的函数

示例:
# 通过闭包生成不同函数
def show(msg,count):
    return msg*count
print(show("a",10))

def show1(mesg,count):
    def msg():
        return mesg*count
    return msg # msg就是返回的闭包

# new_func1、new_func2为闭包生成的不同功能函数
new_func1 = show1("a",10)
new_func2 = show1("b",10)
print(new_func1())
print(new_func2())
print(new_func1,new_func2)#对应内存地址不同
'''
aaaaaaaaaa
aaaaaaaaaa
bbbbbbbbbb
<function show1.<locals>.msg at 0x0000022BB6C0D620> 
<function show1.<locals>.msg at 0x0000022BB6C0D510>
'''

五、简单装饰器

定义:

本质上也是闭包,可以给原函数的功能进行扩展,不改变原函数定义与调用操作。

示例:
#在AAAA前面加上BBBBB,装饰器本质是一个闭包
def show4():
    print("AAAAA")
def decorator(new_func):
    def inner():
        print("BBBBB")
        new_func()
    return inner
# 重新给show4赋值
show4 = decorator(show4)
show4()

#语法糖形式
@decorator
def show5():
    print("CCCCCCCC")
show5()
'''
BBBBB
AAAAA
BBBBB
CCCCCCCC
'''

上一篇:python 10天快速教程 Day4
下一篇:python 10天快速教程 Day6

相关文章

  • Python 快速教程(网络)

    注:采转归档,自己学习查询使用 Python 快速教程(网络01):原始Python服务器Python 快速教程(...

  • Python 文档手册

    Python 官方文档 Vamei老师-Python快速教程 廖雪峰老师-Python教程 笨办法学Python ...

  • Python 快速教程(Django)

    注:采转归档,自己学习查询使用 Python 快速教程(Django01):初试天涯Python 快速教程(Dja...

  • 首次简书日记_Python资料相关

    Vamei的Python快速教程 廖雪峰的入门教程 简明 Python 教程 实验楼Python学习路径: 系统的...

  • Python 快速教程(进阶篇)

    注:采转归档,自己学习查询使用 Python 快速教程(进阶篇01): 词典Python 快速教程(进阶篇02):...

  • Python 快速教程(深入篇)

    注:采转归档,自己学习查询使用 Python 快速教程(深入篇01):特殊方法与多范式Python 快速教程(深入...

  • 初级知识0

    1. Python Python 教程 Python笔记(jupyter) 快速学会python 2.Matplo...

  • Python 快速教程(标准库)

    注:采转归档,自己学习查询使用 Python 快速教程(标准库):走马观花Python 快速教程(标准库):学习准...

  • Python 快速教程(基础篇)

    注:采转归档,自己学习查询使用 Python 快速教程(基础篇01):Hello WorldPython 快速教程...

  • Python 快速教程(补充篇)

    注:采转归档,自己学习查询使用 Python 快速教程(补充篇01): Python的序列的方法Python 快速...

网友评论

      本文标题:python 10天快速教程 Day5

      本文链接:https://www.haomeiwen.com/subject/reumhktx.html