【问题标题】:List of Python keywords that are valid within (lambda) expression在 (lambda) 表达式中有效的 Python 关键字列表
【发布时间】:2016-03-23 18:40:56
【问题描述】:

为了使用 Scintilla.Net 完成代码,我需要在表达式中有效的关键字列表。您可以通过“关键字”模块获取所有关键字,但例如“raise”和“print”不能在 lambda 表达式中使用。如何获得精简后的关键字列表?

keyword.kwlist 产量

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif ', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

表达式中可以使用哪些?

【问题讨论】:

  • 所有关键字都有效..问题是它必须是“表达”而不是“陈述”(如果您觉得其他问题不是这里关于原因的重复评论,我会投票适当时重新打开)
  • 例如“lambda : raise Exception()”不起作用,因此“raise”似乎不是表达式中的有效关键字。 “print”在 Python 3 中有效,在 Python 2 中无效。
  • raise Exception() 是一个语句而不是一个表达式......阅读欺骗
  • 对,那么raise关键字在表达式中不是有效关键字,或者你能构造一个包含raise的表达式吗?我只想要有效关键字的列表。
  • no raise 不能在表达式中使用……你说得对……但它与关键字无关……

标签: python python-2.7 scintillanet


【解决方案1】:

你在这里问错了问题。 lambda 表达式是否可以使用关键字与实际有效无关。

https://docs.python.org/2.7/reference/expressions.html#lambda

lambda_expr     ::=  "lambda" [parameter_list]: expression
old_lambda_expr ::=  "lambda" [parameter_list]: old_expression

重要的是 lambda 的主体是一个表达式。或者换句话说,可以评估为值的东西。这意味着它不能包含语句。

因此,弄清楚可以使用哪些关键字组合来形成表达式,您就会得到答案。

文档还提到了另一个类似的代码块:

def name(arguments):
    return expression

换句话说,lambda 的主体必须是可以放在 return 语句中的东西......一个表达式。

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 2019-09-14
    • 1970-01-01
    • 2016-07-30
    • 2016-04-10
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多