Форум сайта python.su
Когда я ввожу переменные
a = 2
a = ‘abacaba’
a = foo ()
то после 3 переменной выскакивает сообщение об ошибке
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
NameError: name ‘foo’ is not defined
А если вводить просто скобку (без foo), то тип будет следующий:
(class ‘tuple’) - кортеж
Хотя, по идее type вообще не должен был всплывать - что указывало бы на динамическую типизацию (отличие Python от других языков).
Отредактировано nntr (Янв. 6, 2017 10:06:11)
Офлайн
>>> type(())
<class 'tuple'>
>>> type([])
<class 'list'>
>>> type({})
<class 'dict'>
>>> type({1,2})
<class 'set'>
>>> type((0))
<class 'int'>
>>>
Офлайн
>>> type((0,))
<class 'tuple'>
>>>
Офлайн
a = foo()
def foo(): pass a = foo()
a = () a = []
Офлайн
А какой смысл в пустом кортеже?
Офлайн
Если я правильно понял вопрос, то пустой кортеж может быть накопительный буфером для других переменных типа кортеж, чтобы не проводить преобразования…
# buffer = () for i in ((1, 2), (3, 4)): buffer += i print(buffer)
Отредактировано 4kpt_IV (Янв. 6, 2017 23:10:04)
Офлайн
Вообще, я Python изучаю по данному курсу: https://stepik.org/course/Программирование-на-Python-67
На 7 минуте (в разделе переменные) лектор приводит динамическую типизацию переменных.
Про динамическую типизацию ясно. Однако в данном случае произошла ошибка с примером: пример должен был показать динамический тип переменной а. Что делать?
Отредактировано nntr (Янв. 7, 2017 07:50:15)
Офлайн
4kpt_IV
А буфер этот нужен в таком экзотическом случае, когда некая функция проверяет тип аргумента и принимает только кортеж? Иначе, если в твоем коде заменить кортеж на список, ничего не теряется. Да и преобразование операция не тяжелая, и выполняется она один раз вместо создания N кортежей.
d = tuple([(1, 2) for _ in range(10000)]) def test1(): buffer = () for i in d: buffer += i def test2(): buffer = [] for i in d: buffer += i buffer = tuple(buffer) import timeit print(timeit.timeit("test1()", setup="from __main__ import test1", number=1)) print(timeit.timeit("test2()", setup="from __main__ import test2", number=1))
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/fish/PycharmProjects/test/test.py 0.265347957611 0.000710964202881
Офлайн
nntrПовторюсь в сороковой раз: закрыть ютюб, открыть книжку. Лектора послать к черту.
Что делать?
Офлайн
FishHook
А буфер этот нужен в таком экзотическом случае, когда некая функция проверяет тип аргумента и принимает только кортеж?
FishHook
Повторюсь в сороковой раз: закрыть ютюб, открыть книжку. Лектора послать к черту.
Отредактировано 4kpt_IV (Янв. 7, 2017 11:12:16)
Офлайн