def flatten(alist):
if alist == []:
return []
elif type(alist) is not list:
return [alist]
else:
return flatten(alist[0]) + flatten(alist[1:])
да, это два nots.
!!a
является 1
, если a
отличен от нуля, а 0
, если a
- 0
Вы можете думать о !!
как зажим как бы {0,1}
. Я лично считаю, что использование плохая попытка казаться фантазией.
!!
является более переносной (pre-C99) альтернативой (_Bool)
.
Вы можете представить это так:
!(!(a))
Если вы делаете это шаг за шагом, это имеет смысл
result = !42; //Result = 0
result = !(!42) //Result = 1 because !0 = 1
. Это вернет 1
с любым номером (-42, 4.2f и т. Д.), Но только с 0
, это произойдет
result = !0; //Result = 1
result = !(!0) //result = 0
Ты прав. Это две ноты. Чтобы узнать, почему это можно сделать, попробуйте этот код:
#include <stdio.h>
int foo(const int a)
{
return !!a;
}
int main()
{
const int b = foo(7);
printf(
"The boolean value is %d, "
"where 1 means true and 0 means false.\n",
b
);
return 0;
}
Он выдает The boolean value is 1, where 1 means true and 0 means false.
Если вы уроните !!
, он выдает The boolean value is 7, where 1 means true and 0 means false.