2018-08-30 day9- 函數(shù)

總結(jié)

一.匿名函數(shù)

匿名函數(shù)本質(zhì)還是函數(shù),之前函數(shù)的所有內(nèi)容都適用于它

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

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

2.說明:

函數(shù)名:變量名
lambda:聲明匿名函數(shù)的關(guān)鍵字
參數(shù)列表:參數(shù)名1,參數(shù)名2,...
冒號:固定寫法
返回值:表達式,表達式的值就是返回值

3.匿名函數(shù)的調(diào)用和普通函數(shù)一樣,函數(shù)名(實參列表)

寫一個匿名函數(shù)計算兩個數(shù)的和

# 聲明一個匿名函數(shù)
my_sum = lambda x, y: x+y
# 調(diào)用匿名函數(shù)
result = my_sum(10, 20)
print(result)

練習1:寫一個匿名函數(shù),獲取指定列表指定下標的值的1/2

get_value = lambda list1,index=0: list1[index]/2
# 位置參數(shù)
print(get_value([1, 2, 3, 4], 2))
# 關(guān)鍵字參數(shù)
print(get_value(index=1, list1=[10, 78, 39]))

練習2:獲取一個列表的所有的元素的和與平均值(sum函數(shù)可以計算一個序列的和)

list_operation = lambda list1: (sum(list1), sum(list1)/len(list1))
sum1, average = list_operation([1, 2, 3, 4, 5, 6])
print(sum1, average)
# 補充:python中函數(shù)可以有多個返回值的,就是在一個return后返回多個值,多個值之間用逗號隔開
def list_operation2(list1):
    return sum(list1), sum(list1)/len(list1)    # 最終是將多個返回值放到一個元祖中返回的

print(list_operation2([1, 2, 3, 4, 5, 6]))

二.變量的作用域

1.函數(shù)的調(diào)用過程是一個壓棧的過程

每次調(diào)用一個函數(shù),系統(tǒng)就會在內(nèi)存區(qū)域中的棧區(qū)間去開辟空間,保存函數(shù)調(diào)用過程中產(chǎn)生的數(shù)據(jù)
當函數(shù)調(diào)用完成,對應的棧區(qū)間會自動銷毀
函數(shù)調(diào)用時產(chǎn)生的棧區(qū)間中保存的數(shù)據(jù)有:形參,在函數(shù)中聲明的變量

2.作用域:指的是一個變量能夠使用的范圍
3.全局變量和局部變量

a.全局變量:聲明在函數(shù)和類的外面的變量都是全局變量
全局變量的作用域:從聲明開始到文件結(jié)束(任何地方都可以使用)
b.局部變量:聲明在函數(shù)中或者類中的變量都是全局變量
局部變量的作用域:從聲明開始到函數(shù)或類結(jié)束

1恒序、全局變量(global)

全局變量:就是聲明在函數(shù)和類外面的變量都是全局變量。
全局變量作用域:從聲明開始到文件結(jié)束。

2净响、局部變量(local)

局部變量:聲明在函數(shù)中或者類的變量就是局部變量。
局部變量的作用域:從聲明開始到函數(shù)結(jié)束(類結(jié)束)财边。
注意:函數(shù)的參數(shù)是聲明在函數(shù)中的局部變量氧腰,同樣不能在別的函數(shù)中使用锨苏。

# x, y, z都是局部變量
def func3(x, y):
  z = 'ab'

在局部區(qū)域內(nèi)修改全局變量的值 --- global

c = 100
def func1():
    global c   #修改全局變量
    c = 200
func1()
print(c)

在局部的局部中修改局部變量 --- nonlocal

def func5():
    nn = 10
    def func6():
        nonlocal nn
        nn = 20
        print('func6',nn)
    func6()
    print('func5', nn)
func5()

func6 20
func5 20

三.遞歸函數(shù)

1.遞歸函數(shù):

在函數(shù)的函數(shù)體中調(diào)用函數(shù)本身的函數(shù)

2.遞歸的特點

while循環(huán)能做的遞歸函數(shù)都可以

3.怎么寫遞歸函數(shù)

