【问题标题】:Python - Entering an Unspecified Amount of Arguments in a FunctionPython - 在函数中输入未指定数量的参数
【发布时间】:2021-06-15 05:55:54
【问题描述】:

我基本上有这个输入我想用一个函数拆分成不同的变量,但问题是有些我想拆分成2个变量,有些3个等。例如:

day, month, year = input("Birthday: ").split(",")

在此代码中,您将输入类似“1, January, 2000”的内容,它会将日、月和年排序为不同的变量,即“日”、“月”和“年”。但是,我希望有一个选项可以在字符串为空时不发生“拆分”。所以,我决定做一个函数来做这个。

对于函数部分,我有类似下面的内容。

def splitText(input, thing1, thing2, thing3):
if input != "":
    thing1, thing2, thing3 = input.split(",")


bDay = input("Birthday: ")
splitText(bDay, day, month, year)

但是这段代码有一个问题,只有 3 个“东西”可以输入到参数中。我希望它是可变的,您可以将 2、3、4、任意数量的参数放入函数中。我尝试过使用“*args”,但我只是不太确定如何使它适用于我的其余代码等等。

任何帮助将不胜感激,无论是解决这个问题还是只是以更有效的方式完成目标:D

【问题讨论】:

  • " 我希望它是可变的,您可以在其中将 2、3、4、任意数量的参数放入函数中。"为什么不直接写thing1, thing2, thing3 = input.split(",") 部分,而不是调用函数呢?考虑到这一点,你打算让它工作的方式,你将不得不写出“任意数量的参数”的整个列表无论如何。无论如何,函数不可能按你想要的方式工作,因为分配给参数不会改变调用者的参数(它甚至可能不是第一名);只有改变那个对象才会起作用。
  • “但是,我希望在字符串为空时不会发生“拆分”的选项。”好的,在这种情况下,调用代码中的daymonthyear 变量会发生什么情况?坦率地说,我认为你很困惑,并试图解决一个荒谬或不存在的问题。

标签: python function arguments


【解决方案1】:

PEP 3132 -- Extended Iterable Unpacking

使用它你可以解压包含 n 个单词的字符串。

bDay = input("Birthday: ")
*a_lst, = bDay.split(',')

#Birthday: 15,july,2000
#['15', 'july', '2000']

我不会使用变量,而是使用字典,我可以在其中动态分配键和值。

def splitText(a_lst):
    lst  = ['day','month','year']
    d = {}
    for i in range(len(a_lst)):

        for j in range(len(lst)):
            if i == j :
                d[lst[j]] = a_lst[i]
    return d

print(splitText(a_lst))



   #Birthday: 15,july,2000
    #{'day': '15', 'month': 'july', 'year': '2000'}

    #Birthday: 28
    #{'day': '28'}

【讨论】:

  • 问题是有时我需要 3 个东西,有时需要 2 个,有时需要 4 个。有什么办法可以让东西的数量可变吗?
  • 不是将结果存储到变量中,而是将其存储到列表中,因为我们不确定要创建多少个变量。您可以使用 for 循环访问列表中的值。
  • 有趣...谢谢!我试试这个。
  • 如果我要保留我的“日、月、年 = input("Birthday: ") 代码怎么办?我并不完全想为其中的每一个都输入一个,更是如此。我想我真的只是在寻找不会拆分的东西,如果输入为空,则为变量分配“无”值。
  • 您可以使用extended literable unpacking 实现此目的。我已经更新了我的答案。希望这可以帮助您解决问题。
【解决方案2】:

您可以使用 *args 来获取多个参数

def my_func(parameter1, parameter2, parameter3, *args):  # *args takes infinite parameters
    print("Parameter1:", parameter1) # Printing parameter 1-3
    print("Parameter2:", parameter2)
    print("Parameter3:", parameter3)
    for argument in args: # For ever argument in our *args
        print('Argument:', argument) # Print the argument


my_func('a', 'b', 'c', 'd', 'e', 'f')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2022-12-07
    相关资源
    最近更新 更多