标签:python函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道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
标签:python函数
原文地址:http://ly36843.blog.51cto.com/3120113/1682268