(转)函数作用域,匿名函数,函数式编程,面向过程,面向对象
函數作用域
?| 12345678910 | def first():????name = 'Wangben'????def second():????????name = 'Mengtian'????????def third():????????????print(name)????????return third????return secondfirst()()()??? #打印輸出Mengtian,每一個()相當于一個函數調用 |
運行程序:
r1 = foo()
print(r1)
r2 = foo()()
print(r2)
r3 = foo()()()
print(r3)
輸出結果:
<function foo.<locals>.bar at 0x0000017F85725AE8> 只返回地址
<function foo.<locals>.bar.<locals>.tt at 0x0000017F857371E0>
wopeiqi
None
"""
匿名函數:
1 """ 用 lambda 關鍵字定義 """ 2 3 lambda x:x+1 """x 為函數的形參,x+1 為函數的返回值 """ 4 5 """ 相當于""" 6 def plus(x): 7 return x+11 """ 在沒有把lambda賦給其他變量的情況下,其本身不知如何使用""" 2 """ 因此一般與其他函數結合使用,要使用時要賦給其他變量""" 3 4 name = 'zhizhi' 5 6 func = lambda x:x + '_celebrate' 7 8 print(func(name)) 9 10 """得到"" 11 zhizhi_celebrate
?
1 """ 要返回多個值需要加 ()""" 2 3 func = lambda x,y,z :( x+2,y**x,z/2) 4 5 print(func(2,6,8)) 6 7 """ 得到 """ 8 (4, 36, 9.0)函數式編程,面向過程,面向對象:
egon09.blog.51cto.com/9161406/1842475 該文章已經被博主隱藏 --_-- 傷心。。。
以下為原文(看著視頻敲出來的,原文作者linhaifeng老師):
介紹:
當下主流的編程方法有三種:函數式、面向過程、面向對象,三者相當于編程界的三大門派,每個門派有自己的獨門秘籍,都是用來解決問題的。三種流派都是一種編程方法論,只不過是各自的風格不同,在不同的應用場景下也各顯優勢。
一、函數式編程:函數式=編程語言定義的函數+數學意義的函數
通俗來講,函數式就是用編程語言去實現數學函數。這種函數內對象式永恒不變的,要么參數式函數,要么返回值是函數,沒有for和while循環,所有的循環都由遞歸去實現,無變量的賦值(即不用變量去保存狀態),無賦值即不改變。
PART 1特征:
1. 不可變數據
2. 第一類對象
3. 尾調用優化(尾遞歸)
例一:不可變:不用變量保存狀態,不修改變量
1 #非函數式 2 a = 1 3 def incr_test1(): 4 global a 5 a +=1 6 return a 7 incr_test1() 8 print(a) #---->得到 2 9 10 #函數式 11 n = 1 12 def incr_test2(n): 13 return n+1 14 15 print(incr_test2(2)) #---->得到 3 16 17 print(n) #---->得到 1
例二:第一類對象:函數即“變量”
1.函數名可以當作參數傳遞
2.返回值可以是函數名
高階函數:
1.函數接受的參數是一個函數名(把函數當作參數傳給另外一個函數)
2.返回值中包含函數
1 #把函數當作參數傳給另外一個函數 2 3 def foo(n): 4 print(n) 5 6 def bar(name): 7 print('my name is %s' %name) 8 9 foo(2) #----->2 10 foo(bar) #-----><function bar at 0x0000018A7F895D90> 返回地址,因為不是運行函數 11 foo(bar('風云')) #----> my name is 風云 1 #返回值中包含函數 2 3 def bar(): 4 print('from') 5 def foo(): 6 print('from foo') 7 return bar 8 n = foo() 9 n() 10 11 #得到 12 from foo 13 from bar 14 #n()相當于foo()(),即運行了foo函數之后,返回的時bar函數,運行bar函數 15 16 def test1(): 17 print('from test1') 18 def test2(): 19 print('from handle') 20 return test1() #----->直接運行test1,相當于test1() 21 22 23 #得到 24 from handle 25 from test1例三:
尾調用:在函數的最后一步調用另外一個函數(最后一行不一定是函數的最后一步)
#函數bar在foo內為尾調用 def bar(n):return n def foo(x):return bar(x) """ 例""" a = foo(8) print(a) #---->得到 8#函數bar和bar2在foo內均為尾調用,二者在if判斷條件不同的情況下都有可能作為函數的最后一步 def bar1(n):return ndef bar2(n):return n+1 def foo(x):if type(x) is str:return bar1(x)elif type(x) is int:return bar2(x)#函數bar在foo內為非尾調用 def bar(n):return ndef foo(x):y = bar(x)return y#函數bar在foo內為非尾調用 def bar(n):return n def foo(x):return bar(x)+1
?
轉自:
Python 學習 --day-16 - UMRzg - 博客園
http://www.cnblogs.com/qinzheg/articles/9394420.html
轉載于:https://www.cnblogs.com/jyfootprint/p/9468336.html
總結
以上是生活随笔為你收集整理的(转)函数作用域,匿名函数,函数式编程,面向过程,面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hive安装MySql
- 下一篇: 根据图片URL获取图片的尺寸【Swift