函数进阶

函数的参数类型

  • 不可变类型参数:字符串str,数值型,元组tuple
    • 传递的参数不会影响参数本身,只是修改了另一个复制的对象
  • 可变类型参数:列表list,字典dict
    • 传递参数会影响参数本身

命名空间

  • 定义:保存程序中的变量名和值的地方。命名空间的本质是一个字典,用来记录变量名称和值

  • 命名空间一共分为三种:局部命名空间、全局命名空间、内置命名空间

    • 局部命名空间:每一个函数都有自己的命名空间,记录函数内部的变量,函数的参数
    • 全局命名空间:每个模块都有自己的命名空间,记录了模块的变量,类,导入的模块
    • 内置命名空间:任何模块都可以访问,记录内置函数和异常
  • 命名空间的访问

    • 局部命名空间使用 locals() 函数来访问
    • 全局命名空间的访问使用 globals()函数访问
  • 命名空间的加载顺序:内置-->全局--局部

  • 命名空间的查找顺序:局部-->全局-->内置

作用域

  • 定义:是变量在程序中的可应用范围

  • 分类:分为4类 LEGB

    • L-->local(函数内部) 局部作用域
    • E-->enclosing 嵌套作用域
    • G-->global 全局作用域
    • B-->built in 内建作用域
  • 模块,类,函数会产生新的作用域, 条件语句if,循环语句while,for不会产生新的作用域

全局变量和局部变量

  • 局部变量:在函数中定义的变量成为局部变量,只在函数内部起作用

  • 全局变量:在程序一开始定义的变量成为全局变量,全局变量的作用域是整个程序

  • global 关键字可以将一个局部变量变成一个全局变量

    • 格式:global 变量名
  • nonlocal:可以修改外层(非全局)变量 -->嵌套作用域的变量

    -格式:nonlocal变量名

内置函数

  • abs()函数:求绝对值 abs(数据)

  • max()函数:求最大值, max(一组数据,key=func)

    • 将迭代器的每一个返回值当做参数传给 key=func 中的 func(一般用 lambda 表达式定 义) ,然后将 func 的执行结果传给 key,然后以 key 为标准进行大小的判断
  • map(func,iterable) 函数 ,第一个参数是函数,第二个参数是可迭代对象

    • 函数会作用在可迭代对象内容的每一个元素上进行计算,返回一个新的可迭代内容
  • filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进判 然后返回 True 或 False,最后将返回 True

  • zip 函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个 tuple, 然后返回一个可迭代的 zip 对象

匿名函数

  • 定义:在定义函数的时候,如果不想给函数起名字,可以用lambda定义一个匿名函数

  • 语法:变量名=lambda [参数]:表达式

    • 注意:1.表达式中不能有循环,return,可以包含if..else

      ​ 2.表达式的结果直接返回

  • lambda 表达式也会产生一个新的局部作用域。在 def 定义的函数中嵌套 labmbda 表达式,

    lambda 表达式 能够看到所有 def 定义的函数中可用的变量

闭包和装饰器

  • 闭包

    • 1.嵌套 2.内层函数使用外层函数的参数或者变量 3.外层函数返回内层函数的引用
  • 装饰器:本质就是一个闭包函数

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