07-缺省参数

本文通过具体实例详细介绍了Python中函数的缺省参数概念及其使用方法,包括如何定义带有缺省参数的函数,以及如何在调用函数时利用这些缺省参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缺省参数

在调用函数时,缺省参数的值如果没有传入,则认为是默认值,带有默认值的参数一定要位于参数列表的最后面

举例1:

#-*- coding:utf-8 -*-

def test(a,b):  #定义一个函数,传入a和b
    result = a+b
    print("result=%d"%result)

test(11,22)  #调用函数并且给出实参
test(22,22)
test(33,22)

root@ubuntu:/home/python/codes/python基础-05# python2 test.py 
result=33
result=44
result=55

在这个程序当中,我们发现是有缺陷的,为什么这样说呢?我们可以看到,在我们调用test函数时候,传入了两个参数,但是在第二个参数后面都是一样的,那么我们可想:因为第二个参数是一样的,那么我们能不能修改一下代码,让第二个参数有着默认参数呢,即当我们只传入一个参数的时候,第二个参数是默认的;当我们传入两个参数的时候,我们传过去的就是我们想要的呢?答案是可以

#-*- coding:utf-8 -*-

def test(a,b=22):  #此时的b=22就是缺省参数
    result = a+b
    print("result=%d"%result)

test(11)
test(22)
test(33)

root@ubuntu:/home/python/codes/python基础-05# python3 test.py 
result=33
result=44
result=55

举例2:

在上节我们说过help()函数可以查看到函数的文档说明,让我们现在来看下:

In [1]: help(print)

Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)  #end='\n'就可以说明为什么我们打印出来的东西就一定会换行,因为它是缺省参数
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

举例3:

In [2]: def test(a,b=22,c=33):  #定义一个函数,此时b和c是缺省参数,即默认值
   ...:     print(a)
   ...:     print(b)
   ...:     print(c)
   ...:     

In [3]: test(11,c=44)  #调用函数,并传入a的值为11,c的值为44
11
22
44

转载于:https://www.cnblogs.com/xiaoyafei/p/8556160.html

### 关于 `sigBytes` 为 null 的问题分析 在 Java 或 Kotlin 中遇到类似于 `Cannot read the array length because "args" is null` 的错误通常是因为某个对象未被正确初始化或者传递了一个空值给方法参数。对于当前提到的 `sigBytes` 为 null 的情况,可以从以下几个方面进行排查: #### 可能的原因 1. **变量未初始化** 如果 `sigBytes` 是一个数组或集合类型的变量,在使用前如果没有显式地分配内存空间,则会抛出 NullPointerException。例如: ```java byte[] sigBytes = null; int length = sigBytes.length; // 抛出 NullPointerException ``` 2. **动态代理中的参数处理不当** 类似于引用[^2]中描述的情况,如果在动态代理中调用 `method.invoke()` 方法时传入的参数可能为空(如 `args`),则需要对其进行特殊处理以避免空指针异常。 3. **加密操作后的状态管理不善** 根据引用[^3]的内容,某些加密库(如 Cipher 对象)在执行完一次 final 操作后不能再继续使用该实例来更新数据。这可能导致后续访问相关字段(如 `sigBytes`)时报错。 4. **开发工具链配置问题** 如引用[^4]所指出,有时即使代码逻辑无误也可能因为 JDK 版本设置或其他环境因素引发此类异常。因此建议验证运行时使用的 JVM 是否匹配预期版本以及是否存在其他潜在冲突。 #### 解决方案 针对上述可能性提供以下几种解决方案: ##### 方案一:确保所有涉及的对象均已正确定义并赋予初始值 修改程序使得任何可能会成为输入源的地方都得到妥善保护以免发生意外状况。比如下面这段修正过的例子展示了如何安全获取字节数组长度而不会触发 NPE: ```java if (sigBytes != null && sigBytes.length > 0){ process(sigBytes); } else { handleNullSigBytes(); } ``` ##### 方案二:采用默认替代策略应对可选参数缺失情形下的需求满足方式调整 当面对像动态代理这样的场景下可能出现的参数丢失风险时,可以通过设定合理的缺省行为减少不确定性带来的影响。具体做法参见引用: ```kotlin fun invokeMethod(method: Method, obj: Any?, vararg args: Any?) = method.invoke(obj, *(args ?: arrayOf())) ``` 这里的关键在于利用 Elvis 运算符(`?:`)实现当且仅当原始 arguments 数组等于 null 才替换为一个新的空列表作为实际调用依据。 ##### 方案三:遵循 API 使用指南重置敏感组件的状态信息维护机制优化 鉴于部分框架内部存在严格的生命周期约束条件限制了连续多次重复动作的可能性,所以务必严格遵守官方文档给出的相关指导原则完成必要的清理工作后再重新开始新一轮循环迭代过程直至结束为止。例如每次做完一轮加解密流程之后都应该及时销毁现有的 cipher 实例创建新的副本代替旧有资源继续前进下去从而规避不必要的麻烦事态发展恶化趋势加剧蔓延开来难以收拾的局面出现. 最后提醒一点就是一定要记得仔细阅读各个依赖项之间的相互关系说明清楚哪些地方需要注意特别事项才能更好地预防各种意想不到的问题突然冒出来干扰正常的业务运转效率提升整体性能表现水平达到理想效果目标追求极致用户体验感受享受科技带来便利美好生活每一天! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值