有没有办法将默认参数设置为等于另一个参数值?

发布于 2021-01-29 16:28:42

例如,我有一个基本方法,它将返回排列列表。

import itertools
def perms(elements, set_length=elements):
    data=[]
    for x in range(elements):
        data.append(x+1)
    return list(itertools.permutations(data, set_length))

现在我知道,由于elements未定义第二个代码,因此该代码在当前状态下将无法运行,但是有没有一种优雅的方式来完成我在这里要做的事情?如果仍然不清楚,我想使默认setLength值等于传入的第一个参数。谢谢。

关注者
0
被浏览
212
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    不,函数关键字参数默认值是在 定义 函数时 确定的 ,而不是在执行函数时确定的。

    将默认值设置为None并检测以下内容:

    def perms(elements, setLength=None):
        if setLength is None:
            setLength = elements
    

    如果需要能够指定None作为参数,请使用其他哨兵值:

    _sentinel = object()
    
    def perms(elements, setLength=_sentinel):
        if setLength is _sentinel:
            setLength = elements
    

    现在,呼叫者可以设置setLengthNone,它将不会被视为默认设置。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看