Вы могли попробовать что-то вроде этого:
# Create something that accepts anything
class Fake(object):
def __getattr__(self, key):
return self
def __call__(self, *args, **kwargs):
return True
# Replace the logging module
import sys
sys.modules["logging"] = Fake()
Это по существу заменяет (или первоначально заполняет), пространство для регистрирующегося модуля с экземпляром Fake
, который просто берет в чем-либо. Необходимо выполнить вышеупомянутый код (только однажды!), прежде чем регистрирующийся модуль предпринят, чтобы использоваться где угодно. Вот тест:
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/temp/myapp.log',
filemode='w')
logging.debug('A debug message')
logging.info('Some information')
logging.warning('A shot across the bows')
С вышеупомянутым, ничто вообще не было зарегистрировано, как должен был ожидаться.
Эта формула проверяет, является ли число степенью 2 (если ваше условие в том виде, в каком оно написано, истинно, то число не a степень двойки).
Другими словами, ваш тест проверяет, установлено ли более одного бита «1» в двоичном представлении $ n
. Если установлен ноль или только один бит, то ваш тест будет ложным.
Это, безусловно, наиболее эффективный способ определить это свойство.
Во-первых, этот код является допустимым PHP, поэтому ваш заголовок плохой.
Во-вторых, происходящая двоичная арифметика выглядит примерно так:
42 = 101010
&
41 = 101001
-----------
40 = 101000
Как и утверждает Грег, это самый быстрый способ чтобы проверить, является ли число степенью 2, но введенный вами код проверяет, является ли число , а не степенью 2 . В этом легко убедиться с помощью политики PHP: любое ненулевое / ненулевое значение является истинным.