PHP функция для отображения различных изображений в зависимости от дня месяца и часа дня

Python - это собранный мусором язык. Если значение больше не «доступно» из вашего кода, оно в конечном итоге будет удалено.

Оператор del, как вы видели, удаляет привязку вашей переменной. Переменные - это не значения, они просто имена для значений.

Если эта переменная была единственной ссылкой на значение в любом месте, значение в конечном итоге будет удалено. В частности, в CPython сборщик мусора построен поверх подсчета ссылок. Таким образом, «в конечном итоге» означает «немедленно». * В других реализациях это обычно «довольно скоро».

Если бы были другие ссылки на одно и то же значение, то просто удалить одну из этих ссылок (независимо del x, x = None, выходя из области, где x существует и т. д.) ничего не очищает. **


Здесь есть еще одна проблема. Я не знаю, что на самом деле измеряет модуль memory_profiler (предположительно этот ), но описание (говорящее об использовании psutil) звучит так, будто оно измеряет использование вашей памяти «снаружи».

Когда Python освобождает хранилище, он не всегда или даже обычно возвращает его в операционную систему. Он хранит «бесплатные списки» на нескольких уровнях, поэтому он может быстрее использовать память быстрее, чем если бы ей пришлось вернуться к ОС, чтобы попросить больше. В современных системах это редко бывает проблемой - если вам нужна память снова, хорошо, что у вас это было; если вы этого не сделаете, он будет выгружен, как только кому-то это понадобится, и его никогда не вернуть, поэтому есть немного вреда.

(Кроме того, который я называл " OS "выше - это действительно абстракция, состоящая из нескольких уровней, из библиотеки malloc через основную библиотеку C в ядро ​​/ пейджер, и по крайней мере один из этих уровней обычно имеет свои собственные бесплатные списки.)

Если вы хотите отслеживать использование памяти с внутренней точки зрения ... ну, это довольно сложно. В Python 3.4 стало намного проще благодаря новому модулю tracemalloc . Существуют различные сторонние модули (например, heapy / guppy , Pympler , meliae ), которые пытаются получить такую ​​же информацию с более ранними версиями, но это сложно, потому что получение информации от разных распределителей и привязка этой информации к сборщику мусора было очень трудным до PEP 445

.

* В некоторых случаях являются ссылками на значение ... но только из других ссылок, которые сами недостижимы, возможно, в цикле. Это все еще считается «недостижимым» в отношении сборщика мусора, но не касается количества ссылок. Таким образом, у CPython также есть «детектор циклов», который работает так часто и находит циклы достижимых друг друга, но не достижимых значений, и очищает их.

** Если вы " повторное тестирование в интерактивной консоли, могут быть скрытые ссылки на ваши значения, которые трудно отслеживать, поэтому вы можете думать, что вы избавились от последней ссылки, когда вы этого не сделали. В сценарии всегда должно быть возможно , если не easy , чтобы понять, что происходит. Модуль gc может помочь, как и отладчик. Но, конечно, оба из них также дают вам новые способы добавления дополнительных скрытых ссылок.

0
задан Ashley Stewart 21 February 2019 в 03:40
поделиться

3 ответа

Вам не нужно применять дневное условие, так как ваше изображение не меняет базис в день. Это меняется во времени. Таким образом, вы можете использовать что-то вроде ниже:

$h = date('H'); // it will return hour in 24 format.


if ($h >= 4 && $h < 12) $img = 'img/s1.jpg'; //if it's between 4am and 12pm show day strength 1 image
    else if ( ($h >= 12 && $h <= 23) || ($h >= 1 && $h <= 2)  ) $img = 'img/c1.jpg'; //it's between 12pm and 2am show evening condition 1 image
    else if ($h >= 2 && $h < 4) $img = 'img/rest.jpg'; //if it's between 2am and 4am show rest image

Вы можете вносить изменения в свои арифметические операторы в соответствии с вашими требованиями. И если ваше изображение меняется в зависимости от дня, вы можете просто добавить дату в переменную вашего изображения, как показано ниже:

$h = date('H'); // it will return hour in 24 format.
$d = date('d');     
    if ($h >= 4 && $h < 12) $img = 'img/s'.$d.'.jpg'; 
    else if ( ($h >= 12 && $h <= 23) || ($h >= 1 && $h <= 2)  ) $img = 'img/c'.$d.'.jpg'; 
    else if ($h >= 2 && $h < 4) $img = 'img/rest.jpg'; 

Надеюсь, это поможет вам.

0
ответ дан Rohit Mittal 21 February 2019 в 03:40
поделиться

Попробуйте,

$h = date('G'); //set variable $h to the hour of the day
//G is the date key for hours in 24 format (not 12), with no leading 0s, like 02.
$d = date('d'); //set variable $d to the day of the month.
$DynamicDay = '21';
if ($DynamicDay == $d) {
    switch ($h) {
        case ($h >= 4 && $h < 12):
            $img = 'img/s' . $d . '.jpg';
            break;
        case ($h >= 12 && $h < 14):
            $img = 'img/c1.jpg';
            break;
        case ($h >= 14 && $h < 18):
            $img = 'img/rest.jpg';
            break;
        default:
            break;
    }
}
echo 'Hour => '.$h.'<p>';
echo 'day => '.$d.'<p>';
echo $img;
die;

Out Put:

Hour => 10

day => 21

img/s21.jpg
0
ответ дан M.Hemant 21 February 2019 в 03:40
поделиться

Вместо нескольких if / else вы можете поместить все правило в массив для простоты поддержки.

$array = [
    1 => [
        4 => 'img/s1.jpg',
        12 => 'img/s12.jpg',
        14 => 'img/s14.jpg',
    ],
    2 => [
        2 => 'img/c2.jpg'
    ]
];
function getDayDateImage($array, $d, $h)
{
    while (!$array[$d][$h]) {
        $h--;
        if ($h < 0) {
            $h = 23;
            $d--;
        }
        if ($d < 1) {
            return 'img/rest.jpg'; // Default
        }
    }
    return $array[$d][$h];
}

echo getDayDateImage($array, 1, 1); // Get img/rest.jpg
echo getDayDateImage($array, 1, 13); // Get img/s12.jpg
echo getDayDateImage($array, 2, 1); // Get img/s14.jpg
echo getDayDateImage($array, 2, 4); // Get img/c2.jpg
//Just pass you $d and $h 
//getDayDateImage($array, $d, $h);

Надеюсь, что это поможет.

0
ответ дан Muhammad Azizol Aminuddin 21 February 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: