0
点赞
收藏
分享

微信扫一扫

python函数式编程

15.函数式编程

创建函数

def function_name(arguments):
"""function documention_string"""
function_body_suite

1、声明与定义:

 

python函数式编程_Python

2、前向引用

和其他高级语言类似,Python不允许在函数未声明之前对它引用或调用。

3、函数的属性

比如创建两个Py文件,test1.py;test2.py,如下:

test1.py
--------------------------
ST = 'test1'
def bar():
'''This is bar'''
print 'ok'

#函数必定有返回值,默认为None

test2.py

--------------------------------------
import test1
print test1.ST
print test1.bar()
#-----------输出
#test1
#ok
#None
#-----------记得过程是返回值None的函数

def foo():
'''This is foo'''
print 'foo'

print foo.__doc__ #This is foo

 

4、嵌套函数

>>> 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 "<pyshell#5>", line 1, in <module>
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

举报

相关推荐

0 条评论