Python的点滴笔记之:函数
博客专区 > fzyz_sb 的博客 > 博客详情
Python的点滴笔记之:函数
fzyz_sb 发表于3年前
Python的点滴笔记之:函数
  • 发表于 3年前
  • 阅读 49
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

1. 对函数的参数而言,最好传递副本,来达到C/C++中const的效果

    由于Python语言的特性,列表是可更改的,所以如果将列表直接传递进函数中,则列表的值可以被修改:

>>> def f(a, L = []):
	print id(L)
	L.append(a)
	return L

>>> f(1)
45637256    #id相同
[1]
>>> f(2)
45637256    #id相同
[1, 2]
    这时候,有两种解决方案.

一种解决方案是手动传入副本:

>>> def f(a, L = []):
	print id(L)
	L.append(a)
	return L

>>> L = []
>>> f(1, L[:])
45635272    #id不同
[1]
>>> f(2, L[:])
45636936    #id不同
[2]

另一种方案是:传入参数的值不可修改即可

>>> def f(a, L = None):
	if L is None:
		L = []
		print id(L)
	L.append(a)
	return L

>>> f(1)
45636168    #id不同
[1]
>>> f(2)
45642056    #id不同
[2]


2. 对于函数的参数来说,如何使用列表(元组)/字典来代替多个参数

    这属于语法层面,我们可以使用"*"来代表传入的参数是列表/元组,用"**"来代表传入的参数是字典:

>>> range(3, 6)
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)
[3, 4, 5]
>>> def parrot(voltage, state='a stiff', action='voom'):
	print "-- This parrot wouldn't", action,
	print "if you put", voltage, "volts through it.",
	print "E's", state, "!"

	
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>> parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !


共有 人打赏支持
粉丝 362
博文 209
码字总数 447144
×
fzyz_sb
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: