什么是函数?
函数,简单来说就是一段代码的表示,将某个功能独立封装起来,然后在使用时可以直接供我们调用,也可多次重复调用。
函数的主要作用为降低编程难度和代码复用。
模板如下:
def () return
函数在被定义时,所使用的参数是一种占位符。切记:函数只有在被调用时才能被执行,否则该函数不会自己调用自己。
函数在被定义后,所给参数是输入,函数体是处理,结果是输出(IPO)。
当我们求n的阶乘时:
def fact(n):#定义函数名 s=1 for i in range(1,n+1): s*=i return s
调用函数
当函数被使用时,调用函数是运行函数的又一方式,比如当我们运行上面的函数代码块时:
a=fact(10)#调用fact函数,并赋参数10print(a)#输出函数体的结果
当我们运行fact(10)时,即调用fact函数,也是将参数10传递给fact函数里面的n,当fact函数语句块被执行到return时,会将函数执行完的结果返回给a,最后在print语句中打印出来。
关于参数:如上面fact括号里面的10,便是参数。
还有一种参数叫可选参数,即函数定义时可以为某些参数指定默认值,构成可选参数。
To:参数可有可无,但括号必须保留。若没有参数,则为空括号,里面不需要给空格。切记可选参数不是必选的,且一定要放在必选参数后面,在调用函数体时,可选参数要放在非可选参数之后,即为非可选参数,当然是 要一定要有的。
模板如下:
def (,): return
可选参数实例:
def fact(n,m=1):#m即为可选参数,若不给值,即默认为1 s=1 for i in range(1,n+1): s*=i return s//ma=fact(10)print(a)
可变参数传递:函数定义时可以设计可变数量参数,即不确定参数总数,模板如下:
def (,*a):#此处的a是自己定义的变量名字,可变 return
实例:分别是n!与3和3,2,5分别相乘
def fact(n,*a): s=1 for i in range(1,n+1): s*=i for item in a: s*=item return sa=fact(10,3)#调用fact函数,即n!与3相乘print(a)def fact(n,*a): s=1 for i in range(1,n+1): s*=i for item in a: s*=item return sa=fact(10,3,2,5)#调用fact函数,即n!与3,2,5相乘print(a)
在Python中,函数定义时参数可以按照位置或名称方式传递。
在C语言中,函数中的参数是只支持位置方式传递,是不能将参数位置调换而按照名称传递,如下图中,函数体中的参数已经自动对齐了。
在Python中,求上面的s//m时,我们给fact(10,5)或(m=5,n=10)都是可以的。
函数的返回值:return保留字,用来传递返回值。
函数可以用return保留字返回0个返回值,也可以返回单个或多个返回值;函数可以有返回值,也可以没有,可以有return,也可以没有 。
局部变量和全局变量
在整个程序中都能用到的变量我们称之为全局变量。
在函数体内部才能使用的变量我们称之为局部变量。
简单介绍相关规则:
1.全局变量和局部变量是不同变量,即使两者的变量名字相同,所代表的意思还是不同的。
局部变量是函数内部的占位符,与局部变量可能重名但是是不同的,深入到计算机内部我们可以认为当局部变量在函数体内部使用之后就会被释放,简单一点说就是没了。
当然,如果我们想在局部变量中使用全局变量该如何用呢?可以使用保留字global。
代码实例:
def fact(n,*a): s=1 for i in range(1,n+1): s*=i return s#局部变量print(fact(n),s)#此处s为全局变量sn,s=10,100def fact(n,*a): global s#被修改为全局变量 for i in range(1,n+1): s*=i return s#此处s也为全局变量,print(fact(n),s)#此处全局变量s也已被修改
2.局部变量如果是组合数据类型,而且未在函数内部创建,它等同于全局变量。如下面的组合数据类型,组合数据类型可以简单理解为:由多个数据组成的类型。
ls=["F","f"]#创建了一个全局变量列表lsdef fun(a): ls.append(a)#在列表中添加一个元素a returnfun("c")#全局变量列表ls在函数体中被修改print(ls)
但是,如果我们在函数体内部创建这个ls组合数据类型,那么它就只能作用于函数体内部,比如:
ls=["F","f"]#创建了一个全局变量列表lsdef fun(a): ls=[] ls.append(a)#在列表中添加一个元素a returnfun("c")#全局变量列表ls在函数体中被修改print(ls)