Python中的表达式是什么?

Flo*_*hen 17 python

我对它的含义或定义有些困惑.

是不是一些产生或计算新数据值的代码?(泽勒在他的书中说)

然后我想知道字符串数据类型是否是表达式.

如果是,那么eval()当它的参数是一个字符串时该怎么办?

Zelle的书说eval(<string>)评价string作为一种表达,如果string已经是一种表达,这究竟意味着什么呢?

如果string不是表达,那怎么会发生print呢?

Gor*_*son 24

表达式表示某些内容,如数字,字符串或类的实例.任何价值都是表达!

任何做某事的都是陈述.对变量或函数调用的任何赋值都是一个语句.表达式中该语句中包含的任何值.

foo = "hello"是一个将foo赋给表达式"hello"的值的语句.由于代码"hello"是一个简单的表达式,意味着它不包含任何操作,实际上没有任何内容被评估,因此foo只被分配给"hello".更复杂的表达式实际上是评估事物,比如添加数字.使用单词表达式似乎让事情变得更加混乱表达式只不过是值,除非它们可以有加法或减法等操作.

eval将字符串计算为python表达式.Eval确实将表达式作为参数.但是,由于每个值都是表达式,所以没有什么特别之处.说"eval以一个值作为一个参数"说的完全相同,但听起来更简单.:d

eval( "2+2" )将字符串传递"2+2"给函数.该函数计算字符串中包含的表达式,该表达式为4.

Zelle的书说将eval(<string>)字符串作为表达式进行求值,如果字符串已经是表达式,这究竟意味着什么呢?

任何字符串都是表达式,因为它表示一个值.但是,字符串中的内容绝对没有影响它作为表达式.如果是一个值,它就是一个表达式.当它被"评估为eval的表达式"时,字符串内的字符就像它们是python表达式一样被执行.

  • 函数调用是Python中的表达式.任何表达式也是一个语句 - 一个"表达式语句".另见我上面给出的相关问题的链接. (7认同)
  • 实际上有一个["官方"定义](http://docs.python.org/reference/expressions.html)是Python中的表达式(基本上所有可以通过`eval()`来评估).并且由于每行上的每个函数调用都是一个表达式语句,因此它们被广泛使用.我不明白为什么正确增加复杂性. (3认同)
  • 很好的解释,除了你不能'eval`语句:在Python 2.x中尝试`eval("print hello")`. (2认同)

Al *_*art 5

TL;DR:表达式是值和运算符的组合,并且始终计算为单个值。语句是所有其他指令。一些语句包含表达式。

一个表达式是一个指令联合值和运算符始终计算到一个单一的值

例如,这是一个表达式:

>>> 2 + 2
Run Code Online (Sandbox Code Playgroud)

2 是整数值,+ 是数学运算符。此表达式向下求值为单个整数值 4。

从技术上讲,这也是一个表达式:

>>> 4
Run Code Online (Sandbox Code Playgroud)

作为表达式,它的计算结果为单个值 4。

当我说值和运算符时,这不仅限于数学问题:

>>> 'You will be ' + str(int(myAge) + 1) + ' next year.'
Run Code Online (Sandbox Code Playgroud)

myAge变量的计算结果为其中的值。函数调用的int('5')计算结果为函数的返回值5。所有这些字符串值都与+运算符组合在一起(在本例中,它是字符串连接运算符)。无论表达式有多大,它都会计算为单个值:在这种情况下,字符串值'You will be 6 next year.'

将此与statement形成对比,它是一条 Python 指令,不会计算为值。Python 语句几乎就是所有不是表达式的东西。这是一个赋值语句

>>> spam = 2 + 2
Run Code Online (Sandbox Code Playgroud)

这是一个 if 语句:

>>> if spam == 4:
Run Code Online (Sandbox Code Playgroud)

这是一个无限循环的 while 语句:

>>> while True:
Run Code Online (Sandbox Code Playgroud)

请注意,这两个语句都包含表达式(even True,其计算结果为单个值True)。但并非所有语句都在其中使用表达式。这是一个中断语句:

>>> break
Run Code Online (Sandbox Code Playgroud)