再说函数1

函数的引用赋值和参数操作

python中的函数操作,本身也就是一个对象,常规定义语法的函数就是将一个函数对象的引用地址赋值给函数名称的变量,通过函数名称的变量调用执行函数

如果函数是对象,那么函数也可以和对象一样可以被引用赋值

#函数的引用赋值
def show():
    print("函数执行了")

#将函数的地址赋值给一个变量
a = show
#通过调用这个变量也可以执行函数
a()

输出结果:

图1.png

同样,函数也可以被当成参数传递给其他函数执行

#函数的传值操作,策略模式
def show(message):
    message()

def show_msg():
    print("函数1执行了")

def show_msg2():
    print("函数2执行了")

#调用执行参数show
show(show_msg)
show(show_msg2)

输出结果:

图2.png

装饰器函数:

软件开发原则中,有一项OCP原则((open close principle:开闭原则)

OCP原则((open close principle:开闭原则):对软件功能的扩展开放,对软件原来代码的修改关闭。

既然如此,如何在函数中添加功能但是又不修改函数的代码呢?

python提供了一种新的处理方式,可以更加友好的在符合OCP原则的情况下扩展函数的操作功能,称为装饰器函数

例如:

原函数如下,客户要求在每段函数开始和结束时添加提示语句:

  def record_info():
       print("模拟,记录用户信息")

  def show_info():
      print("模拟,展示用户信息")

#调用记录用户信息
record_info()
#调用展示用户信息

show_info()按客户需求在遵守OCP原则的情况下修改代码如下:

#定义一个装饰器函数
def decorators(fn):
    def wrapper(*args, **kwargs):
        print("函数准备执行")
        result = fn(*args, **kwargs)
        print("函数执行结束")
        return result
    return wrapper

@decorators
def record_info():
   print("模拟,记录用户信息")

@decorators
def show_info():
    print("模拟,展示用户信息")

#调用记录用户信息
record_info()
#调用展示用户信息

show_info()输出结果:

图3.png

装饰器函数执行过程:

图4.png

函数扩展内容:

1、偏函数:

引入模块 from functools import partial

通过偏函数模块可以给当前函数赋值定义一个特殊的访问函数,特殊的访问函数可以给原来的函数增加一个默认值

示例:

 引入函数工具模块中的偏函数扩展
from functools import partial

# 定义普通函数
def calculation(num1, num2, opra):
    res = None
    if opra == "+":
        res = num1 + num2
    elif opra == "-":
        res = num1 - num2
    elif opra == "*":
        res = num1 * num2
    elif opra == "/":
        res = num1 / num2
    return res

# 普通函数的调用
result = calculation(12, 10, "+")
print(result)

# 通过偏函数进行处理,添加默认操作方式
calculation2 = partial(calculation, opra="+")
result = calculation2(22, 24)
print(r输出结果:
图5.png

但是偏函数的操作,在一定程度上来说只是一个语法糖,因为python中对于函数参数的处理已经有默认值的操作,完全可以代替偏函数的复杂操作。

2、闭包函数:

因为函数的出现,变量出现了分化:全局变量,局部变量

全局变量:在声明开始的任意地方都可以访问

局部变量:在当前函数中可以操作

但在有些情况下,我们需要在函数外部直接操作函数中的数据,怎么进行操作呢:

1、将函数中的数据通过返回值进行返回

2、通过闭包函数进行操作

返回值的操作方式比较固定单一,能作为简单数据处理的手段

但更加灵活的操作方式就是闭包函数

所谓闭包函数:就是在函数中声明另一个变量

修饰器函数就是一个闭包函数

例如:

# 闭包函数
def outer():
    print("外部函数")

    def inner():
        print("内部函数:闭包函数")

    return inner


# 调用执行outer()函数时,得到一个函数对象的返回值
x = outer()
# 该返回值是一个函数,所以也可以执行
x()输出结果:
图6.png

3、匿名函数:

匿名函数,又称lambda表达式:通过一个表达式实现函数功能。主要作用是简化函数操作,将简单的处理逻辑封装在一个表达式中,而省去了定义函数的复杂的操作方式

主要起到简单处理函数的功能,所以 lambda 表达式才在很多地方被称为匿名函数

基本语法结构:

lambda 参数列表:运算表达式

lambda关键字

参数列表:用于给表达式传递数据

表达式语句:计算表达式,计算结果会自动输出

使用注意事项:

主要用于替代功能简单的函数,提高代码的简洁性

但是不要滥用,大量使用会造成代码可读性严重下降

示例:

# 匿名函数:lambda表达式
fn = lambda x, y: x + y


# 等价于
def fn2(x, y):
    return x + y


print(fn(1, 2))
print(fn2(1, 2))

输出结果:

图7.png

如有错误,敬请指出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容