标签:
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
你可以定义一个由自己想要功能的函数,以下是简单的规则:
实例
def sayHello(name): return "Hello:{0}".format(name)
这是一个非常简单的Python函数,接受一个参数,然后返回。
函数的调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了sayHello()函数:
#定义函数 def sayHello(name): return "Hello:{0}".format(name) #调用函数 print(sayHello("jiming"))
输出结果为:
所有参数在Python里都是按引用传递,如果你在函数内部修改了参数,那么原始的参数也被改变了
例如:
myList = [1,2,3] print("修改前myList值:",myList) def changeMyList(list): myList[0:] = [3,2,1] print("函数内修改后myList值:",myList) changeMyList(myList) print("函数外修改后myList值:",myList)
在上述代码中,我们在函数内将myList的值改为3,2,1,代码执行结果为:
函数的参数
以下是调用函数时可使用的正式参数类型:
1、必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用sayHello()函数,你必须传入一个参数,不然会出现语法错误.
2、关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。我们把sayHello改成需要传入两个参数的函数:
#定义函数 def sayHello(name1,name2): return "Hello:{0} and {1}".format(name1,name2) print (sayHello(name2="jiming2",name1="jiming1"))
以上代码name1和name2的传入顺序和函数的定义不一致,但是我们使用关键字name1\name2进行了限定,因此函数还是能够正确读取对应的参数的
3、缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。这个和C#的缺省参数是一样的,例如:
#定义函数 def sayHello(name1,name2="jiming2"): return "Hello:{0} and {1}".format(name1,name2) print (sayHello("jiming1"))
输出的结果为:
如果我们把name1改为缺省参数,而name2为必备参数的时候,代码还能正确运行吗?
#定义函数 def sayHello(name1="jiming1",name2): return "Hello:{0} and {1}".format(name1,name2) print (sayHello("jiming2"))
编译器汇报如下错误:SyntaxError: non-default argument follows default argument
也就是说,我们把必备参数放到缺省参数的后面,会产生歧义
4、不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
实例
#定义函数 def sayHello(sayPerson,*allPersons): for p in allPersons: print("{0} say :‘Hello:{1}‘".format(sayPerson, p)) sayHello("jiming","friend1","friend2","friend3")
输出结果为:
为了避免歧义,不定长参数也应该放到方法参数的最后一个
匿名函数
python 使用 lambda 来创建匿名函数。
实例:
sum = lambda arg1, arg2: arg1 + arg2; # 调用sum函数 print "相加后的值为 : ", sum( 10, 20 ) print "相加后的值为 : ", sum( 20, 20 )
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中
标签:
原文地址:http://www.cnblogs.com/jimmy-y/p/5388069.html