1.6.Python函数
1.6.1 基本形式
#定义函数
def changeme( mylist ):
"This changes a passed list into this function"
mylist.append([1,2,3,4]);
print "Values inside the function: ", mylist
return (mylist,"haha")
# 调用函数
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist
|
python的函数调用是引用传递,这将产生以下结果:
Values inside the function: [10, 20, 30, [1, 2, 3, 4]]
Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
|
默认参数和可变参数
# 默认参数
#有默认值的参数后面不能再跟无默认值的参数
def printinfo( name, age = 35 ):
"This prints a passed info into this function"
print "Name: ", name;
print "Age ", age;
return;
#调用
#如果调换了参数的顺序,则必须把参数名都带上
printinfo( age=50, name="miki" );
printinfo( name="miki" );
#可变参数
def printinfo( arg1, *vartuple ):
"This prints a variable passed arguments"
print "Output is: "
print arg1
for var in vartuple:
print var
return;
# 调用
printinfo( 10 );
printinfo( 70, 60, 50 );
|
1.6.2 匿名函数
² 可以使用lambda关键字来创建小的匿名函数。这些函数被称为匿名,因为它们不是以标准方式通过使用def关键字声明。
² Lambda形式可以采取任何数量的参数,但在表现形式上只返回一个值。它们不能包含命令或多个表达式。
² 匿名函数不能直接调用打印,因为需要lambda表达式。
² lambda函数都有自己的命名空间,并且不能访问变量高于在其参数列表和那些在全局命名空间的变量。
示例:
# 定义
sum = lambda arg1, arg2: arg1 + arg2 #lambda表达式
# 调用
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )
##返回多个值
tup=lambda x,y:(x+1,y+1)
c=tup(2,3)
print c[0],c[1]
(a,b)=tup(2,3) print a,b print c[0],c[1] |
利用lambda可以实现类似于scala中的高阶函数效果:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def outfunc(func,x,y):
c=func(x,y)
print(c)
outfunc(lambda x,y:x+y,1,2)
|
没有评论:
发表评论