python用def编写calsum函数_Python函数

函数定义:

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

In [3]: def sum(a,b):

...: return a + b

...:

In [4]: sum(1,2)

Out[4]: 3

定义一个空函数:

In [6]: def no():

...: pass

In [8]: no()

返回多个值:实际上返回的就是一个tuple

In [10]: def cal(x,y):

....: sum = x+y

....: re = x-y

....: return sum,re

....:

In [11]: cal(1,2)

Out[11]: (3, -1)

默认参数:在定义函数的同时给参数赋值

如:

In [6]: def sum(x,n = 2):

...:while n >0 :

...: a=x

...: x= a +x

...: n= n-1...:returnx

In [7]: sum(3)

但要注意默认参数必须指向不变对象!

如:传入一个list

In [8]: def sum (L =[]):

...: L.append('a')

...:returnL

In [12]: sum([1,2,3])

Out[12]: [1, 2, 3, 'a']

In [13]: sum([1])

Out[13]: [1, 'a']

In [14]: sum([1])

Out[14]: [1, 'a']

In [9]: sum()

Out[9]: ['a']

In [10]: sum()

Out[10]: ['a', 'a']

这时不使用默认参数时,这里传入的是不可变的对象,函数调用完不会保存,但是如果是可变的对象,就会将该对象保存下来

具体的原因解释:

原因解释如下:

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

这样就相当于是下面这样子,就是引用调用

In [17]: L = [1,2,3,4]

In [18]: sum(L)

Out[18]: [1, 2, 3, 4, 'a']

这里也可以认为多线程使用同一个资源,需要加锁,所以可以用下面的方法给它加锁

In [37]: def sum(L =None):

....:if(L ==None):

....: L=[]

....: L.append('a')

....:returnL

....:

In [38]: sum()

Out[38]: ['a']

In [39]: sum()

Out[39]: ['a']

可变参数:就是说的是参数的个数不能确定,可以用list或tuple

In [41]: defsum(array):

....: a=0

....:for i inarray:

....: a= a +i

....:returna

....:

In [42]: sum([1,2,3])

Out[42]: 6

如果想要想直接输入变量,可以这样

In [41]: def sum(*array):

....: a=0

....:for i inarray:

....: a= a +i

....:returna

....:

In [42]: sum(1,2,3)

Out[42]: 6

递归函数:在内部调用自身本身,这个函数就是递归函数。实质是通过栈实现的

deffact(n):if n==1:return 1

return n * fact(n - 1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值