Это появляется из статьи MSDN, которую Вы связали с ним, был обеспечен для обеспечения nullable булевых типов до Nullable (т.е. интервал?, bool?, и т.д.) тип, являющийся introducted на язык в C#2. Таким образом Вы сохранили бы внутреннее значение, указывающее, является ли значение TRUE или FALSE или пустым указателем, т.е. в Вашем примере> 0 для истинного, < 0 для лжи и == 0 для пустого указателя, и затем Вы получили бы семантику пустого указателя стиля SQL. Необходимо было бы также реализовать.IsNull метод или свойство, чтобы ничтожность могла быть проверена явно.
По сравнению с SQL, вообразите таблицу Table с 3 строками со значением набором Foo к истинному, 3 строкам со значением набор Foo ко лжи и 3 строкам со значением Foo установленный в NULL.
SELECT COUNT(*) FROM Table WHERE Foo = TRUE OR Foo = FALSE
6
для подсчета всех строк, необходимо было бы сделать following:-
SELECT COUNT(*) FROM Table WHERE Foo = TRUE OR Foo = FALSE OR Foo IS NULL
9
, Это 'ЯВЛЯЕТСЯ ПУСТЫМ' синтаксисом, имел бы код equivilent в классе как.IsNull ().
LINQ делает сравнение с C# даже clearer:-
int totalCount = (from s in MyTypeEnumerable
where s || !s
select s).Count();
, Предполагая, что MyTypeEnumberable имеет точно то же содержание базы данных, т.е. 3 значения, равные истинному, 3 значения, равные лжи и 3 значениям, равным пустому указателю. В этом случае totalCount оценил бы к 6 в этом случае. Однако, если бы мы переписали as:-
int totalCount = (from s in MyTypeEnumerable
where s || !s || s.IsNull()
select s).Count();
кода Тогда totalCount, то оценил бы к 9.
пример DBNull, данный в связанной статье MSDN о ложном операторе, демонстрирует класс в BCL, который имеет это точное поведение.
В действительности заключение - Вы, не должен использовать это, если Вы не абсолютно уверены, что хотите этот тип поведения, лучше просто использовать намного более простой nullable синтаксис!!
Обновление: я просто заметил, что необходимо вручную переопределить логические операторы!, || и & & сделать эту работу правильно. Я верю ложной подаче оператора в эти логические операторы, т.е. указанию на истину, ошибочность или 'иначе'. Как отмечено в другом комментарии! x не отделается от летучей мыши; необходимо перегрузиться!. Странность!
Да, Subprocess.call
возвращает «фактический код возврата процесса».
Вы можете проверить официальную документацию Subprocess.call и Subprocess.Popen.returncode
Это код возврата, но имейте в виду что означает код возврата, зависит от автора подпроцесса. Существует сильная культура «0», означающая успех, но ее ничто не поддерживает.
Вы находитесь во власти команд, которые вы вызываете. Рассмотрим это:
test.py
#!/usr/bin/env python
success=False
if not success:
exit()
Затем запуск вашего кода (с cmd = 'test.py') приведет к УСПЕХ !!
просто потому, что test.py не соответствует соглашению о возврате ненулевого значения в случае неудачи.