Python學習總結【連載】(九)

Python學習總結【連載】(九)

2018.06.23 Juttachen


概述

+ 28 函數(shù)變量

  • 函數(shù)名
  • 為其他變量賦值
  • 作為參數(shù)
  • 作為返回值

+ 29 匿名函數(shù)

  • 格式

+ 30 遞歸函數(shù)

  • 定義
  • 作用
  • 步驟
  • 函數(shù)的調用過程

+ 31 模塊與函數(shù)

  • 模塊的類型

二十八本冲、函數(shù)變量

我們在聲明函數(shù)的時候,其實就是在聲明一個類型是函數(shù)類型(function)的變量。
普通變量能做的事情,函數(shù)變量都能做屑迂。

1.函數(shù)名就是函數(shù)類型變量(類型名:function),存的是函數(shù)入口的地址突勇。

    def func1():
        print('aaa')

    print(type(func1))
    num = 10
    print(type(num))

2.可以用一個變量給另外一個變量賦值

注意:a = func1() #這樣賦值,是將func1的返回值賦給a

    a = func1 #將函數(shù)變量func1賦給a,a就會變成一個函數(shù)
    a() #現(xiàn)在就可以用函數(shù)變量a件舵,去調用函數(shù)func1

他們指向同一個地址骚秦,所以運行方式一樣她倘。

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

    def calculate(num1,num2,func1):
        '''num1 = 10 num2 =20 fn=func_add'''
        '''如果num1不是int 或者float數(shù)據(jù)'''
        if not(isinstance(num1,int) or isinstance(num1,float)):
            print('num1不是數(shù)字')
        if not(isinstance(num2,int) or isinstance(num2,float)):
            print('num2不是數(shù)字')
            return None
            return func1(num1,num2)

    def func_add(m,n):
        return m+n

    def fumc_sub(m,n):
        return m-n


    func2(10)
    result = calculate(10,20,func_add)
    print(result)

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

例子:寫一個函數(shù),func2('+') -> 返回求和的功能作箍;如果是('')——>返回求乘積的功能*

    def func2(char):
        if char == '+':
            def func2_add(*nums):
                sum1 = 0
                for x in nums:
                    sum1 += x
                return sum1
            return func2_add
        if char =='*':
            def func2_product(*nums):
                pro1 = 1
                for x in nums:
                    pro1 += x
                return pro1
            return func2_product

    result = func2('+') # result是一個求和功能的函數(shù)的函數(shù)變量
    print('aaa',result(1,2,3,4))

    result2 = func2('*')(10,20)
    print(result2)

    def func4():
        list1 = [1,2,3]
        return list1

    # 列表作為返回(對象變量作為返回值)
    result = func4()
    print(result)
    print(func4()[0])

二十九帝牡、匿名函數(shù)

python 中使用lambda關鍵字來聲明一個匿名函數(shù)

1.格式

lambda 參數(shù)列表:返回值
參數(shù)列表:多個參數(shù)之間用逗號隔開
例子:使用普通函數(shù)實現(xiàn)求兩個數(shù)的和

    def func1(num1,num2):
        return num1 + num2
    func1(10,20)

    # 使用匿名函數(shù)實現(xiàn)
    func2 = lambda num1,num2 : num1 + num2
    func2(10,20)

相當于匿名函數(shù)就是可以替代函數(shù)體里只有return或者只有一句命令的函數(shù)。
練習:使用匿名函數(shù)求指定列表中蒙揣,指定的兩個下標對應的元素的和

    list1 = [1,2,3,4]
    func3 = lambda list1,num1,num2 : list1[num1]+list1[num2]
    print(func3(list1,0,3))

    def calculate(num1,num2,fn):
        return fn(num1,num2)

    sum1 = calculate(10,20,lambda a,b:a+b)
    print(sum1)

三十、遞歸函數(shù)

1.定義

在函數(shù)的聲明中調用函數(shù)本身就是遞歸函數(shù)开瞭。
例子:這里的func1就是一個遞歸函數(shù)懒震,但是是一個死循環(huán)
def func1()
print('aaa')
func1()
func1()

