python-函数

参考廖雪峰python3知识点的总结

函数返回值--函数

  • 函数可以作为函数的返回值:
  1. 函数作为返回值的使用:表示返回的函数对象,利用函数对象()就可以执行该方法
  2. 函数作为返回的应用场景:
    1. 作为返回值的函数现在暂时用不上,则可以将其作为函数对象值先进行传递保存起来;
    2. 返回值函数外面嵌套函数的作用往往是用来接收参数,然后将该参数作为局部变量提供给返回值函数使用,当外部函数得到执行,那么外部函数的局部变量就会给内部函数使用
    3. 返回的是内部函数的函数对象,使用 内部函数()便可以执行该方法,使用 内部函数(参数) 就又可以使用它自己的参数
def func():
    i = 0
    def inter(a):
        print('a:',a,'i:',i)
    return inter
#使用()表示得到执行,使用(参数)表示给予其自己的参数
func()('a')
  1. 这种使用,往往是在一个方法A的传参时使用嵌套函数B的返回值函数C来传递C这个函数对象供A方法使用。见如下实例:
def include(num):
    return lambda x:x**2
def func(a):
    print('现在我要开始使用……',a())
func(include(1))

注意点:每次返回的函数对象时不相同的,即没调用一次嵌套函数就会返回一个新的函数对象。

  • 函数作为返回值(闭包)存在的问题

当函数作为返回值的时候,标志就是嵌套函数内部的函数不立刻执行,那么当他们引用嵌套函数的变量,并且这个变量不停变化的时候,那么这些函数访问到的变量都将是最终变量值,即访问到的值是统一的,可能存在安全隐患
如果这个内部函数立刻得到执行,那么就不存在这个问题,因为每次变量都得到及时的使用。
解决办法: 1.首先充分理解其原因,本质就是变量名和对象的指向问题,其指向的是最终的对象值,所以每个函数访问到的值是一样的,所以方法一就是可以使用不同的变量值,那么他们指向不同的对象,那么内部函数得到的值就是不同的。2.充分理解命名空间的作用,所以可以在内部函数的外面再绑定一个函数,用这个函数来固定变量。

def func():
#     这个函数用来固定变量,固定好变量给返回函数使用
    def intern(i):
        def g():
            print(i**i)
        return g
    return (intern(i) for i in range(4))
for i in func():
    i()

匿名函数

  • 匿名函数的特点
  1. lambda x:x2表示定义了一个匿名函数,其中x表示接受的参数,x2表示返回值,其不用return
  2. 匿名函数实质上表示的是函数对象,其可以作为返回值和参数,但想要执行它,则需要将它赋值给变量,然后用变量名()来执行。

装饰器

作用:就是用来补充函数本身的功能

  • 不提供参数的装饰器:
def log(func):
    def wrapper(*arg,**args):
        print('%s 执行'%func.__name__)
    return wrapper
@log
def func():
    print('时间')
func()

其本质上就是func = log(func),表示对func进行装饰,装饰好后进行待用。

  • 提供参数的装饰器
def log(text):
    def decorate(func):
        def wrapper(*arg,**args):
            print('%s 执行'%func.__name__)
        return wrapper
    return decorate
@log('execute')
def func():
    print('时间')
func()

实质上是func = log('execute')(func),其同样表示对func函数进行装饰,并且log('execute')进行装饰了一次,(func)函数又装饰了一次,即装饰了两次。
注意点:以上的两次装饰,对于func = log('execute')(func)左边的变量名,返回的是装饰过的函数对象wrapper,所以其函数名变为wrapper,
在python中可以使用@functools.wraps(func)写在一个函数的前面,表示将该函数的name属性改为和func的name属性相同。

偏函数

作用:用来控制变量的值,使用 functools.partial 在原函数的基础上返回新的函数,达到减少调用参数的作用
形式:

import functools
 int2 = functools.partial(int, base=2)
max2 = functools.partial(max, 10)

注意点:其中用参数:值,表示对*args进行控制,其中用值,则从arg的左边开始填参数。

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