第一步:找臨界值(找到讓循環(huán)結(jié)束的值/找到能夠確定函數(shù)結(jié)果的值)
第二步:假設函數(shù)的功能已經(jīng)實現(xiàn)的前提下,找關(guān)系(找f(n)和f(n-1)/當次循環(huán)和上次循環(huán)的關(guān)系)
第三步:根據(jù)f(n)和f(n-1)的關(guān)系,通過后者實現(xiàn)前者效果

用遞歸實現(xiàn)1+2+3...+n

def my_sum(n):
    # 1.找臨界值(在臨界值的位置一定要讓函數(shù)結(jié)束)
    if n == 1:
        return 1
    # 2.找關(guān)系

    """
    my_sum(n):1+2+3...+n
    my_sum(n-1):1+2+3...+n-1
    my_sum(n) = my_sum(n-1)+n
    """
    # 3.使用后者實現(xiàn)前者效果
    return my_sum(n-1)+n
print(my_sum(10))

四.模塊和包的使用

封裝:

1.函數(shù):對實現(xiàn)某一特定功能的代碼段的封裝
2.模塊:對變量,函數(shù),類進行封裝
模塊:一個py文件就是一個模塊

def multiply(*numbers):
    sum1 = 1
    for item in numbers:
        sum1 *= item
    return sum1
print(multiply(1, 2, 5))
1.如何使用其他模塊中的內(nèi)容

a.import 模塊
b.from 模塊 import 模塊中的內(nèi)容

2.重命名

1.import 模塊(as 重命名)
通過模塊.內(nèi)容的形式去使用模塊中的內(nèi)容(能夠使用的是全局變量耿币,函數(shù)梳杏,類)
2.from 模塊 import 模塊中的內(nèi)容
從模塊里面導入需要的內(nèi)容(可以是多個)
3.from 模塊 import 模塊中的內(nèi)容 as 名稱(自己定的名字),可以直接使用淹接,不用加模塊名。
從模塊里面導入需要的內(nèi)容叛溢,然后把內(nèi)容名稱設置成自己設定的塑悼。可以直接使用自己定義的名稱楷掉,不用加模塊名厢蒜。
from 模塊 import * 即導入模塊內(nèi)的所有內(nèi)容。
4.可以導入自己寫的模塊烹植,也可以導入自定義的模塊

將不希望被別的模塊導入(執(zhí)行)的代碼放到模塊的這個if語句中
if __name__ == '__main__':

每個模塊都有一個name屬性,這個屬性的值默認就是當前模塊的文件名
當當前模塊正在被執(zhí)行(直接在當前這個模塊中點了run)的時候,name屬性的值是'main'
在一個模塊中,將不希望被其他模塊導入的代碼寫在if name == 'main'中,
希望被導入的放到這個if外面
建議:函數(shù)的聲明,類的聲明一般寫在if外面,其他的寫在if里面(想要被外部使用的全局變量也可以寫在外面)

作業(yè)

1.寫一個函數(shù)將一個指定的列表中的元素逆序(例例如[1, 2, 3] -> [3, 2, 1])(注意:不要使?用列表自帶的逆序函數(shù))

def reverse(list1:list):
   list1 = list1[::-1]
    return list1

list1 = reverse([1,2,3,6,7])
print('逆序的列表為:{}'.format(lst))


2.寫一個函數(shù)斑鸦,提取出字符串中所有奇數(shù)位上的字符

def extract(str1:str):
    str1 = str1[1::2]
    return str1
str2 = extract('wqerwedf')
print('奇數(shù)位上的字符串為:{}'.format(str2))

3.寫一個匿名函數(shù),判斷指定的年是否是閏年

year=lambda x:x%4==0

4.使用遞歸打硬莸瘛:

n = 3的時候
@
@@
@@@
n = 4的時候:
@
@@
@@@
@@@@

def dgdy(n,a=[]):
    
    if n ==1:
        print((len(a)+1)*'@')
        return
    a.append('@')
    print('@'*len(a))
    return dgdy(n-1),a


dgdy(8)

5.寫函數(shù)巷屿,檢查傳入列列表的長度,如果大于2墩虹,那么僅保留前兩個長度的內(nèi)容嘱巾,并將新內(nèi)容返回給調(diào)用者。

