python函数式编程什么意思_python函数式编程

>>> def foo():

def bar():

print ‘bar() is called‘

print ‘foo() is called‘

bar()

>>> foo()

foo() is called

bar() is called

>>> bar()

Traceback (most recent call last):

File "", line 1, in

bar()

NameError: name ‘bar‘ is not defined

因为bar()的作用域在foo()里面,在外面不能引用bar。

5、传递函数

1、其他变量可做函数的别名,因为对象的引用

所有对象都是通过引用来传递的,函数也不例外,当对一个变量赋值时,实际上是将相同对象的引用赋值给了这个变量。如果对象是函数的话,这个对象的所有别名都是可调用的。

def foo():

print ‘foo‘

bar = foo #函数对象的引用

bar() #函数对象的调用

#输出foo

注意:foo:函数对象的引用;foo():函数对象的调用

2、函数作为参数传入其他函数来调用

时刻要记住:函数对象、引用与调用的区别,这几个关键字眼。

def foo():

print ‘foo‘

def bar(argfunc):

print ‘in bar()‘

argfunc()

bar(foo) #把函数作为参数传入其他函数来调用

#输出:

#in bar()

#foo

局部变量argfunc就相当于函数对象foo的别名

在如下:

#内建函数int()/float()/long()转换、实现函数的传递与调用

def convert(argfunc,seq):

return [argfunc(obj) for obj in seq]

lis = [123,15.23,-6.2e5,99999999L]

print convert(int, lis) #[123, 15, -620000, 99999999]

print convert(float,lis)#[123.0, 15.23, -620000.0, 99999999.0]

print convert(long, lis)#[123L, 15L, -620000L, 99999999L]

6、Formal Arguments

1、位置参数

以函数定义的准确顺序来传递,如果没有任何默认参数的下,传入参数个数也要一致。

常见错误如下:

takes no arguments (1 given)

takes exactly 2 arguments (1 given)等等

2、默认参数

def foo(arg,default1 = ‘Python‘,default2 = ‘Django‘):

pass

每一个默认参数后面都紧跟一个默认值的赋值语句,如果在函数调用时没有给出值,则使用默认的值。

默认参数最好写在最后

3、关键字参数

def foo(arg,obj1=‘good‘,obj2=10):

return arg,obj1,obj2

print foo(arg=‘Begin‘) #(‘Begin‘, ‘good‘, 10)

print foo(‘Begin‘) #(‘Begin‘, ‘good‘, 10)

print foo(‘Begin‘,‘Python‘) #(‘Begin‘, ‘Python‘, 10)

#print foo(arg=‘Begin‘,100) #出错

print foo(arg=‘Begin‘,obj2=100) #(‘Begin‘, ‘good‘, 100)

print foo(obj2=100,arg=‘Begin‘,obj1=‘Ok‘) #(‘Begin‘, ‘Ok‘, 100)

7、可变长度的参数

1、变长参数与非变长参数

"""在参数名之前使用一个星号,就是让函数接受任意多的位置参数"""

def multiply(*args):

total = 1

for arg in args:

total+=arg

return total

print multiply() #1

print multiply(1,2) #4

print multiply(4,5,6) #16

"""python在参数名之前使用2个星号来支持任意多的关键字参数"""

def multiply2(**kwargs):

for key,value in kwargs.items():

print ‘%s=>%s‘ %(key,value)

multiply2()

multiply2(name=‘begin‘) #name=>begin

multiply2(name=‘begin‘,age=‘22‘,tel=110)

#顺序

def complex_function(a,b=None,*args,**kwarg):

pass

#测试

def add(a,b,c):

return a+b+c

print add(a=10,b=10,c=10)

args=(2,3)

print add(1,*args)#6

kwargs={‘b‘:100,‘c‘:200}

print add(100,**kwargs)#400

print add(a=100,**kwargs)#400

#print add(a=100,*args)      #TypeError: add() got multiple values for keyword argument ‘a‘

print add(1,2,c=3)#6

print add(1,2,b=3)# add() got multiple values for keyword argument ‘b‘

三元表达式

为真时的结果 if 判定条件 else 为假时的结果

if 5>3 else 0

是先输出结果,再判定条件

输出1,如果5大于3,否则输出0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值