2018-10-11 Day 10 函數(shù)應(yīng)用

1.匿名函數(shù)

1.普通函數(shù):
def 函數(shù)名(參數(shù)列表):
函數(shù)體

2.匿名函數(shù):
函數(shù)名 = lambda 參數(shù)列表:返回值

說明:
函數(shù)名 -> 變量名
lambda -> 關(guān)鍵字
參數(shù)列表 -> 參數(shù)名1, 參數(shù)名2...
: -> 固定的
返回值 -> 相當(dāng)于只有一個return語句的函數(shù)體

匿名函數(shù)的調(diào)用和普通函數(shù)一樣:函數(shù)名(實參列表),也支持位置參數(shù)隆檀、關(guān)鍵字參數(shù)滓技、參數(shù)設(shè)置默認值、不定長參數(shù)

寫一個匿名函數(shù),功能是求兩個數(shù)的和

sum1 = lambda num1=10, num2=3: num1+num2

print(sum1(10, 20))
print(sum1(num1=100, num2=200))
print(sum1())

相當(dāng)于上面的匿名函數(shù)

def sum1(num1, num2):
    return num1+num2

練習(xí):求1+2+3+...+n的和

sum2 = lambda n: sum(range(n+1))
print(sum2(100))

練習(xí):讀程序

funcs = []
for item in range(1, 5):
    funcs.append(lambda x: x*item)
print(item)

print(funcs[0](2))  # 2*4   8
print(funcs[1](2))  # 2*4   8
"""
item = 1 ~ 4
item = 1  [lambda x: x*item]
item = 2  [lambda x: x*item, lambda x: x*item]
item = 3  [lambda x: x*item, lambda x: x*item, lambda x: x*item]
item = 4  [lambda x: x*item, lambda x: x*item, lambda x: x*item, lambda x: x*item]
"""

2.變量的作用域

1.變量的作用域
變量的作用域指的是變量能夠使用的范圍

2.全局變量
全局變量:聲明在函數(shù)和類的外面的變量都是全局變量;作用域是從聲明開始泊交,到整個py文件結(jié)束(任何地方都可以使用)

3.局部變量
聲明在函數(shù)和類中的變量都是局部變量。聲明在函數(shù)的局部變量礼仗,作用域是從聲明開始到整個函數(shù)結(jié)束

4.global關(guān)鍵字
在函數(shù)中說明一個變量是全局變量
注意:只能在函數(shù)中使用

5.nonlocal關(guān)鍵字
想要在局部的局部中修改局部變量的值

def func3():
    abc = 100
    def func4():
        nonlocal abc
        abc = 200
        print('f4:', abc)
    func4()
    print('f3:', abc)

func3()

3.函數(shù)作為變量

聲明函數(shù)就是聲明一個類型是function的變量, 函數(shù)名實質(zhì)就是變量名祸憋。

1.變量可以給其他變量賦值

func1 = lambda x: print(x)
func2 = func1
func2(10)
# 聲明一個變量func11会宪,類型是function
def func11():
    print('我是函數(shù)')
# 用一個函數(shù)給變量a賦值,a也是一個函數(shù)
a = func11
a()
print(a)

# 將函數(shù)func11的返回值給b蚯窥,b的值是None
b = func11()
print(b)

2.函數(shù)作為列表的元素

a = 10
list1 = [1, a]
print(list1, list1[1]+100)

def func22():
    print('我又是函數(shù)')
    return 10

list2 = [1, func22, func22()]
print(list2)

3.將函數(shù)作為參數(shù)
應(yīng)用:sort的使用
列表.sort(key=None, reverse=False)
使用sort的時候,可以通過給key賦一個函數(shù)變量掸鹅,來規(guī)定列表中的元素按照什么標(biāo)準(zhǔn)來排序塞帐。
這兒的函數(shù)變量要求要有一個參數(shù)和一個返回值。參數(shù)代表列表中的元素巍沙,返回值代表按照那個標(biāo)準(zhǔn)排序

list1 = [1, 45, 8, 89]
list1.sort()
print(list1)
list2 = [
    {'name': '張三', 'age': 20, 'score': 90},
    {'name': '李四', 'age': 28, 'score': 70},
    {'name': '王五', 'age': 18, 'score': 89}
]
# 根據(jù)成績排序
def get_age(item):
    return item['score']
list2.sort(key=get_age)
list2.sort(key=lambda item: item['score'])
print(list2)

4.將函數(shù)作為返回值

根據(jù)運算符號葵姥,返回對應(yīng)的功能

def operation(operator: str):
    if operator == '+':
        def add(*args, **kwargs):
            """求和"""
            sum1 = 0
            for item in args:
                sum1 += item
            for key in kwargs:
                sum1 += kwargs[key]
            return sum1
        return add

    elif operator == '*':
        def func2(*args, **kwargs):
            """求乘積"""
            sum1 = 1
            for item in args:
                sum1 *= item
            for key in kwargs:
                sum1 *= kwargs[key]
            return sum1
        return func2


