强制使用关键字传参

简介: 强制使用关键字传参

Python小技巧

使用匿名可变位置参数,强制使用者使用关键字传递函数参数。

当一个函数的参数很多的时候,在调用的时候,习惯于直接通过位置参数进行传参,即按照顺序直接进行传递参数。

不推荐的写法

def handle_file(
    filename,
    mode,
    buffer_size = 1024,
    check_exist = True
):
    pass
# 使用时
handle_file(
    'test.py', 
    'r',
    2048, 
    False
)

当函数的参数变多以后,尤其是在需要团队协作的情况下,这种直接传参的方式,会导致代码难以维护,后来者在查看这种代码的时候,需要查看函数的注释,甚至是需要深入源代码去查看每个参数是什么意思。一种比较好的实践方法是,对于一个拥有多个参数的函数而言,只允许最常见的参数可以通过位置参数进行传递,对于一些需要进行理解的参数,通过可变位置参数来进行屏蔽,强制使用者使用关键字传参。

推荐的写法

def handle_file(
    filename,
    mode,
    *,
    buffer_size = 1024,
    check_exist = True
):
    pass
# 使用时
handle_file(
    'test.py', 
    'r',
    buffer_size=2048, 
    check_exist=False
)

通过不带有名字的可变位置参数*来屏蔽多余的位置参数,在需要传递*后面的参数时,必须使用arg=value关键字的方式进行传参。相较于文章开头全部使用位置参进行传递的方式而言,提高了代码可维护性。


相关文章
|
10月前
|
存储 编译器
【操作符与关键字】
【操作符与关键字】
69 0
|
10月前
|
存储 安全 算法
【C/C++ 关键字 函数说明符 】C++ noexcept 关键字(指定某个函数不抛出异常)
【C/C++ 关键字 函数说明符 】C++ noexcept 关键字(指定某个函数不抛出异常)
126 0
|
3月前
|
安全 编译器 C++
C++ `noexcept` 关键字的深入解析
`noexcept` 关键字在 C++ 中用于指示函数不会抛出异常,有助于编译器优化和提高程序的可靠性。它可以减少代码大小、提高执行效率,并增强程序的稳定性和可预测性。`noexcept` 还可以影响函数重载和模板特化的决策。使用时需谨慎,确保函数确实不会抛出异常,否则可能导致程序崩溃。通过合理使用 `noexcept`,开发者可以编写出更高效、更可靠的 C++ 代码。
79 1
|
4月前
静态方法中可以使用 this 关键字吗?
静态方法中的 `this` 关键字主要用于访问类的静态成员,但在使用时要清楚其指向和限制,避免因错误地使用 `this` 而导致程序出现意外的行为和错误。
在使用 `new` 关键字创建对象时,如果忘记添加 `new` 关键字会发生什么?
【10月更文挑战第31天】`SafeConstructor` 函数中,通过检查 `this` 是否为 `SafeConstructor` 的实例来判断是否使用了 `new` 关键字。如果没有使用,则自动使用 `new` 关键字重新调用自身,确保始终返回一个正确的对象实例。
|
10月前
|
存储 安全 编译器
【C++ 关键字 类型限定符 】揭秘C++编程中的神秘元素:深入了解volatile关键字的强大作用
【C++ 关键字 类型限定符 】揭秘C++编程中的神秘元素:深入了解volatile关键字的强大作用
76 0
|
9月前
|
Dart 开发者
Dart中的类型判断(is 关键字)
Dart中的类型判断(is 关键字)
189 0
|
10月前
|
Java
JavaSE&关键字,接口,代码块,枚举
JavaSE&关键字,接口,代码块,枚举
50 2
|
10月前
|
算法 编译器 C语言
【C/C++ 关键字 函数说明符 】C/C++ _Noreturn关键字(表明调用完成后函数不返回主调函数)
【C/C++ 关键字 函数说明符 】C/C++ _Noreturn关键字(表明调用完成后函数不返回主调函数)
89 1