【问题标题】:"TypeError: 'list' object is not callable" for keywords= inside a list“TypeError:'list'对象不可调用”关键字=在列表中
【发布时间】:2021-09-24 16:53:44
【问题描述】:

在发布我的代码之前,我将举一个非常简单的例子来说明我正在尝试做的事情

示例 1: 这就是我想要完成的(但在列表中使用关键字)

print("hi", end="****")
output: hi ****

示例 2: 这是我能做到的范围内

keyword = end="****"
print("hi", keyword)
output: hi ****

示例 2: 这就是失败的地方

keywords = ['spam', end="****"]
print("hi", keywords[1])

output: keywords = ['spam', end="****"]
                               ^
SyntaxError: invalid syntax

示例 2.1: 这就是失败的地方(采用类似但不同的方法)

虽然,这行得通

keyword = end="****"
keywords = ['spam', keyword]
print("hi", keywords[1])
output: hi ****

这个不行:

keyword = sep="^^^^", end="****"
keywords = ['spam', keyword]
print("hi", keywords[1])

output: keyword = sep="^^^^", end="****"
                     ^
    SyntaxError: can't assign to literal

这是我的代码:

from sklearn.linear_model import LogisticRegression 
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

LogisticRegression_args = None
KNeighborsClassifier_args = n_neighbors=5
GaussianNB_args = None
DecisionTreeClassifier_args = criterion='entropy'
SVC_args = kernel='linear'
SVC_non_linear_args = kernel='rgb'
RandomForestClassifier_args = criterion='entropy', n_estimators=10, random_state=0

basic_classifier_models = [[[LogisticRegression], [LogisticRegression_args], ['LogisticRegression:']], [[KNeighborsClassifier], [KNeighborsClassifier_args], ['KNeighborsClassifier:']],
                           [[GaussianNB], [GaussianNB_args], ['GaussianNB:']], [[DecisionTreeClassifier], [DecisionTreeClassifier_args], ['DecisionTreeClassifier:']],
                           [[SVC], [SVC_args], ['SVC:']], [[SVC], [SVC_non_linear_args], ['Non_linear SVC:']],
                           [[RandomForestClassifier], [RandomForestClassifier_args], ['RandomForestClassifier:']]]

output: RandomForestClassifier_args = criterion='entropy', n_estimators=10, random_state=0
                                               ^
SyntaxError: can't assign to literal

【问题讨论】:

  • 使用单引号括起类似关键字 = ['spam', 'end="****"']
  • keyword = end="****" 设置两个变量。 keyword = "****"end = "****"。它不会做你认为的那样。
  • 要么使用dictionarykeyword = {sep:"^^^^", end:"****"},要么单独换行keyword = sep="^^^^" end="****"]
  • 这个RandomForestClassifier_args = criterion='entropy', n_estimators=10, random_state=0 正在尝试将它们与RandomForestClassifier_args 绑定?如果是这样,请使用字典。

标签: python syntax


【解决方案1】:

keyword = end="****" 设置两个变量。 keyword = "****"end = "****"。它不会做你认为它会做的事情。您的第二个示例打印了它的作用,因为它相当于调用 print("hi", "****")

要指定参数而不实际在函数调用中写入参数,您可以通过argument unpacking 来完成。

你可以像这样解压一个列表来指定位置参数:

args = ['a', 'b', 'c']
print(*args)
# Output: a b c 

或者,对于关键字 args,您可以像这样解压 dict:

kwargs = { "end": "****\n" }
print("abc", **kwargs)
Output: abc****

你甚至可以两者都做:

args = ["hello", "world"]
kwargs = { "sep": "|", "end": "***\n" }
print(*args, **kwargs)
# Equivalent to print("hello", "world", sep="|", end="***\n")
# Output: hello|world***

【讨论】:

    【解决方案2】:

    您不能在列表中定义变量。下面是如何使这个函数工作(假设我没看错)

    keywords = ['spam', "****"]
    print("hi", keywords[1])
    

    如果您尝试在序列中查找一个单词,这就是我假设这是试图完成的,您可以通过执行以下 for 循环轻松做到这一点:

    check = "hi"
    for item in keywords:
        if check.find(item) != -1:
            print("keyword found in input")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-14
      • 2021-03-30
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2021-03-31
      • 2015-11-11
      相关资源
      最近更新 更多