f1 = operation('+')   # f1就是有兩個不定長參數(shù),功能是求和的函數(shù)
re = f1(10, 20, a=2, b=3)
print(re)


print(operation('+')(10, 20, a=2, b=3))
print(operation('*')(1, 2, 3, 4))

4.遞歸函數(shù)

1.什么是遞歸函數(shù)
遞歸函數(shù):函數(shù)中調(diào)用函數(shù)本身句携,這樣的函數(shù)就是遞歸函數(shù)(自己調(diào)自己)

循環(huán)能做的事情遞歸都可以做榔幸,但是實際上循環(huán)能解決的問題絕對不選遞歸

2.怎么寫遞歸函數(shù)
第一步:確定臨界值(循環(huán)結(jié)束的條件), 讓函數(shù)結(jié)束
第二步:找關(guān)系,假設(shè)函數(shù)的功能已經(jīng)實現(xiàn),找f(n)和f(n-1)的關(guān)系
第三步:根據(jù)關(guān)系矮嫉,用f(n-1)實現(xiàn)f(n)的功能

yt_sum(5) n=5 5!=1 return yt_sum(4)+5
yt_sum(4) n=4 4!=1 return yt_sum(3) + 4
yt_sum(3) n=3 3!=1 return yt_sum(2) + 3
yt_sum(2) n=2 2!=1 return yt_sum(1) + 2
yt_sum(1) n=1 1==1 return 1

寫一個遞歸函數(shù)削咆,實現(xiàn):1+2+3+...n

def yt_sum(n):
    # 1.找臨界值
    if n == 1:
        return 1

    # 2.找關(guān)系
    """
    yt_sum(n) = 1+2+3+...+n
    yt_sum(n-1) = 1+2+3+...+n-1
    yt_sum(n) = yt_sum(n-1)+n
    """
    # 3.用f(n-1)實現(xiàn)f(n)的功能
    return yt_sum(n-1) + n


print(yt_sum(5))

用遞歸實現(xiàn)以下功能

n = 3


**

n = 4



**

f(n)和f(n-1)的關(guān)系:
先打印n顆星
f(n-1)

def print_star(n):
    if n == 1:
        print('*')
        return

    print('*'*n)
    print_star(n-1)


print_star(5)

總結(jié):遞歸,能不用就不用3佟态辛!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挺尿,隨后出現(xiàn)的幾起案子奏黑,更是在濱河造成了極大的恐慌,老刑警劉巖编矾,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熟史,死亡現(xiàn)場離奇詭異,居然都是意外死亡窄俏,警方通過查閱死者的電腦和手機蹂匹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凹蜈,“玉大人限寞,你說我怎么就攤上這事⊙鎏梗” “怎么了履植?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悄晃。 經(jīng)常有香客問我玫霎,道長,這世上最難降的妖魔是什么妈橄? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任庶近,我火速辦了婚禮,結(jié)果婚禮上眷蚓,老公的妹妹穿的比我還像新娘鼻种。我一直安慰自己,他們只是感情好沙热,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布普舆。 她就那樣靜靜地躺著恬口,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沼侣。 梳的紋絲不亂的頭發(fā)上祖能,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音蛾洛,去河邊找鬼养铸。 笑死,一個胖子當(dāng)著我的面吹牛轧膘,可吹牛的內(nèi)容都是我干的钞螟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谎碍,長吁一口氣:“原來是場噩夢啊……” “哼鳞滨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蟆淀,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤拯啦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后熔任,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褒链,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年疑苔,在試婚紗的時候發(fā)現(xiàn)自己被綠了甫匹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惦费,死狀恐怖兵迅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薪贫,我是刑警寧澤喷兼,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站后雷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吠各。R本人自食惡果不足惜臀突,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贾漏。 院中可真熱鬧候学,春花似錦、人聲如沸纵散。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掰茶,卻和暖如春暇藏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背濒蒋。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工盐碱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沪伙。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓瓮顽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親围橡。 傳聞我的和親對象是個殘疾皇子暖混,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

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

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,340評論 0 2
  • “踏踏”馬蹄聲聲,伴隨著一顆激動不安的心翁授,我不由握緊了馬繩拣播,今天我登上了碣石山,那座曾經(jīng)秦皇黔漂、漢武登上的...
    費澳冉閱讀 383評論 0 0
  • 1~還是那句話诫尽,做任何事情之前,都要先做好充足準(zhǔn)備炬守,把需要了解的信息整理好牧嫉,這樣可以節(jié)省很多時間。 拆解目標(biāo)减途,把目...
    唐心輝閱讀 190評論 2 2
  • 同事調(diào)試一個問題酣藻,本地正常,服務(wù)器上面正常鳍置,已經(jīng)山窮水盡的時候辽剧,修改了log4j的日志,將info該為debug級...
    enshunyan閱讀 3,232評論 0 0
  • 云卷云舒幾段情税产,花開花落月自明怕轿。 我在浮沉為寄客。所幸辟拷,金杯美酒為伊傾撞羽。 醉罷漂臨云水路。他日衫冻,或能再度晚冬晴诀紊。 ...
    我和我的洗衣機閱讀 194評論 0 0