python函数定义中参数列表里的参数是_python中如何定义带有默认参数的函数

2019年10月6日

|

by YoungTimes

|

No comments

python中如何定义带有默认参数的函数

直观的,带有默认参数的python函数非常简单:

1) 在定义中为参数赋值;

2) 带默认值的参数出现在函数的最后;

3) 如果默认值是可变容器(如列表、集合、字典等);

如下代码所示:

def fun_with_default_param(a, b=0):

print(a, b)

fun_with_default_param(1) // a=1, b=0

fun_with_default_param(1, 2) // a=1, b=2

注意:

1、默认参数的绑定发生在函数定义的时候。

x = 0

def fun_with_default_param(a, b=x):

print(a, b)

fun_with_default_param(1) // a=1, b=0

x = 1

fun_with_default_param(1) // a=1, b=0

2、赋给默认参数的值应该为不可变对象。如None、True、False、数字、或者字符串常量等;

>>> def fun_with_default_param(a, b=[]): # Bad Param

...

return b

>>> x = fun_with_default_param(1)

>>> print(x)

[]

>>> x.append(1)

>>> x.append(2)

>>> print(x)

[1, 2]

>>> print(fun_with_default_param(1))

[1, 2]

可以看到默认值在函数体之外被修改,导致之后的函数调用对默认值产生持续的影响。

所以函数的参数的默认值的应该为不可变对象。

3、默认参数的None值的处理

def fun_with_default_param(a, b=None):

if not b:

....

上述的代码的问题在于,尽管None会被判为False;同时长度为0的字符串、列表、元组、字典都会被判定为False,从而给代码带来一些难以追踪的问题。

为了解决None被错误处理的问题,可以为函数的默认参数选择一个安全的默认值。

_no_value = object()

def fun_with_default_param(a, b = _no_value):

if b is _no_value:

print('no b value supplied')

上述代码,用object()提供了一个特有默认参数,这个实例在实际应用中作为传入参数几乎不可能,因此_no_value是一个比较安全的可选参数默认值。

发表评论在此浏览器中保存我的名字、电邮和网站。

Submit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值