What is an expression in Python?
我对它的含义或定义有些困惑。
这不是生成或计算新数据值的代码吗?(泽尔在书中说)
然后我想知道字符串数据类型是否是表达式。
如果是,那么当参数是字符串时,
Zelle Says
如果
表达式表示一些东西,如数字、字符串或类的实例。任何值都是表达式!
做什么都是声明。对变量或函数调用的任何赋值都是语句。表达式中该语句中包含的任何值。
The book by Zelle says
eval( evaluates string as an expression, what does that exactly mean if string is already an expression?)
任何字符串都是表达式,因为它表示一个值。但是,字符串中的内容对表达式的形式绝对没有影响。如果它是一个值,则它是一个表达式。当它被"eval计算为表达式"时,字符串中的字符将被执行,就像它们是一个python表达式一样。
tl;dr:表达式是值和运算符的组合,并且始终计算为单个值。陈述是每一条指令。有些语句包含表达式。
表达式是一条将值和运算符组合在一起并始终计算为单个值的指令。
例如,这是一个表达式:
1 | >>> 2 + 2 |
2s是整数值,+是数学运算符。此表达式的计算结果为单个整数值4。
从技术上讲,这也是一个表达:
1 | >>> 4 |
作为表达式,它的计算结果为单个值4。
当我说值和运算符时,这不仅限于数学问题:
1 | >>> 'You will be ' + str(int(myAge) + 1) + ' next year.' |
这与一条语句形成对比,该语句是一条不计算值的python指令。python语句几乎是所有其他不是表达式的语句。这是一份分配声明:
1 | >>> spam = 2 + 2 |
这里有一个if语句:
1 | >>> if spam == 4: |
下面是无限循环的while语句:
1 | >>> while True: |
注意,这两个语句都包含表达式(甚至是
1 | >>> break |
一旦您不去想Python自己的脚本解析器如何工作,"表达式"可能是一个稍微令人困惑的术语。标准文档对表达式和"原子"进行了区分,但我认为这使得它的术语非常严格(5.11的BNF图意味着要成为表达式,必须是lambda形式或条件表达式,我认为。我的BNF生锈了。)
另一方面,原子似乎覆盖了@kynnysmatto所说的"任何有价值的东西"。也许"任何可以用括号括起来的东西,然后从括号的外面看,它和它相应的值是不可区分的"可能是一个更好的原子定义。
当Zelle在eval(foo)等上下文中讨论表达式时,我认为他暗示:
- foo是一个标识符,它是一种原子类型
- 但是foo是某个东西的标识符
- 这个"某物"是字符串,可能是实际的字符串
- 在eval()的内部,这个字符串还构成了一个python"表达式"——也就是说,python可以解析和理解的东西。
tl;dr:"表达式"作为术语在代码解析方面可能最容易理解;当您自己编程时,您可能会发现最好用"原子"来思考。
字符串是表达式。表达式是任何具有"值"的东西。比如3,‘hello world’,1+1,math.sqrt(9)等。函数名也是表达式。
eval()将表达式的值作为字符串提供给它。如果你说eval("1+1"),它返回2。所以它返回相同的结果,如果你简单地写:1+1,它会返回相同的结果。