强制使用关键字传参

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

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关键字的方式进行传参。相较于文章开头全部使用位置参进行传递的方式而言,提高了代码可维护性。


相关文章
|
8月前
|
存储 编译器
【操作符与关键字】
【操作符与关键字】
63 0
|
8月前
|
存储 安全 算法
【C/C++ 关键字 函数说明符 】C++ noexcept 关键字(指定某个函数不抛出异常)
【C/C++ 关键字 函数说明符 】C++ noexcept 关键字(指定某个函数不抛出异常)
105 0
|
2月前
箭头函数不能使用哪些关键字?
总之,箭头函数在语法和功能上有一定的限制,在使用时需要注意这些限制条件,根据具体的需求来选择是否使用箭头函数以及如何使用其他语法结构来实现相应的功能。
118 56
|
1月前
|
安全 编译器 C++
C++ `noexcept` 关键字的深入解析
`noexcept` 关键字在 C++ 中用于指示函数不会抛出异常,有助于编译器优化和提高程序的可靠性。它可以减少代码大小、提高执行效率,并增强程序的稳定性和可预测性。`noexcept` 还可以影响函数重载和模板特化的决策。使用时需谨慎,确保函数确实不会抛出异常,否则可能导致程序崩溃。通过合理使用 `noexcept`,开发者可以编写出更高效、更可靠的 C++ 代码。
37 0
|
7月前
|
Dart 开发者
Dart中的类型判断(is 关键字)
Dart中的类型判断(is 关键字)
171 0
|
8月前
|
存储 Python 容器
python函数的返回值、嵌套方式以及函数中的变量(一)
python函数的返回值、嵌套方式以及函数中的变量(一)
267 2
|
8月前
|
Python
python函数的返回值、嵌套方式以及函数中的变量(二)
python函数的返回值、嵌套方式以及函数中的变量(二)
254 1
|
8月前
|
Java
JavaSE&关键字,接口,代码块,枚举
JavaSE&关键字,接口,代码块,枚举
46 2
|
8月前
|
算法 编译器 C语言
【C/C++ 关键字 函数说明符 】C/C++ _Noreturn关键字(表明调用完成后函数不返回主调函数)
【C/C++ 关键字 函数说明符 】C/C++ _Noreturn关键字(表明调用完成后函数不返回主调函数)
79 1
引用作为重载条件
引用作为重载条件
47 0