Day10 函數(shù)

函數(shù)

  1. 什么是匿名函數(shù)

    匿名函數(shù)還是函數(shù)蝗罗,只是聲明的格式和普通函數(shù)都不一樣艇棕,只適用于函數(shù)功能比較簡(jiǎn)單的函數(shù)

  2. 匿名函數(shù)的聲明

    • 語(yǔ)法
      變量名 = lambda 形參列表:返回值
    • 說(shuō)明
      變量名 - 相當(dāng)于函數(shù)名
      lambda - 聲明匿名函數(shù)的關(guān)鍵字
      形參列表 - 和普通函數(shù)的形參列表一樣
      :- 固定寫(xiě)法
      返回值 - 相當(dāng)于普通函數(shù)中只有一條return語(yǔ)句的函數(shù)
  3. 匿名函數(shù)的調(diào)用和普通函數(shù)一樣

    # 1.匿名函數(shù)的參數(shù)也可以設(shè)置默認(rèn)值(不會(huì)有類(lèi)型提示)
    # 2.匿名函數(shù)不能通過(guò)添加:類(lèi)型名來(lái)說(shuō)明參數(shù)類(lèi)型
    
    func1 = lambda x, y = 0: 100
    func1(10,20)
    print(func1(10,20))
    # 匿名函數(shù)中可以設(shè)置不定長(zhǎng)參數(shù)
    func2 = lambda  *nums: sum(nums)
    print(func2(1, 2, 3, 4))
    
    func3 = lambda x:print(x)
    print(func3(100))  # None
    

作用域

  1. 什么是變量的作用域
    就是變量能夠使用的范圍

  2. 全局變量和局部變量

    • 全局變量 - 沒(méi)有聲明在函數(shù)或者類(lèi)中的變量都是全局變量
      全局變量的作用域是從聲明開(kāi)始到整個(gè)文件結(jié)束,都可以用

    • 局部變量 - 聲明在函數(shù)或者類(lèi)中變量就是局部變量

    • 總結(jié):當(dāng)我們調(diào)用函數(shù)的時(shí)候串塑,系統(tǒng)會(huì)自動(dòng)在棧區(qū)間沼琉,專(zhuān)門(mén)為函數(shù)開(kāi)辟一塊獨(dú)立的內(nèi)存空間,
      ? 用來(lái)保存在函數(shù)中聲明的變量桩匪,(形參也是屬于聲明在函數(shù)中的變量)當(dāng)函數(shù)調(diào)用結(jié)束后打瘪,這個(gè)棧區(qū)間會(huì)自動(dòng)銷(xiāo)毀
      ? -----(函數(shù)調(diào)用過(guò)程是一個(gè)壓棧的過(guò)程)

      # 1.全局變量1
      # 變量a是全局變量
      a = 100
      print(a)
      
      for x in range(5):
          print('循環(huán)里:', a)
      
      
      def func1():
          print('函數(shù)中:', a)
      
      
      func1()
      
      # 2.全局變量
      # 這兒的y也是全局變量
      for y in range(3):
          print(y)
      
      
      # 3.局部變量
      # a.函數(shù)的形參就相當(dāng)于聲明在函中的變量,所以就是局部變量
      
      def func3(num1):
          print(num1)
          for x in range(3):
              print(num1)
      
      
      func3(10)
      
      # 4.如果全局變量和局部變量同名吸祟,那么在局部變量作用域中使用的是局部變量瑟慈,外部使用的是全局變量
      aa = 100
      
      
      def func5():
          aa = 200
          print('函數(shù)里', aa)
      
      
      print(func5())
      print(aa)
      
  3. global - 在函數(shù)中聲明一個(gè)全局變量(只能在函數(shù)中使用)
    在函數(shù)中:
    global 變量名
    變量名 = 值

    bb = 111
    
    
    def func6():
        global bb
        bb = 222
        print(bb)
    
    
    func6()
    print(bb)
    
  4. nonlocal - 想要在局部的局部去修改局部變量的值,就使用nonlocal對(duì)變量進(jìn)行說(shuō)明

    nonlocal 局部變量
    局部變量 = 值

    def func11():
        abc = 123
    
        def func22():
            nonlocal abc
            abc = 333
            print('func22', abc)
    
        func22()
    
        print('func11', abc)
    
    
    func11()
    # func11 123
    
    
    list1 = []
    for i in range(5):
        list1.append(lambda x: x * i)
    
    """
    函數(shù)在調(diào)用的時(shí)候不會(huì)執(zhí)行
    list1 = []
    i = 0 list1[lambda x : x*i]
    i = 1 list1[lambda x : x*i, lambda x : x*i]
    i = 2 list1[lambda x : x*i, lambda x : x*i, lambda x : x*i]
    i = 3 list1[lambda x : x*i, lambda x : x*i, lambda x : x*i, lambda x : x*i]
    i = 4 list1[lambda x : x*i, lambda x : x*i, lambda x : x*i, lambda x : x*i, lambda x : x*i]
    """
    
    print(list1[0](3))
    print(list1[3](3))
    
    a = 10
    
    
    func8 = lambda x: x*a
    a = 20
    print(func8(2))
    

函數(shù)作為變量

