函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创见函数,这被叫做用户自定义函数。
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
函数语法如下
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
例子:
[root@python day3]# cat print_fun.py
#!/usr/bin/env python
def printme(string): #自定义一个函数名叫printme,有一个参数string
print string #打印参数string
printme('This is the first function.') #将括号中的字符串交给函数printme处理
printme('This is Python.')
#运行结果
[root@python day3]# python print_fun.py
This is the first function. #我们给定的字符串正常出输出来了
This is Python.
按值传递参数和按引用传递参数
所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:
def changeme(mylist):
mylist.append([1,2,3,4]) #将传入的mylist增加一个元素
print "get num in function changeme", mylist #打印mylist
mylist = [10,20,30] #定义一个列表mylist
changeme(mylist) #调用函数changeme
print 'get num from global', mylist #最后打印一次mylist
#整个代码执行过程会打印2次mylist,一次是在函数内部,一次是在函数外部
[root@python day3]# python fun2.py
get num in function changeme [10, 20, 30, [1, 2, 3, 4]]
get num from global [10, 20, 30, [1, 2, 3, 4]]
命名参数函数
[root@python day3]# cat fun3.py
#!/usr/bin/env python
def printinfo(name,age): #定义一个函数,有2个参数
print "Name: ",name
print "Age: ",age
printinfo(age=50,name="miki") #调用函数,指定参数的值
#运行结果
[root@python day3]# python fun3.py
Name: miki
Age: 50
函数的缺省参数
[root@python day3]# cat fun4.py
#!/usr/bin/env python
def printinfo(name,age = 35): #函数的2个默认参数,其中age拥有一个默认值35
print "Name: ",name
print "Age: ",age
printinfo(age=50,name="miki") #给定2个参数
printinfo(name="miki") #这里只给定一个参数name,参数age将使用默认值35
#运行结果
[root@python day3]# python fun4.py
Name: miki
Age: 50
Name: miki
Age: 35 #这个值是使用的默认参数的值
函数的不定长参数
[root@python day3]# cat fun5.py
#!/usr/bin/env python
def printinfo(arg1,*vartuple): #定义了一个不定长函数
print "output: "
print arg1 #打印第一个参数arg1
for var in vartuple: #循环打印后面的参数vartuple
print var
printinfo(10) #只给定一个参数
printinfo(70,60,50) #给定3个参数,其中第一个参数arg1=70
#运行结果
[root@python day3]# python fun5.py
output:
10 #只给定一个参数的输出结果
output:
70 #给定3个参数的输出结果
60
50
匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时只能不能包含命令或多个表达式。
匿名函数不能直接调用print,因为lambda需要一个表达式。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
ambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下实例:
[root@python day3]# cat fun_lambda.py
#!/usr/bin/python
#定义一个lambda函数,有2个参数arg1和arg2,对这2个参数进行+操作
sum = lambda arg1, arg2: arg1 + arg2 #将lambda赋值给sum
print "Value of total : ", sum( 10,20 ) #sum接受了2个参数10,20
print "Value of total : ", sum( 20,20 ) #sum接受了2个参数20,20
#运行结果
[root@python day3]# python fun_lambda.py
Value of total : 30
Value of total : 40
return语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
[root@python day3]# cat fun_return.py
#!/usr/bin/env python
def sum( arg1,arg2 ): #函数接受2个参数
total = arg1 + arg2 #2个参数的和赋值给total
print "Inside the function : ",total
return total #将total的值return出去
total = sum( 10,20 ) #给sum函数赋予2个值10和20,将函数的整个运行结果赋值给total
print "Outside the function : ",total #最后打印函数外部的total的值
#运行结果
[root@python day3]# python fun_return.py
Inside the function : 30
Outside the function : 30
变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
[root@python day3]# cat fun6.py
#!/usr/bin/env python
total = 0 #This is a global varibale. #这是定义个一个全部变量,初始值为0
def sum( arg1, arg2 ):
total = arg1 + arg2 #函数sum内部的变量total
print "Inside the function local total : ",total
return total #将total的值return出去
sum( 10, 20 ) #给sum函数赋予2个值
print "Outside the function global total : ",total #最后打印total,由于函数sum内部rerurn的结果没有赋予给任何变量,所有这里的total将会使用全局变量total
#运行结果
[root@python day3]# python fun6.py
Inside the function local total : 30
Outside the function global total : 0
来源:oschina
链接:https://my.oschina.net/u/4300092/blog/4317678