-
函数定义
你可以定义一个由自己想要功能的函数,以下是简单的规则:
-
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
-
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
-
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
-
函数内容以冒号起始,并且缩进。
-
Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法
def functionname( parameters ): "函数_文档字符串" function_suite return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
实例
1
2
3
4
5
6
7
8
|
>>>
def
myfun(a):
if
(a
=
=
10
):
print
(
"ok"
)
>>> myfun(
10
)
ok
>>> myfun(
2
)
|
按值传递参数和按引用传递参数
所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:
#!/usr/bin/python # 可写函数说明 def changeme( mylist ): "修改传入的列表" mylist.append([1,2,3,4]); print "函数内取值: ", mylist return # 调用changeme函数 mylist = [10,20,30]; changeme( mylist ); print "函数外取值: ", mylist
传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:
函数内取值: [10, 20, 30, [1, 2, 3, 4]] 函数外取值: [10, 20, 30, [1, 2, 3, 4]]
匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
-
Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时只能不能包含命令或多个表达式。
-
匿名函数不能直接调用print,因为lambda需要一个表达式。
-
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
-
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下实例:
#!/usr/bin/python #可写函数说明 sum = lambda arg1, arg2: arg1 + arg2; #调用sum函数 print "Value of total : ", sum( 10, 20 ) print "Value of total : ", sum( 20, 20 )
1
2
3
4
5
6
7
8
9
10
|
>>>
lambda
a,b:a
*
b
<function <
lambda
> at
0x02212930
>
>>> cheng
=
lambda
a,b:a
*
b
>>> cheng
2
4
SyntaxError: invalid syntax
>>> cheng
2
,
4
SyntaxError: invalid syntax
>>> cheng(
2
,
4
)
8
>>>
|