您的位置:首页 > 编程语言 > Python开发

python函数

2015-08-06 15:38 731 查看
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道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


本文出自 “ly36843运维” 博客,请务必保留此出处http://ly36843.blog.51cto.com/3120113/1682268
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: