import ast
str_number = '58'
print(ast.literal_eval(str_number))
# output: 58 - <type 'int'>
str_dict = '{"name": "vasya", "age": 30}'
print(type(ast.literal_eval(str_dict)))
# output: {"name": "vasya", "age": 30} - <type 'dict'>
try:
if {
'+': lambda o, t, h: o + t == h,
'-': lambda o, t, h: o - t == h,
'*': lambda o, t, h: o * t == h,
'/': lambda o, t, h: o / t == h,
}.get(j)(o, t, h):
print('YES')
else:
print('NO')
except KeyError:
print('Неизвестная функция')
except ZeroDivisionError:
print('Деление на ноль')
def get_val(data, query):
main_key, index, sub_key = query.split('.')
if index == '*':
return [item[sub_key] for item in data[main_key]]
else:
return data[main_key][int(index)][sub_key]
data = {
"some_list": [
{"key1": "some_value1", "key2": "some_value2" },
{"key1": "some_value1", "key2": "some_value2" },
{"key1": "some_value1", "key2": "some_value2" },
{"key1": "some_value1", "key2": "some_value2" },
]
}
print(get_val(data, 'some_list.*.key1'))
print(get_val(data, 'some_list.0.key1'))
Как известно, имена, которым выполняется присваивание внутри функции, по умолчанию рассматриваются как локальные – они располагаются в области видимости функции и существуют только во время работы функции. Но я еще не говорил, что локальные переменные определяются статически, во время компиляции программного кода в инструкции def, а не в соответствии с операциями присваивания, производимыми во время выполнения. Эта особенность становится причиной появления самых причудливых сообщений в группе новостей, получаемых от начинающих программистов. Обычно, если внутри функции имени не присваивается какое-либо значение, поиск его будет производиться в области видимости объемлющего модуля. Но посмотрите, что произойдет, если добавить инструкцию присваивания переменной X после ее использования.X = 99 >>> def selector(): ... print(X) # Переменная еще не существует! ... X = 88 # X классифицируется как локальная переменная ... # То же самое происходит при “import X”, “def X”... >>> selector() Traceback (most recent call last): ...текст сообщения об ошибке опущен... UnboundLocalError: local variable ‘X’ referenced before assignment
Было получено сообщение о том, что переменная не определена, но причина его появления не очевидна. Этот программный код компилируется интерпретатором во время ввода в интерактивной оболочке или во время импорта модуля. Вовремя компиляции Python обнаруживает операцию присваивания переменной X и делает вывод, что X – это локальное имя везде в теле функции. Но во время выполнения функции, из-за того, что к моменту вызова инструкции print операция присваивания еще не производилась, интерпретатор сообщает о том, что имя не определено. Согласно этому правилу использования имен, он говорит, что обращение к локальной переменной X произведено до того, как ей было присвоено значение. Фактически любая операция присваивания внутри функции создает локальное имя. Операция импортирования, =, вложенные инструкции def, вложенные определения классов и так далее – все трактуются именно таким образом. Проблема возникает из-за того, что операция присваивания делает имена локальными для всей функции, а не только для той ее части, которая следует за инструкцией присваивания.
execute
и commit
, это при том что функций у тебя толком то и нет. А дальше что? Сотню раз по всему коду будешь повторять одни и те же строки? Почитай про DRY. Простейший пример:class sql_wrapper:
def __init__(self):
self.connection = sqlite3.connect('foo.db')
self.cursor = self.connection.cursor()
def select(self, sql):
return self.cursor.execute(sql)
def execute(self, sql):
self.cursor.execute(sql)
self.connection.commit()
def close(self):
self.connection.close()
sw = sql_wrapper()
rows = sw.select('SELECT * FROM some_table')
for row in rows:
print(row)
sw.close()
if-else
очень плохо читается и слишком разрастается, лучше каждое действие записывать отдельной функцией, а вызов совершать хотя бы так:def foo():
print('print foo')
def bar():
print('print bar')
commands = {
'foo': foo, 'bar': bar
}
user_input = input().lower()
if commands.get(user_input, None) is not None:
commands[user_input]()
;
Что за слово word? точно так же и конструкция " i+=" Я понимаю, как это работает на практике, но что это, я не могу понять. Или какие есть еще специальные слова на подобие "word" и где их смотреть
Хочу начать изучать программирование, чтобы создать программу-помощника, для всех платформ.