直接从输入法

时间:2017-12-04 10:04:35

标签: python python-3.x

假设有一个函数funx,它接受​​多个参数(如funx(item, quantity, price))并输出相应的值。

现在我通常可以做的就是调用函数并像这样传递args:funx(Lays, 2, 40)

但是我想要做的就是这样(虽然这会引发错误)

funx(item, quantity, price = input("use format 'Lays, 2, 40', use commas : ").split(','))

一次用户输入... 我本可以做到这一点(我知道它更干净):

def funx(item, quantity, price):
    print(item, quantity, price)

def input_funx():
    item, quantity, price = input("use format 'Lays, 2, 40', use commas : ").split(',')
    return(item, quantity, price)

funx("Monaco", 3, 30)
funx(input_funx())
#but I want some different approach coz i won't be using this input_funx later

并且可以调用funx(input_funx())并完成工作,但只是探索是否有类似的东西。

这是错误:funx(input("enter in this format '' Lays, 20, 200 ''...use commas for separation : ").split(',')) TypeError: funx() missing 2 required positional arguments: 'quantity' and 'price'

注意:我探讨了lambda函数,如果它可以使用但发现它返回单个参数。(如果错误,请纠正我):3

有没有这样的方式...... funx(item, quantity, price= input("%s,%d,%f")) ...或任何直观的方式(使用字典或列表或任何东西)在单行完成工作。

欢迎任何帮助。先感谢您。

2 个答案:

答案 0 :(得分:0)

您可以使用参数扩展并避免所有这些:

def funx(param1, param2, param3):
    print("Called with params: {}, {}, {}".format(param1, param2, param3))

funx( * input("use format 'Lays, 2, 40', use commas : ").split(","))
# or if you insist on whitespaces:
# funx( * (a.strip() for a in input("use format 'Lays, 2, 40', use commas : ").split(",")))

话虽如此,没有理由让你的代码难以理解并且难以调试。

答案 1 :(得分:0)

您需要使用.split()解包从*input(...)返回的'元组':

>>> def funx(a1,a2,a3):
...     print(a1,a2,a3)
... 
>>> funx(*input("enter in this format '' Lays, 20, 200 ''...use commas for separation  :  ").split(','))

输出:

Lays  2  2