函数
函数是实现一定功能,可以重复多次调用的代码,通过输入参数值,返回需要的结果;
函数在使用前必须定义,函数的类型即返回值的类型;
函数名不能以数字开头;
函数的参数在一对圆括号中,参数可以有一个或多个,参数之间由逗号隔开,圆括号中的参数叫形式参数;
括号以冒号结束,冒号下面是函数主体;
函数的调用采用函数名加一对圆括号,括号内的参数是传递给函数的具体值;
实际参数必须和形式参数一一对应;
python中任何东西都是对象,所以参数只支持引用传递的方式;通过名称绑定机制,把实际参数的值和形式参数的名称绑定到一起;
形式参数和实际参数指向内存中的同一个存储空间;
#函数定义格式
def 函数名(参数1,参数2...):
函数体
return 表达式
#函数的定义和调用
from __future__ import division
def arithmetic(x,y,operator):
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
return result.get(operator) #如果没有return语句,直接调用函数,返回为None
print(arithmetic(1,2,"+")) #函数调用
from __future__ import division
def arithmetic(x = 1,y = 1,operator = "+"): #给参数提供默认值
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
return result.get(operator)
print(arithmetic())
print(arithmetic(y = 3,operator = "-"))
print(arithmetic(x = 4,operator = "+"))
print(arithmetic(2,5,"*")) #operator不能掉引号
不定长参数
有时候需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。
加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。
#定义方式
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
#可写函数说明
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ",arg1)
for var in vartuple:
print(var)
return
#调用printinfo 函数
printinfo(10)
printinfo(70,60,50)
#简单例子
def func(*args):
print(args)
func(1,2,3)
函数的返回值
函数的返回值使用return语句。return后面可以是变量或表达式;
没有return语句的函数返回None;
#return返回多个值
def func(x,y,z):
l = [x,y,z]
l.reverse()
numbers = tuple(l)
return numbers
x,y,z = func(0,1,2)
print(x,y,z)
#return返回多个值
def func(x,y,z):
l = [x,y,z]
l.reverse()
a,b,c = tuple(l)
return a,b,c
x,y,z = func(0,1,2)
print(x,y,z)
def func(x):
if x > 0:
result = "x > 0"
elif x == 0:
result = "x == 0"
else:
result = "x < 0"
return result
print(func(-2))
函数的嵌套
函数的嵌套指在函数的内部调用其他函数;
def sum(a,b):
return a + b
def sub(a,b):
return a - b
def func():
x=1;y=2;m=3;n=4;
return sum(x,y)*sub(m,n)
print(func())
递归函数
递归函数就是自己调用自己,函数嵌套的是函数本身;
递归需要编写递归结束条件;否则是死循环;
#递归计算阶乘
def refunc(n):
i = 1
if n > 1:
i = n
n = n * refunc(n - 1)
print("%d! = " %i,n)
return n
refunc(5)