2.遞歸作用

理論上循環(huán)能夠做到的事情遞歸都可以做(但實際除非是非用不可的情況一般不用遞歸)原因:要調動函數(shù)罩息,調動函數(shù)需要內存空間,還需要銷毀个扰,消耗空間且運行麻煩瓷炮,損耗cpu

3.步驟:

a.確定臨界值(結束函數(shù)的時刻)
b.假設函數(shù)的功能已經(jīng)實現(xiàn),然后找到f(n)和f(n-1)關系
c.使用f(n-1)與f(n)的關系去實現(xiàn)f(n)的功能

練習:計算1+2+3+4+...+n
方法一:使用循環(huán)

    def func1(n):
        sum1 = 0
        for x in range(1,n+1):
            sum1 += x
        return sum1

方法二:使用遞歸

    def func2(n):
        # 1.確定臨界值
        if n == 1:
            return 1
        # 2.假設func2功能實現(xiàn)了递宅,找func2(n-1),func2(n)的關系
        # func2(n-1)=1+2+3+...+n-1
        # func2(n) = 1+2+3+...+n-1+n = func2(n-1)+n
        # 3.通過func2(n-1)去實現(xiàn)func2(n)的功能
        return func2(n-1)+n

    print(func1(10))
    print(func2(10))

練習:用遞歸實現(xiàn):24...*n(要求n是偶數(shù))

    def func3(n):
        if n % 2 == 1:
            print('n必須是偶數(shù)')
            return None
        else:
            if n == 2:
                return 2
            return func3(n-2)*n
    print(func3(10))

注意:無用代碼不要寫娘香,不必一定要else,在函數(shù)中可以用return結束的就多用return办龄。
例子:

n = 5
*****
****
***
**
*

    def func4(n):
        if n == 1:
            # 1.確定臨界值(一定要讓函數(shù)結束)
            print('*')
            return None
            # 需要結束的話烘绽,直接結束就好,不要和返回值混淆在一起了俐填。
        print('*'*n)
        func4(n-1)
        # f(n)和f(n-1)關系:先打印一行n個*安接,再執(zhí)行f(n-1)
    func4(5)

例子:

*
**
***
****
*****

    def func5(n):
        if n == 1:
            print('*')
            return None
        func5(n-1)
        print('*'*n)
    func5(5)

4.函數(shù)的調用過程

a.調用函數(shù)的時候,首先在棧中開辟一塊內存空間英融,用來保存函數(shù)調用過程中產(chǎn)生的數(shù)據(jù)
(包括函數(shù)的參數(shù)和在函數(shù)中聲明的變量)
b.當函數(shù)執(zhí)行完成后盏檐,被調用函數(shù)對應的內存空間會被回收(釋放)

棧:是內存中的一塊特殊的區(qū)域。數(shù)字和字符串的值是存在棧里面
堆:對象是存在堆里面的(在Python中不用我們擔心驶悟,但是在c語言中這些對象是需要程序員自己申請內存的)

總結:遞歸要慎用胡野!能用循環(huán)做的就不要用遞歸,因為遞歸消耗內存也消耗CPU資源

三十一痕鳍、模塊與函數(shù)

模塊就是指一個.py文件(一個.py文件就是一個模塊)
可以在一個模塊使用其他模塊的函數(shù)和類

怎么使用其他模塊中的函數(shù)硫豆?
1.通過import關鍵字導入模塊,然后用過模塊名.函數(shù)的方法使用模塊中的函數(shù)
注意6罨瘛够庙!當我們導入其他的模塊的時候會將其他模塊中的所有內容都會導入到當前文件中。
如何解決執(zhí)行語句也被運行抄邀?
判斷模塊的內置屬性name的值是否是'main'
將不需要被其他模塊導入的代碼寫到這個if語句中

    if __name__=='__main__':
        print(1,2,3)

