Python函数函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数你可以定义一个由自己想要功能的函数,以下是简单的规则:
语法def functionname( parameters ): '函数_文档字符串' function_suite return [expression] 默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。 实例以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。 def printme( str ): '打印传入的字符串到标准显示设备上' print str return 函数调用定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。 这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。 如下实例调用了printme()函数: #coding=utf-8 #!/usr/bin/python # Function definition is here def printme( str ): '打印任何传入的字符串' print str; return; # Now you can call printme function printme('我要调用用户自定义函数!'); printme('再次调用同一函数'); 以上实例输出结果: 我要调用用户自定义函数! 再次调用同一函数 按值传递参数和按引用传递参数所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如: #coding=utf-8 #!/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]] 参数以下是调用函数时可使用的正式参数类型:
必备参数必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。 调用printme()函数,你必须传入一个参数,不然会出现语法错误: #coding=utf-8 #!/usr/bin/python #可写函数说明 def printme( str ): '打印任何传入的字符串' print str; return; #调用printme函数 printme(); 以上实例输出结果: Traceback (most recent call last): File 'test.py', line 11, in <module> printme(); TypeError: printme() takes exactly 1 argument (0 given) 命名参数命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。用命名参数调用printme()函数: #coding=utf-8 #!/usr/bin/python #可写函数说明 def printme( str ): '打印任何传入的字符串' print str; return; #调用printme函数 printme( str = 'My string'); 以上实例输出结果: My string 下例能将命名参数顺序不重要展示得更清楚: #coding=utf-8 #!/usr/bin/python #可写函数说明 def printinfo( name, age ): '打印任何传入的字符串' print 'Name: ', name; print 'Age ', age; return; #调用printinfo函数 printinfo( age=50, name='miki' ); 以上实例输出结果: Name: miki Age 50 缺省参数调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入: #coding=utf-8 #!/usr/bin/python #可写函数说明 def printinfo( name, age = 35 ): '打印任何传入的字符串' print 'Name: ', name; print 'Age ', age; return; #调用printinfo函数 printinfo( age=50, name='miki' ); printinfo( name='miki' ); 以上实例输出结果: Name: miki Age 50 Name: miki Age 35 不定长参数你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下: def functionname([formal_args,] *var_args_tuple ): '函数_文档字符串' function_suite return [expression] 加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例: #coding=utf-8 #!/usr/bin/python # 可写函数说明 def printinfo( arg1, *vartuple ): '打印任何传入的参数' print '输出: ' print arg1 for var in vartuple: print var return; # 调用printinfo 函数 printinfo( 10 ); printinfo( 70, 60, 50 ); 以上实例输出结果: 输出: 10 输出: 70 60 50 匿名函数用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
语法lambda函数的语法只包含一个语句,如下: lambda [arg1 [,arg2,.....argn]]:expression 如下实例: #coding=utf-8 #!/usr/bin/python #可写函数说明 sum = lambda arg1, arg2: arg1 arg2; #调用sum函数 print 'Value of total : ', sum( 10, 20 ) print 'Value of total : ', sum( 20, 20 ) 以上实例输出结果: Value of total : 30 Value of total : 40 return语句return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做: #coding=utf-8 #!/usr/bin/python # 可写函数说明 def sum( arg1, arg2 ): # 返回2个参数的和.' total = arg1 arg2 print 'Inside the function : ', total return total; # 调用sum函数 total = sum( 10, 20 ); print 'Outside the function : ', total 以上实例输出结果: Inside the function : 30 Outside the function : 30 变量作用域一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量和局部变量定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例: #coding=utf-8 #!/usr/bin/python total = 0; # This is global variable. # 可写函数说明 def sum( arg1, arg2 ): #返回2个参数的和.' total = arg1 arg2; # total在这里是局部变量. print 'Inside the function local total : ', total return total; #调用sum函数 sum( 10, 20 ); print 'Outside the function global total : ', total 以上实例输出结果: Inside the function local total : 30 Outside the function global total : 0 |
|