我正在努力解决这个问题,并且非常有信心以下内容会引起问题。寻找确认
if row['High'] < sl_c: # Check if SL is being hit
sl_ci = row['Low'] + sl
# sl_ci = row['High'] - sl # chenge sl which is being looked for.
if sl_ci < sl_c: # Verify sl_ci is greater than current
sl_c = sl_ci
buy_l[key].at[e, 'sl'] = sl_c # Input sl to dfent
buy_l[key].at[e, 'sltime'] = row['Time'] # Input time of sl modification
# buy_l[key].at[e,'sl'] = sl_c
elif row['High'] > sl_c: # If SL is hit
buy_l[key].at[e,'Buy'] = sl_c # input the sl_c as exit
buy_l[key].at[e, 'CloseTime'] = row['Time'] # input the time of exit
正如您所看到的,在第一条sl_c
语句中正在检查if
,而嵌套的if
在第二条条件sl_ci
中对其进行了检查。当两个条件都满足时,我们将更改一个特定值。
elif
正在检查sl_c
,我认为上面已经对其进行了修改,并可能基于新值满足/拒绝条件?
这可能更清楚
if x == -1:
y= -2
if y < x:
x=y
elif x<-1: # Will the value be checked even though above if condition is met?
# if it will be, then will the x value being checked be -2?
答案 0 :(得分:0)
elif
的条件永远不会被评估,因为第一个if
被命中了。 elif
就像嵌套的else: ... if:
我们可以通过将其更改为具有副作用的函数来稍微修改您的原始示例,以确保永远不会评估该条件:
def bool_func_with_side_effect(x):
print("INSIDE FUNC! x:", x)
return x<-1
x = -1
if x == -1:
print("inside if #1")
y=-2
if y < x:
print("inside if #2")
x=y
elif bool_func_with_side_effect(x):
print("inside elif")
输出(毫不奇怪):
inside if #1
inside if #2
答案 1 :(得分:0)
否,一旦与elif
部分中的条件匹配,就不会在if
部分中检查该值。
这是控制流程。如果条件在第一个if
中不匹配,则它将检查elif
中的条件。这些条件中的任何一个为真并且程序进入该块时,将不检查其余条件。
但是,如果您也想检查条件elif
,则必须使用另一个if
语句。
答案 2 :(得分:0)
不会检查elif条件。一旦if条件被评估为true,就会跳过elif条件。
答案 3 :(得分:0)
仅当'if'条件返回false时,Python才会检查'elif'或'else'条件。如果第一个条件(“ if”条件)返回true,它将忽略其他条件。