我读到Python通过缩进而不是花括号来完成它所有的"代码块"。 那正确吗? 所以函数,如果这样的东西都没有用花括号包围它们的块?
stackoverflow.com/questions/1003841/
实际上,Python支持花括号,BEGIN / END以及几乎所有其他语言的块方案:请参阅python.org/doc/humor/!
"毫无疑问,新手足够了"(SO FAQ引用)。这是关于可以回答的问题。我相信这两个都是真的。对于Pythoneers来说,这是一个微不足道的问题,但那又怎样呢?其他人问"如何从时间戳中获得秒数"或"什么是十六进制数",没有人抱怨。
我同意这不是一个糟糕的问题。是的,答案可以在文档等中找到,但许多SO问题的答案也是如此。不熟悉Python的人常常想知道缺少括号,为什么不回答这个问题作为获得最佳答案的方法呢?
@Ned Batchelder:"为什么"这些问题很少有用。然而,在这种情况下,它只是对事实的确认。事实问题的确认实际上是Stack Overflow的不良用法。
我有同样的问题,听说过有可能使用牙套的谣言。我想也许有翻译或类似的选项。我怀疑上面的文档/幽默参考是谣言的来源。现在我知道。体面的问题,好的答案,谢谢大家。
对,是真的!这是我讨厌Python和他的缩进废话的原因之一!
1
2
3
4
5
6if foo: #{
print"it's true"
#}
else: #{
print"it's false!"
#}
(显然,这是一个笑话。)
你太逗了!我想我每次使用python时都会这样做
所以它可能。凉!
@openfrog:不,不是,这些只是单行代码评论......(他确实说这是个玩笑)
这不赞成吗?我来自C ++背景,缺乏大括号对我来说很难让python变得困难
Matt G,它的真实,Python与C ++有不同的语法。你会很快习惯它,不用担心。
我一个人发现Python中缺少花括号是一个缺点。依靠缩进来推断封闭程度会导致模糊的解释。使用花括号,如果您犯了错误,编译器可以主要检测它。对于缩进,通常语法正确的代码在语义上可能是错误的。这个笑话既不好笑也不实用。
您可以尝试使用将来的import语句添加对大括号的支持,但它尚不支持,因此您将收到语法错误:
1
2
3>>> from __future__ import braces
File"", line 1
SyntaxError: not a chance
对于任何想知道的人来说,这个重要的陈述是一个复活节彩蛋。唯一的例外是python devs说"nope,从不添加它"
纠正代码块。但是,您使用花括号在Python中定义词典:
1
2
3a_dict = {
'key': 'value',
}
AHHHHHH。
只为最后的Ahhhhh,+1 :-)
我们甚至不能在评论的开头加上+1,大声笑,只是试试......
是。不使用卷曲括号。相反,您使用:符号来引入新块,如下所示:
1
2
3
4
5if True:
do_something()
something_else()
else:
something()
那你怎么结束一个街区呢?
您可能希望将函数名称重写为符合PEP 8。应该用最好看的例子回答新手问题。
@Jonny:块由一个outdent / dedent / unindent隐式结束 - 即,当你将缩进级别减少一个时。没有用于标记块结尾的显式字符。这确实意味着与C不同,例如,您不能在同一级别拥有多个块,因为它会产生歧义。
使用Whyton:
请注意,您无法在Whython中将语句嵌套到任意深度。例如,if块不能包含另一个if块。
@AsadSaeeduddin这是一件好事。来自Python的禅宗:"扁平比嵌套好。"
@Joschua我仍然希望你可以嵌套陈述
对 :)
而且(通常)4个空格和一个标签之间存在差异,因此请确保标准化使用情况。
强烈建议在tab上使用4个空格,所以如果你目前使用标签,请改变旧习惯:)
我不会改变空格的标签。我写了10年的所有其他代码使用tab缩进没有任何问题。
@Jordan Messina我不同意,强烈如此。对于缩进目的,制表符非常优于空格。我知道Python正式建议使用空格,但我希望它没有。
@JordanMessina使用4个空格增加文件大小比标签大4倍...使用标签随处可见,你不需要使用配置的编辑器来替换4个空格的tab键。这些是使用制表符而不是缩进空格的好理由。
Python with Braces是python的一个变种,可以让你做到这一点。
这是我最近和朋友一起工作的一个项目。
是。
1
2
3
4
5
6if True:
#dosomething
else:
#dosomething else
#continue on with whatever you were doing
基本上,无论你在哪里都有一个开口花括号,请使用冒号代替。 Unindent关闭该地区。它感觉完全自然不需要很长时间。
Python不对代码块使用花括号:
1
2
3
4
5
6
7
8
9>>> while True {
File"", line 1
while True {
^
SyntaxError: invalid syntax
>>> from __future__ import braces
File"", line 1
SyntaxError: not a chance
(请注意"非机会"消息 - 这是反映此设计决定的复活节彩蛋。)
作为一种易于使用和阅读的语言,Python使用冒号和缩进来指定代码块。通过缩进定义代码块是不寻常的,对于习惯于C ++和C#等语言的程序员来说,这可能会让他们感到惊讶,因为这些(和许多其他语言)不关心额外的空格或缩进。此规则旨在提高Python代码的可读性,代价是程序员可以自由使用不同数量的空白。
缩进级别的增加表示代码块的开始,而减少表示代码块的结束。按照惯例,每个压痕宽度为四个空间。
这是一个简单的例子,它将0到9之间的所有整数相加。请注意,Python中的范围包括第一个值,最多但不包括最后一个值:
1
2
3
4j = 0
for i in range(0, 10):
j += i
print(j)
正如其他人所提到的,你是正确的,在Python中没有花括号。此外,你没有没有结尾或endif或endfor或类似的东西(如pascal或ruby)。所有代码块都是基于缩进的。
1
2
3>>> from __future__ import braces
File"", line 1
SyntaxError: not a chance
那很好地解释了。
但请注意,Python本身支持大括号代码块!看看下面:
1
2
3if x: #{
x += 1
#}
对于Ada或Pascal程序员,我很高兴向您透露:
1
2
3if x: #BEGIN
...
#END
取自文档:
Python's parser is also sophisticated enough to recognize mixed
notations, and it will even catch missing beginning or end
delimiters and correct the program for the user. This allows the
following to be recognized as legal Python:
1
2
3if x: #BEGIN
x = x + 1
#}
对于Bash用户来说:
1
2
3if x:
x=99
#fi
更好的是,对于熟悉C,C ++等的程序员来说,只需要一个语句就可以完全省略花括号:
1
2if x:
do_stuff()
美丽。如前所述,Python还可以使用不正确的分隔符自动更正代码,因此此代码也是合法的:
1
2
3
4if x:
do_a_hundred_or_more_statements()
x = x + 1
print(x)
因为这必须让你更喜欢Python,我会向你发送文档的最后一句话。
Now as you can see from this series of examples, Python has
advanced the state of the art of parser technology and code
recognition capabilities well beyond that of the legacy languages.
It has done this in a manner which carefully balances good coding
style with the need for older programmers to feel comfortable with
look of the language syntax.
唯一的限制是这些特殊的分隔符前面有一个#标签符号。
是的,Python中的代码块是由它们的缩进定义的。 Python的创建者对自我记录代码非常感兴趣。它们在语法中包含缩进,作为一种天生地执行良好格式化实践的方式。
我用Python编程了几年,并且非常喜欢它的代码结构,因为它真的很容易。你有没有在一个大型程序中遗漏一个结束的大括号,花了几个小时试图找到它?在Python中不是问题。当我离开那份工作并且不得不开始使用PHP时,我真的很想念Python语法。
"你有没有在一个大型计划中遗漏一个结束的大括号,并花了几个小时试图找到它?"没有永不。但是我曾经有过几次工具或编辑搞砸了空白,并且没有办法消除结果的歧义。
@alexh时代真的发生了变化!回到公元前几天(手机之前)我们并没有总是能够自动匹配或自动插入括号,parens等的文本编辑器。我相信你的经验表明,空白检测功能的开发通常落后于支架匹配。有专为Python设计的文本编辑器,它们不会搞砸空白。提示:确保将编辑器设置为标识空格和制表符。
是的你可以使用这个库/包{Py}
使用花括号而不是缩进,加上Python的语法添加了更多的糖。
https://pypi.org/project/brackets/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24// 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)])
在Python中,四个空格()用于缩进而不是花括号({)。虽然,在Python的几个地方使用花括号,它们用于不同的目的:
初始化非空集(无序的唯一元素集合):
1fuitBasket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
引文
初始化一个空字典(键值对):
1telephoneNumbers = {}
初始化非空字典(键值对):
1telephoneNumbers = {'jack': 4098, 'sape': 4139}
引文
关于格式字符串,花括号具有不同的含义。请参阅https://docs.python.org/3/library/string.html?highlight=curly:
Format strings contain"replacement fields" surrounded by curly braces
{}. Anything that is not contained in braces is considered literal
text, which is copied unchanged to the output. If you need to include
a brace character in the literal text, it can be escaped by doubling:
{{ and }}.
我会对这个问题有所了解。
不可否认,起初我还认为编写没有花括号的代码很奇怪。但在使用Python多年后,我认为这是一个很好的设计。
首先,我们真的需要花括号吗?我的意思是,作为一个人。如果允许你在Python中使用花括号,你不会再使用缩进吗?当然,你仍然会使用缩进!因为你想编写可读代码,缩进是关键点之一。
第二,什么时候我们真的需要花括号?据我所知,当我们需要缩小源代码文件时,我们只需要大括号。像缩小的js文件一样。但是,即使源代码的大小敏感,你会使用Python吗?据我所知,你也不会。
最后,我认为花括号在某种程度上像;。这只是一个历史问题,无论有没有它,我们总是会在Python中使用缩进。