关于在Python条件语句中使用括号,我有一个简单的问题.
以下两个片段的工作方式相同,但我想知道这是否真实,因为它的简单性;
>>> import os, socket
>>> if ((socket.gethostname() == "bristle") or (socket.gethostname() == "rete")):
... DEBUG = False
... else:
... DEBUG = True
...
>>> DEBUG
Run Code Online (Sandbox Code Playgroud)
现在没有括号
>>> import os, socket
>>> if socket.gethostname() == "bristle" or socket.gethostname() == "rete":
... DEBUG = False
... else:
... DEBUG = True
...
>>> DEBUG
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙解释一下吗?他们在任何情况下我都应该使用它们吗?
例如,如果括号/括号在以下内容中匹配:
({})
(()){}()
()
Run Code Online (Sandbox Code Playgroud)
依此类推,但如果括号/括号不匹配,则应返回false,例如:
{}
({}(
){})
(()
Run Code Online (Sandbox Code Playgroud)
等等.你能查一下这段代码吗?提前致谢.
public static boolean isParenthesisMatch(String str) {
Stack<Character> stack = new Stack<Character>();
char c;
for(int i=0; i < str.length(); i++) {
c = str.charAt(i);
if(c == '{')
return false;
if(c == '(')
stack.push(c);
if(c == '{') {
stack.push(c);
if(c == '}')
if(stack.empty())
return false;
else if(stack.peek() == '{')
stack.pop();
}
else if(c == ')')
if(stack.empty())
return false;
else if(stack.peek() == '(')
stack.pop();
else
return false;
}
return stack.empty();
}
public static …Run Code Online (Sandbox Code Playgroud) 键入函数名称(或自动完成)时,IDEA会自动将括号放在其后面并将光标放在它们之间:foo(|)
我非常不喜欢这个,我更喜欢让我自己输入括号.有没有办法做到这一点?
更新:
回复:"插入对支架"设置:
所以,这个选项已经为我关闭了.我刚测试并发现这只发生在Actionscript文件中.在Java中它只给了我(字符,它让我的类型覆盖它.在Actionscript中,无论我做什么,它都会自动放入两个parens.可能需要深入了解插件.
我试着SQR在下面的代码中使用宏的定义:
#define SQR(x) (x*x)
int main()
{
int a, b=3;
a = SQR(b+5); // Ideally should be replaced with (3+5*5+3), though not sure.
printf("%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它打印23.如果我将宏定义更改为SQR(x) ((x)*(x))然后输出是预期的,64.我知道在C中调用宏会用宏的定义替换调用,但是我仍然无法理解它是如何计算的23.
通常,使用花括号来定义bash函数来包围正文:
foo()
{
...
}
Run Code Online (Sandbox Code Playgroud)
今天在处理shell脚本时大量使用函数时,我遇到的问题是调用函数中调用的名称相同的变量,即那些变量是相同的.然后我发现可以通过将函数内部的局部变量定义为local来防止这种情况:local var=xyz.
然后,在某些时候,我发现了一个线程(使用括号而不是大括号定义bash函数体),其中解释了使用括号来定义函数同样有效:
foo()
(
...
)
Run Code Online (Sandbox Code Playgroud)
这样做的结果是函数体在子shell中执行,这有利于函数具有自己的变量范围,这允许我在没有本地的情况下定义它们.由于具有函数局部范围似乎更有意义,并且比所有变量全局更安全,我立即问自己:
但是,我很快发现了在子shell中执行该函数的一个主要缺点,特别是从函数内部退出脚本不再起作用,而是迫使我在整个调用树中使用返回状态(如果是嵌套函数).这引出了我的后续问题:
(*)我知道(从异常相关的讨论中我偶然发现),有些人认为明确使用错误状态比从任何地方退出要好得多,但我更喜欢后者.
显然这两种风格都有其优点和缺点.所以我希望你们中有些经验丰富的bash用户可以给我一些一般指导:
编辑:从答案的转移
谢谢你的回答,我的脑袋现在对此更加清晰.所以我从答案中得到的是:
坚持传统的花括号,如果只是为了不混淆脚本的其他潜在用户/开发者(如果整个身体被括在括号中,甚至使用括号).
花括号的唯一真正缺点是可以更改父作用域中的任何变量,尽管在某些情况下这可能是一个优点.通过将变量声明为可以很容易地避免这种情况local.
另一方面,使用括号可能会产生一些严重的不良影响,例如搞乱退出,导致杀死脚本的问题以及隔离变量范围.
是否可以调整 VSCode,以便在函数自动完成时使用它()而不是简单的函数名称编写?
例如,当我输入str并自动完成strlen我想要获取时strlen(),它可以节省相当多的时间。
以下程序在gcc 4.8.2上两次打印相同的数字:
#include <stdio.h>
int main()
{
char a[13];
printf("sizeof a is %zu\n", sizeof a );
printf("sizeof(a) is %zu\n", sizeof(a));
}
Run Code Online (Sandbox Code Playgroud)
根据这篇reddit帖子,gcc在这方面并不符合标准,因为当数组到指针衰减没有发生时,括号表达式不在异常列表中.
这家伙是对的吗?这是相关的标准报价:
除非它是运算
sizeof符或一元运算&符的操作数,或者是用于初始化字符数组数组的字符串文字,或者是用于初始化与元素类型兼容的数组的宽字符串文字,否则具有wchar_t的左值类型'array of type'被转换为一个表达式,其类型为'指向类型的指针',指向数组对象的初始成员而不是左值.
为了清楚起见,他认为(a)应该触发数组到指针的衰减,因为上面的列表中没有括号括起来(sizeof运算符,一元运算&符,字符串文字作为初始值).
最近看到像这样的进口
from module import (function, another_function,
another_function)
Run Code Online (Sandbox Code Playgroud)
看起来这样做是为了能够import通过多行来扩展语句.在这种情况下,我通常只是这样导入
from module import function, another_function, \
another_function
Run Code Online (Sandbox Code Playgroud)
在这种情况下括号究竟做了什么,他们认为是不好的做法?
我已经在互联网上看到格式化带有$符号的括号的双重值,即.货币类型.
我正在寻找一种.NET格式的字符串来格式化
12345.67 = 12,345.67
-12345.67 = (12,345.67)
Run Code Online (Sandbox Code Playgroud) 以fmap(Functor方法)的类型签名为例:
(a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
与以下类型签名有何不同?
a -> b -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
这两种类型的签名之间是否存在差异?
parentheses ×10
autocomplete ×2
c ×2
function ×2
python ×2
.net ×1
arrays ×1
bash ×1
conditional ×1
curly-braces ×1
haskell ×1
import ×1
java ×1
macros ×1
sizeof ×1
stack ×1
types ×1
vb.net ×1