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