11. 高階函數(shù)

[TOC]

高階函數(shù)

匿名函數(shù)

lambda x:x+y #return x+y
定義標(biāo)志/參數(shù)(形式類似函數(shù)傳參)/跟表達(dá)式(返回)

匿名函數(shù)存在的情況:

執(zhí)行完這行之后,如果沒有被賦值給別的變量
其引用計(jì)數(shù)為0,就會(huì)被內(nèi)存垃圾回收機(jī)制清空

from functoolimport reduce

  • sorted 倒序并且生成新列表/sort是僅僅倒序
  • map 映射
  • reduce 合成累加
  • filter 過濾

內(nèi)置函數(shù)

build_in function

  • all 所有為真,返回真
  • any 一個(gè)為真,返回真
  • chr 數(shù)字轉(zhuǎn)換成ascii碼
  • ord 相反
  • complex 復(fù)數(shù)/.imag/.real
  • dir 查看對(duì)象可使用的方法
  • divmod 查看商和余數(shù)
  • enumerate 得到一個(gè)迭代器
  • pow 取模運(yùn)算
  • zip 將兩個(gè)可迭代元素結(jié)合,返回元組結(jié)果
  • round 四舍五入,為0.5結(jié)尾時(shí)返回與其最接近的偶數(shù)

函數(shù)式編程

遞歸

age(5) = age(4)+2    #n = 5 age(n) = age(n-1)+2
age(4) = age(3)+2    #n = 4 age(n) = age(n-1)+2
age(3) = age(2)+2    #n = 3 age(n) = age(n-1)+2
age(2) = age(1)+2    #n = 2 age(n) = age(n-1)+2
age(1) = 10        #n = 1 age(n) = 10

遞歸的表示:

def age(n):
    if n ==1:
        return 10
    else:
        return age(n) = age(n-1)+2

棧(stack):吃了吐

sys.setrecursionlimit()設(shè)置棧深度
sys.getrecursionlimit()查看棧深度

特點(diǎn):

  • 進(jìn)入一層棧就需要保存一次結(jié)果,所以深度在物理?xiàng)l件上有限制
  • 但在python的理論層面可以很大
  • 效率不高,遞歸的層次過多會(huì)導(dǎo)致棧溢出

必須要有一個(gè)明確的結(jié)束條件
遞歸每進(jìn)入下一層,問題的規(guī)模就減少一點(diǎn)

應(yīng)用場景:
遞歸使用在“不知道問題需要循環(huán)多少次”
理論上,遞歸能做的事循環(huán)都能完成

有序列表date = [....]
二分法查找:

date = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

def two_find(num,list):
    print(list)
    # 首先需要判斷傳入list的長度,因?yàn)楫?dāng)list長度為3的時(shí)候
    # 二分以后的list長度會(huì)變成1,從而直接進(jìn)入else進(jìn)行判斷
    # 這時(shí)候的list[0]不一定是想要取得值
    if len(list)>1:
        n = len(list) // 2
        if num>list[n]:
            list = list[n:]
            two_find(num,list)
        elif num<list[n]:
            list = list[:n]
            two_find(num,list)
        elif num == list[n]:
            print('find')
    else:
        if list[0]==num:
            print('y')
        else:
            print('n')

two_find(17,date)

遍歷的方法尋找數(shù)字,對(duì)內(nèi)存占用較大,不推薦

def search(n):
    if date[n-1]==19:
        print('True')
    else:
        return search(n+1)

函數(shù)式編程

  1. 不修改外部傳參的狀態(tài)
  2. 函數(shù)式編程會(huì)很精簡,可讀性不強(qiáng)

面向?qū)ο蟮某绦蛟O(shè)計(jì)

類:

  1. 實(shí)例化
  2. 引用名字(類名.變量名,類名.函數(shù)名)

實(shí)例:

引用名字(實(shí)例名.類變量,實(shí)例名.綁定方法,實(shí)例.實(shí)力自己的變量名)

類中的變量,可以進(jìn)行增刪改查

方法中的變量,也是可以增刪改查

OOP

class Student:
    country = 'china'
    def __init__(self,ID,NAME,SEX,PROVINCE):
        self.id = ID
        self.name = NAME
        self.sex = SEX
        self.province = PROVINCE
    def search_score(self):
        print('tell score')
    def study(self):
        print('study')

s1 = Student('9527','scott','male','zhejiang')

Student.__init__(s1,'9527','scott','mail','zhejiang')


s1.search_score()

在python3中,所有類都是新式類
class A:pass
在python2中,新式類:

class B(object):pass
class C(B):pass
print(B.__bases__)
print(C.__bases__)

繼承自object的都是新式類

類的用法:
實(shí)例化

s1 = Student('9527','scott','male','zhejiang')

Student.__init__(s1,'9527','scott','mail','zhejiang')

屬性引用:特征(變量)和技能(函數(shù)、綁定方法)

print(s1.name)

print(s1.study())

類的命名空間:

Student.x = 1
print(Student.x)
x = 10000
print(Student.x)

類的增刪改查
刪:del Student.x

  • 對(duì)象也稱為實(shí)例
  • 對(duì)象的屬性:對(duì)象本身只有特征(變量)
  • 對(duì)象的用法:屬性引用

類的名稱空間/對(duì)象的名稱空間

查看類的名稱空間
print(Student.dict)
查看對(duì)象的名稱空間
print(s1.dict)
print(s1.id)

比較對(duì)象s1的方法,和類當(dāng)中的方法的id號(hào)可以發(fā)現(xiàn)
這兩個(gè)東西,并不是同一個(gè)。
print(s1.study,id(s1.study))
print(Student.study,id(Student.study))

綁定方法的核心在于“綁定”,為已綁定一個(gè)確定的對(duì)象

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評(píng)論 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,169評(píng)論 1 10
  • 面向?qū)ο笾饕槍?duì)面向過程。 面向過程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,217評(píng)論 0 4
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,419評(píng)論 0 2
  • 等了快兩個(gè)月,薛之謙的新歌《高尚》終于在17日這個(gè)他的幸運(yùn)日發(fā)了。這一次,薛之謙改變了以往薛式苦情情歌的曲風(fēng)和套路...
    hellokey閱讀 15,491評(píng)論 277 565

友情鏈接更多精彩內(nèi)容