關于name屬性:
name是每個模塊都有的屬性耘眨,作用是用來存儲模塊的名字。
當模塊不是正在執(zhí)行的模塊境肾,name屬性的值是模塊對應的文件的文件名
當模塊正在執(zhí)行的時候name的值就是一個固定值'main'

2.通過from-import直接導入指定的函數(shù)或者類剔难。導入后就可以直接調用函數(shù)
格式:
from 模塊名 import 函數(shù)名一,函數(shù)二

    from qf_math import sum
    print(sum(10,2))

3.通過as關鍵字給導入的模塊或者函數(shù)重命名

    import qf_math as my_math
    # 重命名后可以使用新的模塊名去調用函數(shù)
    pirnt(my_math.sum(1,3,5))

    from qf_math import sum as my_sum
    # 重命名后使用新的函數(shù)名調用函數(shù)
    print(my_sum(10,2))

4.模塊的分類
a.內置函數(shù) (python 自己的)
b.第三方函數(shù)(別人寫的)
c.自定義函數(shù)(自己寫的)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末奥喻,一起剝皮案震驚了整個濱河市偶宫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌环鲤,老刑警劉巖纯趋,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡吵冒,警方通過查閱死者的電腦和手機纯命,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痹栖,“玉大人亿汞,你說我怎么就攤上這事【景ⅲ” “怎么了疗我?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長南捂。 經(jīng)常有香客問我吴裤,道長,這世上最難降的妖魔是什么黑毅? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任嚼摩,我火速辦了婚禮,結果婚禮上矿瘦,老公的妹妹穿的比我還像新娘枕面。我一直安慰自己,他們只是感情好缚去,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布潮秘。 她就那樣靜靜地躺著,像睡著了一般易结。 火紅的嫁衣襯著肌膚如雪枕荞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天搞动,我揣著相機與錄音躏精,去河邊找鬼。 笑死鹦肿,一個胖子當著我的面吹牛矗烛,可吹牛的內容都是我干的。 我是一名探鬼主播箩溃,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瞭吃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涣旨?” 一聲冷哼從身側響起歪架,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霹陡,沒想到半個月后和蚪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體止状,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年惠呼,在試婚紗的時候發(fā)現(xiàn)自己被綠了导俘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡剔蹋,死狀恐怖,靈堂內的尸體忽然破棺而出辅髓,到底是詐尸還是另有隱情泣崩,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布洛口,位于F島的核電站矫付,受9級特大地震影響,放射性物質發(fā)生泄漏第焰。R本人自食惡果不足惜买优,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挺举。 院中可真熱鬧杀赢,春花似錦、人聲如沸湘纵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梧喷。三九已至砌左,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铺敌,已是汗流浹背汇歹。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留偿凭,地道東北人产弹。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像笔喉,于是被迫代替她去往敵國和親取视。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容

  • 〇常挚、前言 本文共108張圖作谭,流量黨請慎重! 歷時1個半月奄毡,我把自己學習Python基礎知識的框架詳細梳理了一遍折欠。 ...
    Raxxie閱讀 18,918評論 17 410
  • 1.ios高性能編程 (1).內層 最小的內層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結構(3).初始化時...
    歐辰_OSR閱讀 29,321評論 8 265
  • 寫簡書快四個月锐秦,寫了將近100篇文章咪奖,差不多十萬字,幾乎都是下班帶娃后熬夜寫完酱床。 但只有寥寥幾篇被選入首頁專題羊赵,最...
    清野拾夢閱讀 394評論 6 12
  • 好不容易盼來了星期五的夜晚,希齊大飽眼干纫ィ——看了會兒電視昧捷,玩了陣子游戲。爸爸洗澡罐寨,希齊搶先挨媽媽睡下靡挥,兄...
    星芳希齊閱讀 224評論 0 1
  • 本文作者貓頭鷹太太瓶蝴,是我北大學姐毒返,畢業(yè)于美國名校,美女學霸一名∧依叮現(xiàn)定居美國饿悬,無論是自我修煉,還是帶好倆娃聚霜,她是“總...
    大觀家庭閱讀 862評論 0 1