import sys
import pathlib
import os
def GetAndSplitCommand(line, file):
if line is 1:
line = 0
f=open(file)
lines=f.readlines()
unsplit=lines[line]
split=unsplit.split()
return split
def ExecuteCode(*args):
lists = [item for item in args]
print(lists)
parameters = args
if lists[0] == "hi":
HelloWorld()
return
elif lists[0] == "bye":
GoodbyeWorld()
return
def HelloWorld():
print(" Hello World!")
return
def GoodbyeWorld():
print(" Bye World!")
return
command = GetAndSplitCommand(1, "food.txt")
ExecuteCode(command)
在food.txt中,我有一个单词“ hi”,因此,使用此代码,它应该打印出“ Hello World!”,但是它只是打印出[['hi']]。我已经尝试过很多次以重新格式化代码,并且我需要我做些什么的建议。
而且,这不是缩进问题,stackoverflow不适用于我的代码。
另一个说明,该程序实质上是要读取文件的行,将行拆分为单独的“参数”,然后使用ExecuteCode()函数在第一个参数为X的情况下执行某些操作。
答案 0 :(得分:0)
在我看来,您似乎误解了*args
在函数声明中的作用。
编写def ExecuteCode(*args):
时,您就想保留允许使用可变数量的参数来调用ExecuteCode
的功能。例如,其他代码可以调用ExecuteCode("foo", "bar", "baz")
(三个参数)或ExecuteCode()
(零参数)。函数中的args
变量将是这些参数值的列表(因此,我的两个示例调用为["foo", "bar", "baz"]
或[]
。
在您的代码中,您正在使用一个参数ExecuteCode(command)
调用该函数。如果command
是列表['hi']
,则在ExecuteCode
内,args
将是[['hi']]
,因为它总是将参数放在列表中,因为可能存在其中几个。
您可能不需要在这里使用*args
。相反,只需使用:
def ExecuteCode(lists):
if lists[0] == "hi":
...
请注意,您的代码还存在其他一些样式问题(这不会阻止代码运行,但确实会使它变得更加复杂或令人困惑)。一个问题是命名。常见的Python约定是对大多数函数使用lowercase_names_with_underscores
,对类保留CapitalizedNames
。另一个问题是选择清楚其作用的名称。 lists
中的ExecuteCode
变量就是一个例子。在您当前的错误代码中,它是一个列表列表,因此名称可能很有道理(如果您想要的话),但是如果您按照我上面的建议将其更改为字符串列表,您应该将其重命名,因为它不再是列表列表。