【问题标题】:How to add optional separator in python function? [duplicate]如何在 python 函数中添加可选的分隔符? [复制]
【发布时间】:2019-09-05 17:39:24
【问题描述】:

目前我有一个工作范围函数,它接受并输出前 3 个参数,但我不知道如何添加分隔符/结束的可选第四个参数。我不确定我应该使用 sep 还是 end。

def Practice(start, stop, step):
for i in range(start, stop+1, step):

    if i%step == 0:

        print(i, end=' ')

所以如果用户在 shell 中输入: Practice(4,24,4) 它将打印:4 8 12 16 20 24

【问题讨论】:

  • 可选参数可以用默认值指定。例如:def rangePractice(start, stop, step, sep=''):
  • rangePractice = range ,虽然可能不是很好的做法 ;)

标签: python python-3.x arguments range


【解决方案1】:

sep 用于分隔参数,end 在最后一个参数之后。它们被print 函数使用。

>>> print('boa', 'cat', 'dog', sep='=>', end='!!!\n')
boa=>cat=>dog!!!

所以,您的程序中需要end。如果您使用sepend 将被视为\n,并且所有行都将打印在新行中。

def rangePractice(start, stop, step, separator = "  "):
    for i in range(start, stop+1, step):
        if i%step == 0:
            print(i, end=separator)

我建议练习这样的事情,不要从 stackoverflow 得到勺子,它会增加你的知识。

【讨论】:

    【解决方案2】:

    试试这个: 在下面的代码中,如果您不为其传递任何值,则 step 的默认值为 4

    e.g.1  rangePractice(4,24) # will have step=4 and separator = "  "
    e.g.2  rangePractice(4,24,5) # will step=4 and separator = "  "
    e.g.3  rangePractice(4,24,4, "-") # will have step=4 and separator = "-"
    
    def rangePractice(start, stop, step=4, separator = "  "):
        for i in range(start, stop+1, step):
            if i%step == 0:
                print(i, end=separator)
    
    

    【讨论】:

    • step 也可以这样吗?所以说用户没有为步骤输入数字;如果用户只添加两个数字: rangePractice(4,24) ,那么默认值会增加 1 吗?
    • 是的,也可以通过 step 完成。您可以使任何参数可选,只需传递 rangePractice(start, stop, step=4, separator = " ")
    • @lsimon:是的,你可以有尽可能多的默认值参数。但请记住,具有默认值的值始终必须位于强制值之后。
    【解决方案3】:

    让参数有一个默认值。或者,在函数体中,您可以检查用户是否传递了他自己的参数(但这对于您的用例来说不是必需的)。

    def rangePractice(start, stop, step, separator=' '):
      for i in range(start, stop+1, step):
    
        if i%step == 0:
    
            print(i, end=separator)
    

    【讨论】:

    • 避免对变量名使用任何保留关键字:sep
    • @KamalNayan sep 不是保留关键字或内置关键字,作为变量名有什么问题?
    • @Chris_Rands:没有错,只是约定俗成。 sep 被 print 函数用作参数。蟒蛇的美丽,它从不抱怨这些事情
    • @KamalNayan 没有避免使用关键字参数作为变量名的约定,那将是愚蠢的(你怎么会得到这样的名称列表?)​​。在这里,他们试图模仿range(),因此使用同名IMO 是有意义的。无论如何,真正的关键字不能用作变量名,例如for = 1 语法无效
    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2019-03-16
    • 2012-04-02
    • 1970-01-01
    • 2013-11-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多