Дмитрий Мусин - Самоучитель Python. Выпуск 0.2
Название: | Самоучитель Python. Выпуск 0.2 | |
Автор: | Дмитрий Мусин | |
Жанр: | Python | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | 2016 | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Самоучитель Python. Выпуск 0.2"
Аннотация к этой книге отсутствует.
Читаем онлайн "Самоучитель Python. Выпуск 0.2". [Страница - 34]
sio.write("there!")
6
>>> sio.getvalue()
'Hello, there!'
>>> import array
>>> a = array.array('u', s)
>>> print(a)
array('u', 'Hello, world')
>>> a[0] = 'y'
>>> print(a)
array('u', 'yello, world')
32.16. Почему -22 // 10 равно -3?
134
Самоучитель Python, Выпуск 0.2
>>> a.tounicode()
'yello, world'
32.18 Как использовать строки для вызова функций/методов?
Существует несколько приёмов.
• Лучший - использование словаря, ставящего соответствие строке функцию. Его главное достоинство - строки не обязаны совпадать с названиями функций.
def a():
pass
def b():
pass
dispatch = {'go': a, 'stop': b}
# Note lack of parens for funcs
dispatch[get_input()]()
• Использование встроенной функции getattr:
import foo
getattr(foo, 'bar')()
• Использование locals или eval (не рекомендуется)
def myFunc():
print("hello")
fname = "myFunc"
f = locals()[fname]
f()
f = eval(fname)
f()
32.19 Как удалить все символы новой строки в конце строки?
Можно использовать S.rstrip("\r\n") для удаления символов новой строки, без удаления конечных пробелов:
>>> lines = ("line 1 \r\n"
...
"\r\n"
...
"\r\n")
32.18. Как использовать строки для вызова функций/методов?
135
Самоучитель Python, Выпуск 0.2
>>> lines.rstrip("\r\n")
'line 1 '
32.20 Как удалить повторяющиеся элементы в списке?
Существует несколько путей: http://code.activestate.com/recipes/52560/
32.21 Как создать многомерный список?
Возможно, вы попробуете этот неудачный вариант:
>>> A = [[None] * 2] * 3
Это выглядит правильно, если напечатать:
>>> A
[[None, None], [None, None], [None, None]]
Но если вы присвоите значение, то оно появится в нескольких местах:
>>> A[0][0] = 5
>>> A
[[5, None], [5, None], [5, None]]
Причина в том, что оператор * не создаёт копию, а только ссылку на существующий
объект. *3 создаёт список из 3 ссылок на один и тот же список. Изменение в одной строке
изменяют другие, что, вероятно, не то, что вы хотите.
Возможные пути решения:
A = [None] * 3
for i in range(3):
A[i] = [None] * 2
w, h = 2, 3
A = [[None] * w for i in range(h)]
Или, можно использовать специальные модули, предоставляющие матрицы. Наиболее
известным является NumPy.
32.20. Как удалить повторяющиеся элементы в списке?
136
Самоучитель Python, Выпуск 0.2
32.22 Почему a_tuple[i] += [’item’] не работает, а добавление работает?
Это из-за того, что расширенный оператор присваивания - оператор присваивания, а также из-за разницы между изменяемыми и неизменяемыми объектами в Python.
Это обсуждение относится в общем, когда расширенные операторы присваивания применяются к элементам кортежа, которые указывают на изменяемые объекты, но мы будем
использовать список и += , как образец.
Если вы напишете:
>>> a_tuple = (1, 2)
>>> a_tuple[0] += 1
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
Причина исключения должна быть понятна: 1 добавляется к объекту a_tuple[0] , но
когда мы пытаемся присвоить результат, 2 , к первому элементу в кортеже, мы получаем
ошибку, поскольку мы не можем изменить элемент кортежа.
То есть, это выражение делает следующее:
>>> result = a_tuple[0] + 1
>>> a_tuple[0] = result
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
Когда мы пишем что-то вроде:
>>> a_tuple = (['foo'], 'bar')
>>> a_tuple[0] += ['item']
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
Исключение немного более неожиданное, но более удивителен тот факт, что, несмотря
на ошибку, элемент добавился!
>>> a_tuple[0]
['foo', 'item']
Чтобы понять, что случилось, нужно знать, что:
• Если объект определяет метод __iadd__ , он вызывается, когда выполняется += , и
возвращенное значение используется для присваивания
• Для списков, __iadd__ эквивалентен вызову extend для списка
Таким образом,
32.22. Почему a_tuple[i] += [’item’] не работает, а добавление работает?
137
Самоучитель Python, Выпуск 0.2
>>> a_list = []
>>> a_list += [1]
>>> a_list
[1]
Эквивалентен:
>>> result = a_list.__iadd__([1])
>>> a_list = result
Таким образом, наш пример с кортежом эквивалентен:
>>> result = a_tuple[0].__iadd__(['item'])
>>> a_tuple[0] = result
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
__iadd__ завершился успешно, и список увеличился, но присваивание законилось
ошибкой.
32.22. Почему a_tuple[i] += [’item’] не работает, а добавление работает?
138
--">
6
>>> sio.getvalue()
'Hello, there!'
>>> import array
>>> a = array.array('u', s)
>>> print(a)
array('u', 'Hello, world')
>>> a[0] = 'y'
>>> print(a)
array('u', 'yello, world')
32.16. Почему -22 // 10 равно -3?
134
Самоучитель Python, Выпуск 0.2
>>> a.tounicode()
'yello, world'
32.18 Как использовать строки для вызова функций/методов?
Существует несколько приёмов.
• Лучший - использование словаря, ставящего соответствие строке функцию. Его главное достоинство - строки не обязаны совпадать с названиями функций.
def a():
pass
def b():
pass
dispatch = {'go': a, 'stop': b}
# Note lack of parens for funcs
dispatch[get_input()]()
• Использование встроенной функции getattr:
import foo
getattr(foo, 'bar')()
• Использование locals или eval (не рекомендуется)
def myFunc():
print("hello")
fname = "myFunc"
f = locals()[fname]
f()
f = eval(fname)
f()
32.19 Как удалить все символы новой строки в конце строки?
Можно использовать S.rstrip("\r\n") для удаления символов новой строки, без удаления конечных пробелов:
>>> lines = ("line 1 \r\n"
...
"\r\n"
...
"\r\n")
32.18. Как использовать строки для вызова функций/методов?
135
Самоучитель Python, Выпуск 0.2
>>> lines.rstrip("\r\n")
'line 1 '
32.20 Как удалить повторяющиеся элементы в списке?
Существует несколько путей: http://code.activestate.com/recipes/52560/
32.21 Как создать многомерный список?
Возможно, вы попробуете этот неудачный вариант:
>>> A = [[None] * 2] * 3
Это выглядит правильно, если напечатать:
>>> A
[[None, None], [None, None], [None, None]]
Но если вы присвоите значение, то оно появится в нескольких местах:
>>> A[0][0] = 5
>>> A
[[5, None], [5, None], [5, None]]
Причина в том, что оператор * не создаёт копию, а только ссылку на существующий
объект. *3 создаёт список из 3 ссылок на один и тот же список. Изменение в одной строке
изменяют другие, что, вероятно, не то, что вы хотите.
Возможные пути решения:
A = [None] * 3
for i in range(3):
A[i] = [None] * 2
w, h = 2, 3
A = [[None] * w for i in range(h)]
Или, можно использовать специальные модули, предоставляющие матрицы. Наиболее
известным является NumPy.
32.20. Как удалить повторяющиеся элементы в списке?
136
Самоучитель Python, Выпуск 0.2
32.22 Почему a_tuple[i] += [’item’] не работает, а добавление работает?
Это из-за того, что расширенный оператор присваивания - оператор присваивания, а также из-за разницы между изменяемыми и неизменяемыми объектами в Python.
Это обсуждение относится в общем, когда расширенные операторы присваивания применяются к элементам кортежа, которые указывают на изменяемые объекты, но мы будем
использовать список и += , как образец.
Если вы напишете:
>>> a_tuple = (1, 2)
>>> a_tuple[0] += 1
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
Причина исключения должна быть понятна: 1 добавляется к объекту a_tuple[0] , но
когда мы пытаемся присвоить результат, 2 , к первому элементу в кортеже, мы получаем
ошибку, поскольку мы не можем изменить элемент кортежа.
То есть, это выражение делает следующее:
>>> result = a_tuple[0] + 1
>>> a_tuple[0] = result
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
Когда мы пишем что-то вроде:
>>> a_tuple = (['foo'], 'bar')
>>> a_tuple[0] += ['item']
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
Исключение немного более неожиданное, но более удивителен тот факт, что, несмотря
на ошибку, элемент добавился!
>>> a_tuple[0]
['foo', 'item']
Чтобы понять, что случилось, нужно знать, что:
• Если объект определяет метод __iadd__ , он вызывается, когда выполняется += , и
возвращенное значение используется для присваивания
• Для списков, __iadd__ эквивалентен вызову extend для списка
Таким образом,
32.22. Почему a_tuple[i] += [’item’] не работает, а добавление работает?
137
Самоучитель Python, Выпуск 0.2
>>> a_list = []
>>> a_list += [1]
>>> a_list
[1]
Эквивалентен:
>>> result = a_list.__iadd__([1])
>>> a_list = result
Таким образом, наш пример с кортежом эквивалентен:
>>> result = a_tuple[0].__iadd__(['item'])
>>> a_tuple[0] = result
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment
__iadd__ завершился успешно, и список увеличился, но присваивание законилось
ошибкой.
32.22. Почему a_tuple[i] += [’item’] не работает, а добавление работает?
138
--">
Книги схожие с «Самоучитель Python. Выпуск 0.2» по жанру, серии, автору или названию:
Освальдо Мартин - Байесовский анализ на Python Жанр: Python Год издания: 2020 |