# -*- coding: UTF-8 -*-#函数参数 ‘‘‘定义函数可以用必选参数,默认参数,可变参数,关键字参数和命名关键字参数,参数定义顺序为必选参数,默认参数,可变参数,关键字参数和命名关键字参数函数调用的时候,会自动按照参数位置和参数名把对应参数传递进去注意点:1.必选参数在前,默认参数在后2.默认参数要用不可变对象,如果是可变对象,运行会有逻辑错误3.*arg是可变参数,args接受的是一个tuple4.**kw是关键字参数,kw接收的是一个dict ‘‘‘ def function(a,b,c=0,*args,**kw): print ‘a =‘,a,‘b =‘,b,‘c =‘,c,‘args =‘,args,‘kw =‘,kw A = function(1,2) B = function(1,2,3,‘a‘,‘b‘) C = function(1,2,3,‘a‘,‘b‘,city=‘foshan‘,company=‘bgy‘) #递归函数def cal(n): if n == 1: return 1 return n * cal(n-1) D = cal(500)print D ‘‘‘使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。‘‘‘
时间: 2024-08-01 22:27:58