当前位置: 首页 > 知识库问答 >
问题:

为什么不同时有运算符作为关键词和功能呢?

萧心远
2023-03-14

我看到这个问题,就想知道。

忽略了几乎所有语言都必须向后兼容的事实,有什么理由我们不能使用运算符作为关键字和函数,这取决于它是否紧跟括号?这会让语法更难吗?

我想的主要是python,但也像C语言。

共有2个答案

曾鸿振
2023-03-14

根据语言的不同,未定义not()。如果not()未在某些语言中定义,则无法使用它。为什么不()在某些语言中没有定义?因为这种语言的创造者可能不需要这种语言结构。因为让事情变得更简单更好。

刘星火
2023-03-14

Perl做了与此非常相似的事情,结果有时令人惊讶。你会在许多Perl文本中找到关于这个的警告;例如,这个来自标准的分布式Perl留档(man perlfunc):

     print 1+2+4;      # Prints 7.
     print(1+2) + 4;   # Prints 3.
     print (1+2)+4;    # Also prints 3!
     print +(1+2)+4;   # Prints 7.
     print ((1+2)+4);  # Prints 7.

一个更令人惊讶的案例,它经常咬新来者:

 print
      (a % 7 == 0 || a % 7 == 1) ? "good" : "bad";

将打印0或1。

简而言之,这取决于你的语法分析理论。许多人认为解析应该是精确的和可预测的,即使这会导致令人惊讶的解析(如链接问题中的Python示例,或者更著名的是,C最烦人的解析)。其他人倾向于Perl的“照我说的做”哲学,尽管结果——如上所述——有时与程序员实际的意思大不相同。

C、 C和Python都倾向于“精确和可预测”的理念,现在它们不太可能改变。

 类似资料:
  • 问题内容: 为什么在Python中没有and运算符? 问题答案: 不是因为它没有道理;而是因为它没有意义。最好将“ x ++”定义为“ x + = 1,求出x的先前绑定”。 如果您想知道最初的原因,则必须浏览旧的Python邮件列表,或者询问那里的某个人(例如Guido),但是在事实成立之后就很容易找到理由了: 与其他语言一样,不需要简单的增量和减量。您不会经常用Python编写东西。相反,你做类

  • targetPixValList是一个包含Double对象的列表,它也包含列表中连续位置的相似值,当我尝试使用Code_1比较两个Double值时,cnt返回零。当我使用code_2时,cnt返回值。 列表的类型是 为什么“==”运算符不能与Double一起使用? 代码_1: Code_2:

  • 根据我的理解,Flink中的运算符有源运算符、转换运算符等。我对Flink中运算符的理解正确吗? 在运算符状态下,Flink是维护每个运算符的状态(如针对每个作业/任务的map(),reduce()等),还是维护一个完成的作业/任务的状态?还有,如果我的作业是以多个并行提交的,那么每个槽会有自己的状态吗?

  • 问题内容: 我不明白为什么Python没有功能。它有一个内置的(我认为是姐姐),但没有。 在python 2.6中甚至有一个函数(在math中),但是没有符号。当您可以只写一个然后直接从中获取时,为什么还要写一个?后者会更清楚:x带有y的符号,而带copysign的则必须记住它是x带有y的符号还是y带有x的符号! 显然,除了,它不提供任何其他功能,但是它也将更具可读性(对于像python这样的高度

  • 代码 产出(如预期) 1.post increment运算符()在表中具有最高的优先级。因此它肯定会在赋值运算符()之前执行。根据post增量规则,变量的值只有在执行该语句之后才会增加。 参见有rvalue 3,而不是变量本身,对吗?但是如果它带来了一个具有lvalue的变量,那么5将插入其中,在语句结束后,它的值将是6。这有什么问题,为什么做不到?

  • 问题内容: 考虑以下代码: 为什么会这样呢? 为确保以上内容正确无误,我刚刚在Windows上的Python 2.5.4、2.6.5、2.7b2,Python 3.1和Linux上的Python 2.7b1上进行了测试。 看起来所有这些对象之间都具有一致性,所以这是设计使然。我想念什么吗? 我只是从我的一些个人域过滤脚本中发现失败了。 问题答案: 验证对象的身份,和Python,任何执行时,它符合