Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2017 10:05:22

nntr
Зарегистрирован: 2016-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

Когда я ввожу переменные

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)

Офлайн

#2 Янв. 6, 2017 10:12:50

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

>>> type(())
<class 'tuple'>
>>> type([])
<class 'list'>
>>> type({})
<class 'dict'>
>>> type({1,2})
<class 'set'>
>>> type((0))
<class 'int'>
>>>

Офлайн

#3 Янв. 6, 2017 10:16:02

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

>>> type((0,))
<class 'tuple'>
>>>
-контрольный

Офлайн

#4 Янв. 6, 2017 11:41:20

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

 a = foo()
- так в питоне функции вызываются!
Ошибка вам говорит о том что такой функции у вас нигде не описано!
В данном случае

 def foo():
    pass
a = foo()
Было бы правильно!
Но если вы хотите присвоить переменной кортеж или список - достаточно писать
 a = ()
a = []



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Янв. 6, 2017 19:07:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

А какой смысл в пустом кортеже?



Офлайн

#6 Янв. 6, 2017 23:09:23

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

Если я правильно понял вопрос, то пустой кортеж может быть накопительный буфером для других переменных типа кортеж, чтобы не проводить преобразования…

 #
buffer = ()
for i in ((1, 2), (3, 4)):
    buffer += i
print(buffer)

Отредактировано 4kpt_IV (Янв. 6, 2017 23:10:04)

Офлайн

#7 Янв. 7, 2017 04:11:36

nntr
Зарегистрирован: 2016-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

Вообще, я Python изучаю по данному курсу: https://stepik.org/course/Программирование-на-Python-67

На 7 минуте (в разделе переменные) лектор приводит динамическую типизацию переменных.

Про динамическую типизацию ясно. Однако в данном случае произошла ошибка с примером: пример должен был показать динамический тип переменной а. Что делать?

Отредактировано nntr (Янв. 7, 2017 07:50:15)

Офлайн

#8 Янв. 7, 2017 09:56:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

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



Офлайн

#9 Янв. 7, 2017 09:57:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

nntr
Что делать?
Повторюсь в сороковой раз: закрыть ютюб, открыть книжку. Лектора послать к черту.



Офлайн

#10 Янв. 7, 2017 11:11:50

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Python. Переменные. Тип переменных

FishHook
А буфер этот нужен в таком экзотическом случае, когда некая функция проверяет тип аргумента и принимает только кортеж?

Я же не говорил, что он нужен всегда. Ну и преобразование это лишняя операция все же. Никакой ценности для выполнения бизнес требования она не несет Просто иногда нужен все же пустой кортеж. Редко, но нужен.

FishHook
Повторюсь в сороковой раз: закрыть ютюб, открыть книжку. Лектора послать к черту.

Поддерживаю.

Отредактировано 4kpt_IV (Янв. 7, 2017 11:12:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version