python函数

来源:互联网 发布:c 低级编程 编辑:程序博客网 时间:2024/06/05 02:55

一、函数:定义一个函数使用def关键字,然后接着自定义的函数名,括号(括号中可以没有参数。也可以带参数,参数数量不限),冒号。返回值用return语句返回,如没有返回值也可以不写return。

语法:

def 函数名([参数1,参数2,...]):

      函数体代码...

      return 返回内容


程序在执行时,不会运行函数体语句块,只有在函数被调用时才会执行函数体。

函数的调用者需要知道需要传递几个参数、传递什么样的参数,以及函数将返回什么样的值(有返回值时)。

调用函数:

无参:函数名()

带参:函数名([参数1,参数2,...])


当函数有返回值时,函数体内部语句在执行时,一旦执行到return语句,函数就执行完毕了,并将结果返回给调用者。函数可以返回多个值(return 返回值1,返回值2...)。当函数没有return语句时,函数执行完(执行完函数体中最后一行语句)会返回一个None作为返回结果。

调用函数接收返回值:

变量名=函数名([参数1,参数2,...])  --右边调用函数执行完毕返回结果赋值给左边变量

变量1,变量2,...=函数名([参数1,参数2,...])    --返回多个值时

(实际上返回的是一个tuple,可以通过 变量1=函数名([参数1,参数2,...]) 测试 )


空函数:构建一个没有任何操作的函数

def 函数名():

      pass

pass是空语句,为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。当要定义一个空函数,期望以后再添加相应逻辑,而又保证程序运行不会因为空函数出现语法错误时,可以使用pass作为占位符(没有pass会出现语法错误)。

pass还可以用于别的语句,如if语句,for循环,while循环等。


二、函数的参数:

普通参数:

def 函数名(参数1,参数2...):

函数定义中一旦带了参数,调用时必须根据定义时的参数数量给予传递相应的参数数量。如果传递的数量不一致就会出现错误。

# -*- coding: cp936 -*-import randomdef dosum(arg1,arg2):     print "求和"     return "%d+%d=%d"%(n1,n2,arg1+arg2)    n1=random.randint(1,6)n2=random.randint(1,6)my_sum=dosum(n1,n2)print my_sum

如果在调用函数时传递的参数数量不一致(如:my_sum=dosum(n1))则会出现以下错误:



默认参数:(默认参数必须指向不可变对象,为可变对象时,运行会有逻辑错误)
def 函数名(参数1,参数2=默认值1,参数3=默认值2...)

这里的参数2,参数3就是默认参数,后面赋了一个默认值。默认参数放在别的类型参数后。当我们不需要对参数2,参数3进行传值时,参数2,参数3的值就是默认值。

# -*- coding: cp936 -*-import randomdef dosum(arg1,arg2=2,arg3=6):     print "求和"     return "%d+%d+%d=%d"%(arg1,arg2,arg3,arg1+arg2+arg3)    n1=random.randint(1,6)my_sum=dosum(n1)print my_sum

而当我们需要给参数2,参数3传值时,那么参数2,参数3的值就是我们所传递的值。

# -*- coding: cp936 -*-import randomdef dosum(arg1,arg2=2,arg3=6):     print "求和"     return "%d+%d+%d=%d"%(arg1,arg2,arg3,arg1+arg2+arg3)    n1=random.randint(1,6)n2=random.randint(3,6)n3=random.randint(8,10)my_sum=dosum(n1,n2,n3)print my_sum

给默认参数传值时是按顺序传递的,如不想按顺序的话需要把参数名写上:

# -*- coding: cp936 -*-import randomdef dosum(arg1,arg2=2,arg3=6):     print "求和"     return "%d+%d+%d=%d"%(arg1,arg2,arg3,arg1+arg2+arg3)    n1=random.randint(1,6)my_sum=dosum(n1,3)  #此时3是传递给arg2,arg3值是默认值print my_summy_sum=dosum(n1,arg3=5) #此时arg3的值时传递的5,arg2是默认值print my_summy_sum=dosum(n1,arg3=5,arg2=6) #此时arg3的值时传递的5,arg2的值是传递的6print my_sum


可变参数:

def 函数名(*参数1,*参数2...)
这里的*参数1、*参数2都是可变参数。可变参数就是传入的参数个数是可变的。即在调用函数时,可以允许传递的参数是0个到任意个。可变参数在函数调用中自动组装成一个tuple。

# -*- coding: cp936 -*-def printnum(var1,*args):     print"输出"     print var1     print args       #可以看到传递过来的可变参数组装成了一个元组     for var in args:          print varprintnum(2)               #当只传递值给必选参数时,打印了必选参数值与一个空元祖print "\n传值给可变参数:"printnum(2,3,5) print "------另一种写法:先组装成元组再传"printnum(2,*(3,5))



关键字参数:

def 函数名(**参数1,参数2...)

这里的**参数1是关键字参数。允许传入0个至任意个含参数名的参数,这些关键字参数在函数调用时自动组装成一个dict。

# -*- coding: cp936 -*-def printnum(arg1,**kw):     print"输出"     print arg1     print kw     for var,i in kw.items():          print var,iprintnum(2)              #只传递值给必选参数print "\n传值给关键字参数:"printnum(2,b=4,c='s') print "------另一种写法:先组装成字典再传"printnum(2,**{'b':4,'c':'s'})

这几种参数可以组合定义在函数中但是要按照一定的定义参数的顺序顺序:必选参数、默认参数、可变参数和关键字参数。

0 0
原创粉丝点击