python 10天快速教程 Day5

2020-07-16  本文已影响0人  XaviSong

本节重点

  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

上一篇 下一篇

猜你喜欢

热点阅读