我不能在Python中使用花括号吗?

ope*_*rog 44 python

我读到Python通过缩进而不是花括号来完成它所有的"代码块".是对的吗?所以函数,如果这样的东西都没有用花括号包围它们的块?

小智 281

if foo: #{
    print "it's true"
#}
else: #{
    print "it's false!"
#}
Run Code Online (Sandbox Code Playgroud)

(显然,这是一个笑话.)

  • 你太逗了!我想我每次使用python时都会这样做 (16认同)
  • 这不赞成吗?我来自C++背景,缺乏大括号对我来说很难让python变得困难 (6认同)
  • @openfrog:不,不是,这些只是单行代码评论......(他确实说这是一个笑话) (5认同)

Ada*_*eld 87

您可以尝试使用将来的import语句添加对大括号的支持,但它尚不支持,因此您将收到语法错误:

>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance
Run Code Online (Sandbox Code Playgroud)

  • 对于任何想知道的人来说,这个重要的陈述是一个复活节彩蛋.唯一的例外是python devs说"nope,从不添加它" (8认同)

Pau*_*ite 36

纠正代码块.但是,您使用花括号在Python中定义词典:

a_dict = {
    'key': 'value',
}
Run Code Online (Sandbox Code Playgroud)

AHHHHHH.

  • 只是为了最后的啊,+1 :-) (4认同)
  • 我们甚至不能再在评论的开头加上 +1 了,哈哈,试试吧…… (2认同)

Luc*_*nes 27

是.不使用卷曲括号.相反,您使用:符号来引入新块,如下所示:

if True:
    do_something()
    something_else()
else:
    something()
Run Code Online (Sandbox Code Playgroud)

  • @Jonny:块由一个outdent/dedent/unindent隐式地结束 - 也就是说,当你将缩进级别减少一个时.没有用于标记块结尾的显式字符.这确实意味着与C不同,例如,您不能在同一级别拥有多个块,因为它会产生歧义. (9认同)
  • 那你怎么结束一个街区呢? (8认同)
  • 您可能需要重写函数名称以符合 PEP 8。新手问题应该用最好看的例子来回答。 (2认同)

cwa*_*wap 11

对 :)

而且(通常)4个空格和一个标签之间存在差异,因此请确保标准化使用情况.

  • 我不会改变空格的标签.我写了10年的所有其他代码都使用了tab缩进而没有任何问题. (12认同)
  • @Jordan Messina我不同意,强烈如此.对于缩进目的,制表符非常优于空格.我知道Python正式建议使用空格,但我希望它没有. (11认同)
  • 强烈建议在tab上使用4个空格,所以如果你目前使用标签,请改变旧习惯:) (6认同)
  • @JordanMessina使用4个空格会增加文件大小,其大小是制表符的4倍...而且使用制表符可在所有地方使用,您无需使用配置的编辑器就可以用4个空格替换制表键。这些是使用制表符而不是空格进行缩进的充分理由。 (2认同)

Ski*_*ick 8

是.

if True:
    #dosomething
else:
    #dosomething else

#continue on with whatever you were doing
Run Code Online (Sandbox Code Playgroud)

基本上,无论你在哪里都有一个开口花括号,请使用冒号代替.Unindent关闭该地区.它感觉完全自然不需要很长时间.


esh*_*azi 8

Python with Braces是python的一个变种,可以让你做到这一点.这是我最近和朋友一起工作的一个项目.

  • 该链接不再有效。是否有任何其他链接(或您发现的任何其他项目可以做同样的事情但稳定)? (3认同)

bwD*_*aco 6

Python不对代码块使用花括号:

>>> while True {
  File "<stdin>", line 1
    while True {
               ^
SyntaxError: invalid syntax

>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance
Run Code Online (Sandbox Code Playgroud)

(请注意"非机会"消息 - 这是反映此设计决定的复活节彩蛋.)

作为一种易于使用和阅读的语言,Python使用冒号和缩进来指定代码块.通过缩进定义代码块是不寻常的,对于习惯于C++和C#等语言的程序员来说,这可能会让人感到意外,因为这些(和许多其他语言)不关心额外的空格或缩进.此规则旨在提高Python代码的可读性,代价是程序员可以自由使用不同数量的空白.

缩进级别的增加表示代码块的开始,而减少表示代码块的结束.按照惯例,每个压痕宽度为四个空间.

这是一个简单的例子,它将0到9之间的所有整数相加.请注意,Python中的范围包括第一个值,最多但不包括最后一个值:

j = 0
for i in range(0, 10):
    j += i
print(j)
Run Code Online (Sandbox Code Playgroud)


Ben*_*enj 6

>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance
Run Code Online (Sandbox Code Playgroud)

嗯,这解释了很多。
但是请注意,Python 本身确实支持花括号-d 代码块!看看下面:

if x: #{
    x += 1
#}
Run Code Online (Sandbox Code Playgroud)

对于 Ada 或 Pascal 程序员,我很高兴向您透露:

if x: #BEGIN
    ...
#END
Run Code Online (Sandbox Code Playgroud)

取自文档

Python 的解析器也足够复杂,可以识别混合符号,它甚至可以捕获丢失的开始或结束分隔符,并为用户纠正程序。这允许将以下内容识别为合法的 Python:

if x: #BEGIN
     x = x + 1
#}
Run Code Online (Sandbox Code Playgroud)

而这对于 Bash 用户来说:

if x:
    x=99
#fi
Run Code Online (Sandbox Code Playgroud)

更好的是,对于熟悉 C、C++ 等的程序员来说,您可以完全省略花括号,仅在一个语句中使用:

if x:
    do_stuff()
Run Code Online (Sandbox Code Playgroud)

美丽的。如前所述,Python 也可以自动更正带有不正确分隔符的代码,所以这段代码也是合法的:

if x:
    do_a_hundred_or_more_statements()
    x = x + 1
    print(x)
Run Code Online (Sandbox Code Playgroud)



由于这一定会让您更加喜欢 Python ,因此我将文档中的最后一句话送给您。

现在,您可以从这一系列示例中看到,Python 已将解析器技术和代码识别功能的最新技术发展到远远超出传统语言的水平。它以一种谨慎平衡良好编码风格与老程序员对语言语法外观感到舒适的需求的方式做到了这一点。

唯一的限制是这些特殊分隔符前面有一个主题标签符号。

  • 那是 Snarkoverflow。 (3认同)

小智 6

是的,您可以使用这个库/包 { Py } 使用大括号而不是缩进,并在 Python 语法中添加更多糖分。

https://pypi.org/project/brackets/

// Use braces in Python!

def fib(n) {
  a, b = 0, 1
  while (a < n) {
    print(a, end=' ')
    a, b = b, a+b
  }
  print()
}

/*
  Powerful anonymous functions
*/

print([def(x) {
  if(x in [0, 1]) {
    return x
  };
  while (x < 100) {
    x = x ** 2
  };
  return x
}(x) for x in range(0, 10)])
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,该项目已于 2018 年终止。以下项目目前处于活动状态。https://github.com/raptor4694/PyJava (6认同)