摘要:可以被函數(shù)調(diào)用并提取元素的對(duì)象稱為迭代器對(duì)象。判斷一個(gè)對(duì)象是否為迭代器對(duì)象將轉(zhuǎn)為對(duì)象生成器生成器使用的函數(shù)被稱為是生成器函數(shù)。
通用函數(shù)
def fun(*args, **kwargs): print(args) # 元組 print(kwargs) # 字典 關(guān)鍵字傳參匿名函數(shù)
lambda x:x*x if x>5 lambda num:"TRUE" if num == 1 else "FALSE"裝飾器
本身是一個(gè)閉包,就是一個(gè)返回函數(shù)的函數(shù)
閉包:把一個(gè)函數(shù)作為參數(shù),返回一個(gè)代替版的函數(shù)
def getAge(age): print("我的年齡是 %d" % age) def getHeight(height): print(height) def outer(paraFun): def inner(num): # 添加檢測(cè)條件 if num < 0: num = 12 paraFun(num) return inner outer(getAge) === inner outer(getAge)(-12) #語(yǔ)法糖 @后可以繼續(xù)使用原來(lái)函數(shù)的名字 def outer(func): def inner(num): if num < 0: num = 99999 func(num) return inner @outer # 相當(dāng)于 getAge == outer(getAge) def getAge(age): print(age) # f4 = outer(getAge) # f4(-90) getAge(-99) @outer def getWeight(ww): print(ww) getWeight(-99)偏函數(shù)
int("1010",base=2) def myInt(str): return int(str, base=2) import functools newInt = functools.partial(int, base=2)迭代器
可迭代對(duì)象:可以直接作用于for循環(huán)的對(duì)象,叫做可迭代對(duì)象[Iterable] 可以直接作用于for的對(duì)象:1、基本數(shù)據(jù)類(lèi)型:list
tuple dict set string 2、generator生成器:帶有yield的生成器函數(shù)
from collections import Iterable print(isinstance([], Iterable)) # T print(isinstance({}, Iterable)) # T print(isinstance((), Iterable)) # T print(isinstance("abc", Iterable)) # T print(isinstance((x for x in range(5)), Iterable)) # T
迭代器:Iterator 迭代器:不僅可以作用于for循環(huán),也可以使用next()
函數(shù)不斷用并獲取下一個(gè)值,直到取出最后一個(gè)。當(dāng)取出嘴一個(gè)元素時(shí),再繼續(xù)調(diào)用next()時(shí),會(huì)提出一個(gè)StopIteration錯(cuò)誤表示無(wú)法繼續(xù)下一個(gè)數(shù)據(jù)的提取。可以被next()函數(shù)調(diào)用并提取元素的對(duì)象稱為迭代器對(duì)象。判斷一個(gè)對(duì)象是否為迭代器對(duì)象:isinstance(obj,
Iterator)
from collections import Iterator print(isinstance([], Iterator)) # F print(isinstance({}, Iterator)) # F print(isinstance((), Iterator)) # F print(isinstance("abc", Iterator)) # F print(isinstance((x for x in range(5)), Iterator)) # T # 將list、tuple、dict、str轉(zhuǎn)為Iterator對(duì)象 a = iter([1, 2, 3]生成器
生成器:generator:使用yield的函數(shù)被稱為是生成器函數(shù)。使用yield的函數(shù)與普通函數(shù)的區(qū)別:生成器函數(shù)是一個(gè)返回迭代器的函數(shù),只能用于迭代操作可以認(rèn)為生成器就是一個(gè)迭代器
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return for i in fib(6): print(i) # 生成器打印楊輝三角 def Triangle(n): l, index = [1], 0 while index < n: yield l l = [1] + [l[i] + l[i + 1] for i in range(len(l) - 1)] + [1] index += 1 for x in Triangle(10): print(x)閉包
閉包:概念:在函數(shù)體內(nèi)定義的內(nèi)部函數(shù),并且該內(nèi)部函數(shù)使用的外部函數(shù)的變量,外部函數(shù)將內(nèi)部函數(shù)作為返回值返回,該內(nèi)部函數(shù)就叫做閉包。作用域優(yōu)點(diǎn):避免變量污染全局環(huán)境,我們可以在全局范圍內(nèi)間接使用局部變量。
缺點(diǎn):數(shù)據(jù)會(huì)長(zhǎng)期駐留在內(nèi)存中,造成內(nèi)存浪費(fèi),在IE瀏覽器中,極易崩潰,所以請(qǐng)慎重使用。
built-in Global Enclosing Local
變量查找規(guī)則:L->E->G->B
只有module class def lambda 才會(huì)引入新的作用域
i = 666 def outer(): i = 555 # 局部變量 def inner(): nonlocal i # nonlocal 非局部的 i = 444 # print("inner ==", i) inner() print("outer ==", i) outer() # 444
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/41641.html
摘要:引言本期開(kāi)始介紹中的高階函數(shù),在中,函數(shù)是一種特殊類(lèi)型的對(duì)象,它們是。簡(jiǎn)單來(lái)說(shuō),高階函數(shù)是一個(gè)接收函數(shù)作為參數(shù)傳遞或者將函數(shù)作為返回值輸出的函數(shù)。我們來(lái)看看使用它們與不使用高階函數(shù)的方案對(duì)比。引言 本期開(kāi)始介紹 JavaScript 中的高階函數(shù),在 JavaScript 中,函數(shù)是一種特殊類(lèi)型的對(duì)象,它們是 Function objects。那什么是高階函數(shù)呢?本節(jié)將通過(guò)高階函數(shù)的定義來(lái)展...
摘要:函數(shù)作為參數(shù)情況,,和是中內(nèi)置的高階函數(shù)。知道了到底啊什么是高階函數(shù),有哪些類(lèi)型的高階函數(shù)。公眾號(hào)技術(shù)棧路線大家好,我是,公眾號(hào)程序員成長(zhǎng)指北作者,這篇文章是必知必會(huì)系列的高階函數(shù)講解。 前言 一道經(jīng)典面試題: //JS實(shí)現(xiàn)一個(gè)無(wú)限累加的add函數(shù) add(1) //1 add(1)(2) //3 add(1)(2)(3) //6 當(dāng)大家看到這個(gè)面試題的時(shí)候,能否在第一時(shí)間想到...
摘要:無(wú)論實(shí)參是何種類(lèi)型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須有確定的值,以便把這些值傳送給形參。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷(xiāo)毀了。函數(shù)的調(diào)用傳值調(diào)用函數(shù)的形參和實(shí)參分別占有不同內(nèi)存塊,對(duì)形參的修改不會(huì)影響實(shí)參。沒(méi)有找到找到了下標(biāo)為 目錄 1.? 函數(shù)是什么? 2.??C語(yǔ)言中函數(shù)的分類(lèi): 2...
摘要:在做了一些研究之后,我發(fā)現(xiàn)了函數(shù)式編程的概念,比如不變性和純函數(shù)。在這篇文章中,將通大量代碼示例來(lái)詳細(xì)介紹函數(shù)式編程和一些相關(guān)重要概念。該非純函數(shù)接收該值并重新分配,使其值增加。函數(shù)式編程不鼓勵(lì)可變性。純函數(shù)是穩(wěn)定的一致的和可預(yù)測(cè)的。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 在長(zhǎng)時(shí)間學(xué)習(xí)和使用面向?qū)ο缶幊讨螅蹅?..
摘要:概述函數(shù)的聲明命令函數(shù)表達(dá)式變量賦值命令后面不帶有函數(shù)名。如果加上函數(shù)名,該函數(shù)名只在函數(shù)體內(nèi)部有效,在函數(shù)體外部無(wú)效。同樣的,函數(shù)體內(nèi)部聲明的函數(shù),作用域綁定函數(shù)體內(nèi)部??梢酝ㄟ^(guò),達(dá)到調(diào)用函數(shù)自身的目的。 函數(shù) 函數(shù)是一段可以反復(fù)調(diào)用的代碼塊。函數(shù)還能接受輸入的參數(shù),不同的參數(shù)會(huì)返回不同的值。 1.概述1.1函數(shù)的聲明1.2函數(shù)的重復(fù)聲明1.3圓括號(hào)運(yùn)算符,return 語(yǔ)句和遞歸1...
摘要:在這篇文章中,我將通過(guò)中的大量代碼示例向您詳細(xì)介紹函數(shù)式編程和一些重要概念。注意在函數(shù)式編程中不鼓勵(lì)可變性。純函數(shù)是穩(wěn)定,一致并且可預(yù)測(cè)的。 原文:Functional Programming Principles in Javascript作者:TK譯者:博軒 經(jīng)過(guò)很長(zhǎng)一段時(shí)間的學(xué)習(xí)和面向?qū)ο缶幊痰墓ぷ鳎彝撕笠徊?,開(kāi)始思考系統(tǒng)的復(fù)雜性。 復(fù)雜性是任何使軟件難以理解或修改的東西。 -...
閱讀 2847·2021-11-19 11:30
閱讀 3112·2021-11-15 11:39
閱讀 1886·2021-08-03 14:03
閱讀 2061·2019-08-30 14:18
閱讀 2112·2019-08-30 11:16
閱讀 2270·2019-08-29 17:23
閱讀 2663·2019-08-28 18:06
閱讀 2599·2019-08-26 12:22