python中聲明函數(shù)屋匕,其實(shí)就是聲明一個(gè)類(lèi)型是function的變量葛碧,函數(shù)名就是變量名

  1. 給別的變量賦值

    # 聲明了一個(gè)列表變量 list1
    list1 = [1, 2, 3]
    
    
    # 聲明一個(gè)函數(shù)變量func1
    def func1():
        print('我是一個(gè)函數(shù)')
        return 10
    
    
    # 列表變量給另外一個(gè)變量list2賦值
    list2 = list1
    # 賦值后就可以當(dāng)做列表來(lái)用
    print(list2[1])
    print(list2[::-1])
    
    # 使用函數(shù)變量給另外一個(gè)函數(shù)變量func2賦值
    func2 = func1
    # 賦值后func2就可以當(dāng)做函數(shù)來(lái)使用
    func2()
    print(func2())
    
  2. 變量作為容器類(lèi)數(shù)據(jù)的元素

    a = 10
    nums = [a, 100, 100]
    print(nums)
    print(nums[0])
    
    
    def func3():
        print('abc')
        return 10
    
    
    list2 = [func3, func3(), 100]
    print(list2)
    print(list2[0])
    print(list2[0]())
    
  3. 變量作為函數(shù)的實(shí)參
    ? 函數(shù)作為函數(shù)的實(shí)參
    ? 函數(shù)1作為函數(shù)2的實(shí)參 -- 函數(shù)2是一個(gè)高階函數(shù)

    a = 10
    
    
    def func4(n: int):
        print(n + n - 1)
    
    
    func4(a)
    
    
    def func5(x):
        print(x)
        x(111)
    
    
    func5(func4)
    func5(lambda x: x*2)
    
  4. 函數(shù)作為參數(shù)的應(yīng)用:sort函數(shù)
    列表.sort(key=None, reverse=True)
    參數(shù)key - 要求是一個(gè)帶有一個(gè)參數(shù),并且返回值是bool的函數(shù)过吻。這兒的參數(shù)指向的是列表中元素
    ? 確定按照元素的某一個(gè)值進(jìn)行排序

    list1 = [1, 2, 9, 8, 7, 5]
    list1.sort(reverse=True)
    print(list1)
    
    all_students = [
        {'name': '張三', 'age': 19, 'score': {'c': 78, 'm': 90, 'e': 40}},
        {'name': '李四', 'age': 24, 'score': {'c': 89, 'm': 60, 'e': 90}},
        {'name': '王五', 'age': 35, 'score': {'c': 78, 'm': 67, 'e': 86}},
        {'name': '趙六', 'age': 46, 'score': {'c': 34, 'm': 99, 'e': 50}}
    ]
    
    
    print(sum)
    # 這的item是需要排序的列表元素
    def func(item):
        return item['age']
    
    
    # all_students.sort(key=func)
    all_students.sort(key=lambda item: item['age'])
    # all_students.sort(key=lambda item: item['score'])
    all_students.sort(key=lambda item: (item['score']['c'] + item['score']['c'] + item['score']['c']))
    print(all_students)
    
  5. 變量作為函數(shù)的返回值
    函數(shù)1作為函數(shù)2的返回值 - 函數(shù)2是返回值高階函數(shù)

    def operation(char):
        if char == '+':
            def fun1(*nums):
                return sum(nums)
            return fun1
        elif char == '-':
            def fun2(*nums):
                if not nums:
                    return 0
                sum1 = nums[0]
                for index in range(1,len(nums)-1):
                    sum1 -= nums[index]
            return fun2
    
    
    print(operation('+')(1,2,3,4))
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末进泼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纤虽,更是在濱河造成了極大的恐慌乳绕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逼纸,死亡現(xiàn)場(chǎng)離奇詭異洋措,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)杰刽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)菠发,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)王滤,“玉大人,你說(shuō)我怎么就攤上這事滓鸠⊙阆纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵糜俗,是天一觀的道長(zhǎng)踱稍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)悠抹,這世上最難降的妖魔是什么珠月? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮锌钮,結(jié)果婚禮上桥温,老公的妹妹穿的比我還像新娘引矩。我一直安慰自己梁丘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布旺韭。 她就那樣靜靜地躺著氛谜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪区端。 梳的紋絲不亂的頭發(fā)上值漫,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音织盼,去河邊找鬼杨何。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沥邻,可吹牛的內(nèi)容都是我干的危虱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼唐全,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼埃跷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起邮利,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弥雹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后延届,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剪勿,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年方庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厕吉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赦颇。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赴涵,靈堂內(nèi)的尸體忽然破棺而出媒怯,到底是詐尸還是另有隱情,我是刑警寧澤髓窜,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布扇苞,位于F島的核電站,受9級(jí)特大地震影響寄纵,放射性物質(zhì)發(fā)生泄漏鳖敷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一程拭、第九天 我趴在偏房一處隱蔽的房頂上張望定踱。 院中可真熱鬧,春花似錦恃鞋、人聲如沸崖媚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)畅哑。三九已至,卻和暖如春水由,著一層夾襖步出監(jiān)牢的瞬間荠呐,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工砂客, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泥张,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓鞠值,卻偏偏與公主長(zhǎng)得像媚创,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子齿诉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容