def two(n):
    new=[]
    for i in n[:2]:
        new.append(i)
    return new

6.寫函數(shù)诫钓,利用遞歸獲取斐波那契數(shù)列中的第 10 個數(shù)旬昭,并將該值返回給調(diào)用者。(自己背著寫)

def func(n:int):

    if n == 1 or n == 2:
        n = 1
        return n
    return func(n-1) + func(n-2)

a = func(10)
print(a)

7.寫一個函數(shù)菌湃,獲取列表中的成績的平均值问拘,和最?高分

def average(lst:list):
    average1 = sum(lst)/len(lst)
    max1 = max(lst)
    return average1,max1

a,b = average([1,2,3,4,5,6,7])
print('平均值%f,最大值%f'%(a,b))

8.寫函數(shù)惧所,檢查獲取傳入列表或元組對象的所有奇數(shù)位索引對應的元素骤坐,并將其作為新的列表返回給調(diào)?用者

def func(sequence):
    sequence = list(sequence[1::2])
    return sequence
a = func([1,2,3,4,5,6,7,8,9])
b = func((1,2,3,4,5,6,7,8,9))
print(a,b)

效果
[2, 4, 6, 8] [2, 4, 6, 8]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纯路,隨后出現(xiàn)的幾起案子或油,更是在濱河造成了極大的恐慌,老刑警劉巖驰唬,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顶岸,死亡現(xiàn)場離奇詭異腔彰,居然都是意外死亡,警方通過查閱死者的電腦和手機辖佣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門霹抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卷谈,你說我怎么就攤上這事杯拐。” “怎么了世蔗?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵端逼,是天一觀的道長。 經(jīng)常有香客問我污淋,道長顶滩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任寸爆,我火速辦了婚禮礁鲁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赁豆。我一直安慰自己仅醇,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布魔种。 她就那樣靜靜地躺著析二,像睡著了一般。 火紅的嫁衣襯著肌膚如雪务嫡。 梳的紋絲不亂的頭發(fā)上甲抖,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音心铃,去河邊找鬼准谚。 笑死,一個胖子當著我的面吹牛去扣,可吹牛的內(nèi)容都是我干的柱衔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼愉棱,長吁一口氣:“原來是場噩夢啊……” “哼唆铐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奔滑,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艾岂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朋其,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體王浴,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡脆炎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了氓辣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秒裕。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钞啸,靈堂內(nèi)的尸體忽然破棺而出几蜻,到底是詐尸還是另有隱情,我是刑警寧澤体斩,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布梭稚,位于F島的核電站,受9級特大地震影響硕勿,放射性物質(zhì)發(fā)生泄漏哨毁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一源武、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧想幻,春花似錦粱栖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至食店,卻和暖如春渣淤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吉嫩。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工价认, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人自娩。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓用踩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忙迁。 傳聞我的和親對象是個殘疾皇子脐彩,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 01.匿名函數(shù) 匿名函數(shù)本質(zhì)還是函數(shù),之前函數(shù)的所有的內(nèi)容都適用于它 1.匿名函數(shù)的聲明:函數(shù)名 = lambda...
    Ftr_閱讀 235評論 0 0
  • 一姊扔、匿名函數(shù) 匿名函數(shù)本質(zhì)還是函數(shù)惠奸,之前函數(shù)的所有內(nèi)容仍然適用。 1恰梢、匿名函數(shù)的聲明 函數(shù)名 = lambda ...
    Deathfeeling閱讀 134評論 0 1
  • LeetCode 153 Find Minimum in Rotated Sorted Array I Suppo...
    ShuiLocked閱讀 646評論 0 0
  • 當組織腦袋的成長速度跟不上屁股的成長速度時就會出現(xiàn):1.累死寶寶了 2.寶寶想爆粗 3.不拒絕 不主動 不付出
    JoyceZhang閱讀 155評論 0 0
  • 《鵝卵石》 把一塊石頭棱角磨平的 是另外一些石頭 《牡蠣》 依附于礁石 最先粉身碎骨 《船》 輕于眾生 才能凌駕波...
    在星海陽光下旅行閱讀 108評論 0 3