1. Чем является условие if start: # Что этов приведенном ниже коде?
if variable: по-умолчанию заменяет примерно такую конструкцию:if (
variable is not None # ни ничего
and variable is not False # ни ложь
and variable != 0 # ни ноль
and variable != '' # ни пустая строка
and variable != [] # ни пустой список
and variable != {} # ни пустой словарь
and variable != tuple() # ни пустой кортеж
and variable != set() # ни пустое множество
):if variable: эквивалентны False. В качестве наглядного примера, if my_list: для проверки на пустой список [] писать гораздо удобнее, чем if len(my_list) != 0:.if start: исключает срабатывание вложенного кода, как при пустой строке '', так и при None.2. Соответственно что передается при вводе пустого Enter?
'', что затем "присваивается" переменной start. И так как условием выполнения цикла while является start != '', то в данном коде ввод пустой строки является способом выхода из цикла.3. Чем является пустая строка, ведь она ни False, ни True, ни None
'' имеет тип str. Однако, см. выше про falsy значения.if start: покрывает и проверку if start != '':, и ряд других проверок, описанных в пункте 1.
Но почему я не могу написать метод from_string так:cls вместо явного Date позволит наследнику Date (напр. AztecaDate - дата по календарю ацтеков) порождать именно AztecaDate.
Date(1, 1, 2019) # конструктор с сигнатурой (int, int, int)
Date("1.1.2019") # другой конструктор с сигнатурой (str)В питоне можно добиться подобного, но ручками, анализируя состав аргументов Date.__init__, что неудобно, громоздко и нунафиг. Уж лучше забабахать Date.from_string. Но это неизбежно в динамическом языке - ведь C++ должен знать всё про аргументы конкретных вызовов конструкторов на этапе компиляции, а мы можем в рантайм творить что угодно )))для чего нужен staticmethod, если это уже не метод, а просто функция, и я могу вынести ее из класса.Да, можете. Я думаю, тут действует логика лучшей читаемости и логика экономии пространства имён:
from date import * вы не получите охапку непонятных имён.# медленно
l = []
for i in range(100500):
l.append(i)
# чуть быстрее )))
push = l.append
for i in range(100500):
push(i) str(blink[1][1])blink=(['fire', 'wood'], [1, 3, 777])
nums = [5,6,10]
blink[0].extend(['water', 'stone'])
blink[1].extend(nums)
print(blink)
blink[1][1] = str(blink[1][1]) # присваиваем элементу blink[1][1] строку
print(blink) abstract class GlobalClass {
...
protected function isExists($value, $field) {
return $this->db->isExists($this->table_name, $field, $value);
}
}
...
class User extends GlobalClass {
...
public function isExists($value, $field=null) {
$field = 'login';
return parent::isExists($value, $field);
}
}следующей ошибкой будет Maximum function nesting level. Используйте parent.public function isExists($login) { return $this->isExists("login", $login); }
Сессия это хеш который хранится в куках у пользователя, при обращение пользователя к скрипту, пхп сверяет хеш и берет из файла данные этой сессии.
session_regenerate_id(); совсем не нужно.session_start();
$ip = $_SESSION['userIP'];
if (!$ip) {
$_SESSION['userIP'] = $_SERVER['REMOTE_ADDR'];
} elseif ($ip != $_SERVER['REMOTE_ADDR']) {
session_destroy();
session_start();
}