有没有更好的方法在python中编写这段代码?
result = slow_function()
if result:
return result
[...]
Run Code Online (Sandbox Code Playgroud)
该函数slow_function可以返回一个值,或者None它很慢,所以这是不可行的:
if slow_function():
return slow_function()
Run Code Online (Sandbox Code Playgroud)
第一种方式没有任何问题,但使用临时变量似乎对python来说太过分了.
当您解决在使用递归调用过的问题.此代码是非常有用的f,并与当地的假设,比如你从列表中选择一个项目,然后检查是否有一个可行的解决方案,否则,你必须选择另外一个.就像是:
def f(n):
for x in xrange(n):
result = slow_function(x):
if result:
return result
[...]
Run Code Online (Sandbox Code Playgroud)
不是更好的东西,如:
def f(n):
for x in xrange(n):
return slow_function(x) if is not None
Run Code Online (Sandbox Code Playgroud)
这可以扩展到检查任何类型的值.如果声明,它将是一个易于阅读的返回.
想象一下,你有一个数字列表列表:
lists = [[1,2,3],[4,5],[6,7,8],[9,10],...]
Run Code Online (Sandbox Code Playgroud)
并且您希望为每个列表选择一个项目,以便在选择中最多有一个偶数.可能有很多列表,所以尝试每个组合都会浪费,因为你已经可以告诉你,如果你开始选择[1,2,4,...],就没有可行的解决方案.
def check(selected):
even_numbers = filter(lambda n: (n % 2) == 0, selected)
return len(even_numbers) < 2
def f(lists, …Run Code Online (Sandbox Code Playgroud) 如您所知,在Eclipse中,您可以启用" 不必要的'else'语句 "检查,这将在if-then-else上触发,提前返回.而且,根据我的经验,使用此类声明时有两种最可能的情况:
1)预检:
if (!validate(arg1)) {
return false;
}
doLotOfStuff();
Run Code Online (Sandbox Code Playgroud)
2)检查后:
doLotOfStuff();
if (condition) {
return foo;
} else {
return bar;
}
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,如果触发器打开,Eclipse将建议您将代码更改为:
doLotOfStuff();
if (condition) {
return foo;
}
return bar;
Run Code Online (Sandbox Code Playgroud)
但是,我认为使用else语句返回更具可读性,因为它类似于业务逻辑的直接映射.如果这个"不必要的'其他'声明"代码约定很普遍,或者使用else语句的代码更优选,那么我很好奇吗?
有些人认为多个return语句是错误的编程风格.虽然对于较大的方法也是如此,但我不确定它是否适用于较短的方法.但是还有另一个问题:如果else前面有回复声明,应该明确写出来if吗?
隐含的else:
private String resolveViewName(Viewable viewable) {
if(viewable.isTemplateNameAbsolute())
return viewable.getTemplateName();
return uriInfo.getMatchedResources().get(0).getClass().toString();
}
Run Code Online (Sandbox Code Playgroud)
明确else:
private String resolveViewName(Viewable viewable) {
if(viewable.isTemplateNameAbsolute())
return viewable.getTemplateName();
else
return uriInfo.getMatchedResources().get(0).getClass().toString();
}
Run Code Online (Sandbox Code Playgroud)
从技术上讲,else这里没有必要,但它更明显.
也许是一次回报最简洁的方法:
private String resolveViewName(Viewable viewable) {
String templateName;
if(viewable.isTemplateNameAbsolute())
templateName = viewable.getTemplateName();
else
templateName = uriInfo.getMatchedResources().get(0).getClass().toString();
return templateName;
}
Run Code Online (Sandbox Code Playgroud)
你更喜欢哪一个?其他建议?
我和一位同事对以下哪一项更优雅存在争议.我不会说谁是谁,所以它是公正的.哪个更优雅?
public function set hitZone(target:DisplayObject):void
{
if(_hitZone != target)
{
_hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
_hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
_hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);
_hitZone = target;
_hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
_hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
_hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);
}
}
Run Code Online (Sandbox Code Playgroud)
...要么...
public function set hitZone(target:DisplayObject):void
{
if(_hitZone == target)return;
_hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
_hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
_hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);
_hitZone = target;
_hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
_hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
_hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
为什么在方法结束时返回是一个好习惯
我想知道是否可以认为良好做法在方法中使用多个RETURN语句以及为什么.如果没有,我想知道如何以不同的方式重写代码.
public string GetNominativeById(int? candidateId)
{
if (candidateId.HasValue)
return repepositoryCandidate.GetById(candidateId.Value).Nominative;
else
return string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
一个回归
public string GetNominativeById(int? candidateId)
{
string result;
if (candidateId.HasValue)
result = repepositoryCandidate.GetById(candidateId.Value).Nominative;
else
result = string.Empty;
return result;
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
函数是否只有一个return语句?
这就是我所说的.
if (condition) {
aVariable = 1;
return;
}
doSomething();
if (condition) {
aVariable = 1;
} else {
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
这些中的一个优先于其他(惯例等)吗?
我喜欢return每种方法只有一个语句的想法.
你在这种情况下做了什么?
public static string ChopText(string Text)
{
if (String.IsNullOrEmpty(Text))
{
// return here ?????
}
}
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一选择是设置一个标志,然后检查标志.
问题是,我不喜欢有超过一页的巨大if语句. 由于这个原因,我也看到了丑陋的嵌套if语句.
所以我现在一直在努力解决问题,我想在这里也可以寻求帮助.
我将Ticket对象添加到TreeSet,Ticket实现Comparable并重写了equals(),hashCode()和CompareTo()方法.我需要使用contains()检查对象是否已经在TreeSet中.现在在将2个元素添加到集合之后,它们全部检查得很好,但在添加第三个之后它会搞砸了.
在向TreeSet添加第三个元素后运行这一小段代码,Ticket temp2是我正在检查的对象(verkoopLijst).
Ticket temp2 = new Ticket(boeking, TicketType.STANDAARD, 1,1);
System.out.println(verkoop.getVerkoopLijst().first().hashCode());
System.out.println(temp2.hashCode());
System.out.println(verkoop.getVerkoopLijst().first().equals(temp2));
System.out.println(verkoop.getVerkoopLijst().first().compareTo(temp2));
System.out.println(verkoop.getVerkoopLijst().contains(temp2));
Run Code Online (Sandbox Code Playgroud)
返回:
22106622
22106622
true
0
false
Run Code Online (Sandbox Code Playgroud)
现在我的问题是这甚至可能如何?
编辑:
public class Ticket implements Comparable{
private int rijNr, stoelNr;
private TicketType ticketType;
private Boeking boeking;
public Ticket(Boeking boeking, TicketType ticketType, int rijNr, int stoelNr){
//setters
}
@Override
public int hashCode(){
return boeking.getBoekingDatum().hashCode();
}
@Override
@SuppressWarnings("EqualsWhichDoesntCheckParameterClass")
public boolean equals(Object o){
Ticket t = (Ticket) o;
if(this.boeking.equals(t.getBoeking())
&&
this.rijNr == t.getRijNr() && this.stoelNr == t.getStoelNr()
&&
this.ticketType.equals(t.getTicketType()))
{ …Run Code Online (Sandbox Code Playgroud) 我总是编写我的JavaScript块
var functionName = function() {
if (someCondition) {
// stuff
} else {
// stuff
}
};
Run Code Online (Sandbox Code Playgroud)
但今天我看到了
var functionName = function() {
if (someCondition) {
// stuff
return;
}
// stuff
};
Run Code Online (Sandbox Code Playgroud)
我喜欢第一个例子在逻辑中更明确.你想要或不想以第二种方式展示它的原因是什么?
代码:
public String getTemperatureMessage(double temp)
{
if(temp < 32)
return "Freezing";
else if(temp < 60)
return "Brr";
else if(temp < 80)
return "Comfortable";
else
return "Too hot";
}
Run Code Online (Sandbox Code Playgroud)
关于上面的代码片段,else ifs在技术上是多余的,并且根本不会改变行为.但是,我倾向于把它们放在那里强调条件是排他性的.你的想法是什么?不必要或更清楚?
java ×5
coding-style ×3
return ×2
asp.net ×1
c# ×1
contains ×1
eclipse ×1
if-statement ×1
javascript ×1
methods ×1
preferences ×1
python ×1
syntax ×1
treeset ×1