摘要:可以被函數調用并提取元素的對象稱為迭代器對象。判斷一個對象是否為迭代器對象將轉為對象生成器生成器使用的函數被稱為是生成器函數。
通用函數
def fun(*args, **kwargs): print(args) # 元組 print(kwargs) # 字典 關鍵字傳參匿名函數
lambda x:x*x if x>5 lambda num:"TRUE" if num == 1 else "FALSE"裝飾器
本身是一個閉包,就是一個返回函數的函數
閉包:把一個函數作為參數,返回一個代替版的函數
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) #語法糖 @后可以繼續使用原來函數的名字 def outer(func): def inner(num): if num < 0: num = 99999 func(num) return inner @outer # 相當于 getAge == outer(getAge) def getAge(age): print(age) # f4 = outer(getAge) # f4(-90) getAge(-99) @outer def getWeight(ww): print(ww) getWeight(-99)偏函數
int("1010",base=2) def myInt(str): return int(str, base=2) import functools newInt = functools.partial(int, base=2)迭代器
可迭代對象:可以直接作用于for循環的對象,叫做可迭代對象[Iterable] 可以直接作用于for的對象:1、基本數據類型:list
tuple dict set string 2、generator生成器:帶有yield的生成器函數
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循環,也可以使用next()
函數不斷用并獲取下一個值,直到取出最后一個。當取出嘴一個元素時,再繼續調用next()時,會提出一個StopIteration錯誤表示無法繼續下一個數據的提取??梢员籲ext()函數調用并提取元素的對象稱為迭代器對象。判斷一個對象是否為迭代器對象: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轉為Iterator對象 a = iter([1, 2, 3]生成器
生成器:generator:使用yield的函數被稱為是生成器函數。使用yield的函數與普通函數的區別:生成器函數是一個返回迭代器的函數,只能用于迭代操作可以認為生成器就是一個迭代器
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)閉包
閉包:概念:在函數體內定義的內部函數,并且該內部函數使用的外部函數的變量,外部函數將內部函數作為返回值返回,該內部函數就叫做閉包。作用域優點:避免變量污染全局環境,我們可以在全局范圍內間接使用局部變量。
缺點:數據會長期駐留在內存中,造成內存浪費,在IE瀏覽器中,極易崩潰,所以請慎重使用。
built-in Global Enclosing Local
變量查找規則: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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41641.html
摘要:引言本期開始介紹中的高階函數,在中,函數是一種特殊類型的對象,它們是。簡單來說,高階函數是一個接收函數作為參數傳遞或者將函數作為返回值輸出的函數。我們來看看使用它們與不使用高階函數的方案對比。引言 本期開始介紹 JavaScript 中的高階函數,在 JavaScript 中,函數是一種特殊類型的對象,它們是 Function objects。那什么是高階函數呢?本節將通過高階函數的定義來展...
摘要:函數作為參數情況,,和是中內置的高階函數。知道了到底啊什么是高階函數,有哪些類型的高階函數。公眾號技術棧路線大家好,我是,公眾號程序員成長指北作者,這篇文章是必知必會系列的高階函數講解。 前言 一道經典面試題: //JS實現一個無限累加的add函數 add(1) //1 add(1)(2) //3 add(1)(2)(3) //6 當大家看到這個面試題的時候,能否在第一時間想到...
摘要:無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。形式參數當函數調用完成之后就自動銷毀了。函數的調用傳值調用函數的形參和實參分別占有不同內存塊,對形參的修改不會影響實參。沒有找到找到了下標為 目錄 1.? 函數是什么? 2.??C語言中函數的分類: 2...
摘要:在做了一些研究之后,我發現了函數式編程的概念,比如不變性和純函數。在這篇文章中,將通大量代碼示例來詳細介紹函數式編程和一些相關重要概念。該非純函數接收該值并重新分配,使其值增加。函數式編程不鼓勵可變性。純函數是穩定的一致的和可預測的。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 在長時間學習和使用面向對象編程之后,咱們...
摘要:概述函數的聲明命令函數表達式變量賦值命令后面不帶有函數名。如果加上函數名,該函數名只在函數體內部有效,在函數體外部無效。同樣的,函數體內部聲明的函數,作用域綁定函數體內部??梢酝ㄟ^,達到調用函數自身的目的。 函數 函數是一段可以反復調用的代碼塊。函數還能接受輸入的參數,不同的參數會返回不同的值。 1.概述1.1函數的聲明1.2函數的重復聲明1.3圓括號運算符,return 語句和遞歸1...
摘要:在這篇文章中,我將通過中的大量代碼示例向您詳細介紹函數式編程和一些重要概念。注意在函數式編程中不鼓勵可變性。純函數是穩定,一致并且可預測的。 原文:Functional Programming Principles in Javascript作者:TK譯者:博軒 經過很長一段時間的學習和面向對象編程的工作,我退后一步,開始思考系統的復雜性。 復雜性是任何使軟件難以理解或修改的東西。 -...
閱讀 2772·2021-11-19 11:30
閱讀 3058·2021-11-15 11:39
閱讀 1782·2021-08-03 14:03
閱讀 1985·2019-08-30 14:18
閱讀 2043·2019-08-30 11:16
閱讀 2149·2019-08-29 17:23
閱讀 2597·2019-08-28 18:06
閱讀 2533·2019-08-26 12:22