再说函数

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

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

# 声明定义一个函数对象,赋值给了变量show_msg
def show_msg():
    print("函数代码执行......")

# 通过变量show_msg可以直接调用执行函数对象的代码
show_msg()

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

# 声明定义一个函数对象,赋值给变量show_msg
def show_msg():
    print("函数代码执行......")

# 函数可以赋值给一个变量
show_info = show_msg
# 同样可以通过变量show_info调用执行函数show_msg
show_info()

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

# 声明定义一个函数对象,展示第一类信息
def show_msg1():
    print("函数代码执行,信息1......")

def show_msg2():
    print("函数代码执行,信息2......")

# 定义展示处理函数
def show(message):
    message()

# 执行代码,函数可以当成参数被传递
show(show_msg1) # 展示信息1
show(show_msg2) # 展示信息2

函数默认调用:偏函数

有一种函数操作,可以让函数的操作执行更加人性化的操作处理

# 引入函数工具模块中的偏函数扩展
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(result)

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

def calculation(num1, num2, opra="+"):
    pass

if __name__ == "__main__":
    result = calculation(22, 24)
    print(result)

功能织入:装饰器函数

软件开发原则中,有一项是OCP(Open Close Principle:开闭原则)
OCP:对软件功能的扩展开放,对软件原来代码的修改关闭

    那么如果在函数中要给一个函数添加功能但是又不允许修改函数的代码,如上述计算函数calculation(),在计算前后添加日志记录,应该怎么操作?
最原始的操作方式如下:

# 目标函数
def calculation():
    pass

# 操作代码
print("开始运算,日志记录......")
calculation()
print("运算结束,得到结果......")

但上述代码对于代码的复用性的提升较差。
PYTHON提供了一种新的处理方式,用于给指定的函数增加功能

# 定义装饰器函数,用于给指定的函数增加功能
def loggin(fn):
    def wrapper(*args, **kwargs):
        print("新增功能函数>>>>>>")
        res = fn(*args, **kwargs)
        print("新增功能函数<<<<<<")
        return res
    return wrapper

# 定义普通函数
@loggin
def calculation(num1, num2, opra):
    print("目标函数执行中", num1, opra, num2)

# 普通函数的调用:目标函数调用时,已经添加了新的处理功能
calculation(12, 10, "+")

数据扩展:闭包函数

    函数中的数据一般情况都是局部变量作用域,所以函数执行结束,意味着函数中的数据就会丢失,在函数外部就不能访问函数中的数据。

    但是在有些情况下,我们需要在函数外部直接操作函数中的数据,用什么样的操作方式呢?
        1.将函数中的数据直接通过返回值返回
        2.通过闭包函数进行操作

返回值的操作方式比较单一,能作为简单数据的处理手段。
更加灵活的操作方式就是闭包函数,所谓闭包函数,就是在函数中声明另一个函数:

def outer()"
    print("外部函数")

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

    return inner

# 通过执行outer()函数,得到一个函数对象的返回值
x = outer()
# 该返回值是一个函数,所以也可以执行
x()

强大功能:匿名函数

匿名函数,有很多语言都存在这样一种操作方式。
更加广为人知的名称:lambda表达式(兰木达表达式),其主要作用是简化函数操作,将简单的处理逻辑封装在一个表达式中,省去了定义函数的复杂操作方式。

基本语法结构
lambda 参数列表:运算表达式
参数列表:lambda表达式运算的数据输入
运算表达式:可以执行计算的简单代码,最终会成为该表达式的数据输出

基本操作方式:

计算三个数据的基本运算
fn = lambda x, y, z : x + y + z
等价于
def fn(x, y, z):
return x + y + z

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

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

推荐阅读更多精彩内容

  • “妈妈,你刚才和教练说话时笑得太奸诈了,就像一个老谋深算的奸商,笑里藏刀,教练都接不了你的话!”一出门,女儿这样对...
    爰为阅读 694评论 9 15
  • 这篇文章送给差劲的你和我。 前些天,英语老师向全班问到“What's your dream”其实老师是想锻炼我们用...
    Zeson周彬昱阅读 253评论 1 4
  • 前些日子,在‘’悟空问答‘’上随性回答了一个问题: 没想到陆续几天获得了不少朋友的赞誉与关注,当时回答问题时只不过...
    京城流淌阅读 923评论 2 1
  • 关于爷爷,关于逝去的一切 爷爷,对不起,那天本想着等上完夜班第二天早上在赶回家,就是这样的自以为,让这最后一声爷爷...
    jidi寂地阅读 271评论 0 1