函数作用域
?"""
运行程序:
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): 7return x+1
1 """ 在没有把lambda赋给其他变量的情况下,其本身不知如何使用""" 2 """ 因此一般与其他函数结合使用,要使用时要赋给其他变量""" 3 4 name = 'zhizhi' 5 6 func = lambda x:x + '_celebrate' 7 8 print(func(name)) 9 10 """得到"" 11zhizhi_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./9161406/1842475该文章已经被博主隐藏 --_-- 伤心。。。
以下为原文(看着视频敲出来的,原文作者linhaifeng老师):
介绍:
当下主流的编程方法有三种:函数式、面向过程、面向对象,三者相当于编程界的三大门派,每个门派有自己的独门秘籍,都是用来解决问题的。三种流派都是一种编程方法论,只不过是各自的风格不同,在不同的应用场景下也各显优势。
一、函数式编程:函数式=编程语言定义的函数+数学意义的函数
通俗来讲,函数式就是用编程语言去实现数学函数。这种函数内对象式永恒不变的,要么参数式函数,要么返回值是函数,没有for和while循环,所有的循环都由递归去实现,无变量的赋值(即不用变量去保存状态),无赋值即不改变。
PART 1特征:
1. 不可变数据
2. 第一类对象
3. 尾调用优化(尾递归)
例一:不可变:不用变量保存状态,不修改变量
1 #非函数式 2 a = 1 3 def incr_test1(): 4global a 5a +=1 6return a 7 incr_test1() 8 print(a) #---->得到 2 9 10 #函数式11 n = 112 def incr_test2(n):13return n+114 15 print(incr_test2(2)) #---->得到 316 17 print(n) #---->得到 1
例二:第一类对象:函数即“变量”
1.函数名可以当作参数传递
2.返回值可以是函数名
高阶函数:
1.函数接受的参数是一个函数名(把函数当作参数传给另外一个函数)
2.返回值中包含函数
1 #把函数当作参数传给另外一个函数 2 3 def foo(n): 4print(n) 5 6 def bar(name): 7print('my name is %s' %name) 8 9 foo(2) #----->210 foo(bar)#-----><function bar at 0x0000018A7F895D90> 返回地址,因为不是运行函数11 foo(bar('风云')) #----> my name is 风云
1 #返回值中包含函数 2 3 def bar(): 4print('from') 5 def foo(): 6print('from foo') 7return bar 8 n = foo() 9 n()10 11 #得到12from foo13from bar14 #n()相当于foo()(),即运行了foo函数之后,返回的时bar函数,运行bar函数15 16 def test1():17print('from test1')18 def test2():19print('from handle')20return test1() #----->直接运行test1,相当于test1()21 22 23 #得到24from handle25from test1
例三:
尾调用:在函数的最后一步调用另外一个函数(最后一行不一定是函数的最后一步)
#函数bar在foo内为尾调用def bar(n):return ndef foo(x):return bar(x)""" 例"""a = foo(8)print(a) #---->得到 8#函数bar和bar2在foo内均为尾调用,二者在if判断条件不同的情况下都有可能作为函数的最后一步def bar1(n):return ndef bar2(n):return n+1def 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 ndef foo(x):return bar(x)+1
转自:
Python 学习 --day-16 - UMRzg - 博客园
/qinzheg/articles/9394420.html