Python типы переменных: Python. Урок 3. Типы и модель данных
Типы данных. Переменные. Урок 3
Данные и их типы
В реальной жизни мы совершаем различные действия над окружающими нас предметами, или объектами. Мы меняем их свойства, наделяем новыми функциями. По аналогии с этим компьютерные программы также манипулируют объектами, только виртуальными, цифровыми. Пока не дойдем до уровня объектно-ориентированного программирования, будем называть такие объекты данными.
Очевидно, данные бывают разными. Часто компьютерной программе приходится работать с числами и строками. Так на прошлом уроке мы работали с числами, выполняя над ними арифметические операции. Операция сложения выполняла изменение первого числа на величину второго, а умножение увеличивало одно число в количество раз, соответствующее второму.
Числа в свою очередь также бывают разными: целыми, вещественными, могут иметь огромное значение или очень длинную дробную часть.
При знакомстве с языком программирования Python мы столкнемся с тремя типами данных:
целые числа (тип int) – положительные и отрицательные целые числа, а также 0 (например, 4, 687, -45, 0).
числа с плавающей точкой (тип float) – дробные, они же вещественные, числа (например, 1.45, -3.789654, 0.00453). Примечание: для разделения целой и дробной частей здесь используется точка, а не запятая.
строки (тип str) — набор символов, заключенных в кавычки (например, «ball», «What is your name?», ‘dkfjUUv’, ‘6589’). Примечание: кавычки в Python могут быть одинарными или двойными; одиночный символ в кавычках также является строкой, отдельного символьного типа в Питоне нет.
Операции в программировании
Операция – это выполнение каких-либо действий над данными, которые в данном случае именуют операндами. Само действие выполняет оператор – специальный инструмент. Если бы вы выполняли операцию постройки стола, то вашими операндами были бы доска и гвоздь, а оператором – молоток.
Так в математике и программировании символ плюса является оператором операции сложения по отношению к числам. В случае строк этот же оператор выполняет операцию конкатенации, т. е. соединения.
>>> 10.25 + 98.36 108.61 >>> 'Hello' + 'World' 'HelloWorld'
Здесь следует для себя отметить, что то, что делает оператор в операции, зависит не только от него, но и от типов данных, которыми он оперирует. Молоток в случае нападения на вас крокодила перестанет играть роль строительного инструмента. Однако в большинстве случаев операторы не универсальны. Например, знак плюса неприменим, если операндами являются, с одной стороны, число, а с другой – строка.
>>> 1 + 'a' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'
Здесь в строке TypeError: unsupported operand type(s) for +: 'int' and 'str'
интерпретатор сообщает, что произошла ошибка типа – неподдерживаемый операнд для типов int и str.
Изменение типов данных
Приведенную выше операцию все-таки можно выполнить, если превратить число 1 в строку «1». Для изменения одних типов данных в другие в языке Python предусмотрен ряд встроенных в него функций (что такое функция в принципе, вы узнаете в других уроках). Поскольку мы пока работаем только с тремя типами (int, float и str), то рассмотрим только соответствующие им функции: int(), float(), str().
>>> str(1) + 'a' '1a' >>> int('3') + 4 7 >>> float('3.2') + int('2') 5.2 >>> str(4) + str(1.2) '41.2'
Эти функции преобразуют то, что помещается в их скобки соответственно в целое число, вещественное число или строку. Однако надо понимать, что преобразовать можно не все:
>>> int('hi') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'hi'
Здесь возникла ошибка значения (ValueError), так как передан литерал (в данном случае строка с буквенными символами), который нельзя преобразовать к числу с основанием 10. Однако функция int() не такая простая:
>>> int('101', 2) 5 >>> int('F', 16) 15
Если вы знаете о различных системах счисления, то поймете, что здесь произошло.
Обратите внимание еще на одно. Данные могут называться значениями, а также литералами. Эти три понятия («данные», «значение», «литерал») не обозначают одно и то же, но близки и нередко употребляются как синонимы. Чтобы понять различие между ними, места их употребления, надо изучить программирование глубже.
Переменные
Данные хранятся в ячейках памяти компьютера. Когда мы вводим число, оно помещается в какую-то ячейку памяти. Но как потом узнать, куда именно? Как впоследствии обращаться к этим данными? Нужно как-то запомнить, пометить соответствующую ячейку.
Раньше, при написании программ на машинном языке, обращение к ячейкам памяти осуществляли с помощью указания их регистров, т. е. конкретно сообщали, куда положить данные и откуда их взять. Однако с появлением ассемблеров при обращении к данным стали использовать словесные переменные, что куда удобней для человека.
Механизм связи между переменными и данными может различаться в зависимости от языка программирования и типов данных. Пока достаточно запомнить, что в программе данные связываются с каким-либо именем и в дальнейшем обращение к ним возможно по этому имени-переменной.
Слово «переменная» обозначает, что сущность может меняться, она непостоянна. Действительно, вы увидите это в дальнейшем, одна и та же переменная может быть связана сначала с одними данными, а потом – с другими. То есть ее значение может меняться, она переменчива.
В программе на языке Python, как и на большинстве других языков, связь между данными и переменными устанавливается с помощью знака =. Такая операция называется присваивание (также говорят «присвоение»). Например, выражение sq = 4 означает, что на объект, представляющий собой число 4, находящееся в определенной области памяти, теперь ссылается переменная sq, и обращаться к этому объекту следует по имени sq.
Имена переменных могут быть любыми. Однако есть несколько общих правил их написания:
Желательно давать переменным осмысленные имена, говорящие о назначении данных, на которые они ссылаются.
Имя переменной не должно совпадать с командами языка (зарезервированными ключевыми словами).
Имя переменной должно начинаться с буквы или символа подчеркивания (_), но не с цифры.
Имя переменной не должно содержать пробелы.
Чтобы узнать значение, на которое ссылается переменная, находясь в режиме интерпретатора, достаточно ее вызвать, т. е. написать имя и нажать Enter.
>>> sq = 4 >>> sq 4
Вот более сложный пример работы с переменными в интерактивном режиме:
>>> apples = 100 >>> eat_day = 5 >>> day = 7 >>> apples = apples - eat_day * day >>> apples 65
Здесь фигурируют три переменные: apples, eat_day и day. Каждой из них присваивается свое значение. Выражение apples = apples - eat_day * day
сложное. Сначала выполняется подвыражение, стоящее справа от знака равенства. После этого его результат присваивается переменной apples, в результате чего ее старое значение (100) теряется. В подвыражении apples - eat_day * day
вместо имен переменных на самом деле используются их значения, т. е. числа 100, 5 и 7.
Практическая работа
Переменной var_int присвойте значение 10, var_float — значение 8.4, var_str — «No».
Значение, хранимое в переменной var_int, увеличьте в 3.5 раза. Полученный результат свяжите с переменной var_big.
Измените значение, хранимое в переменной var_float, уменьшив его на единицу, результат свяжите с той же переменной.
Разделите var_int на var_float, а затем var_big на var_float. Результат данных выражений не привязывайте ни к каким переменным.
Измените значение переменной var_str на «NoNoYesYesYes». При формировании нового значения используйте операции конкатенации (+) и повторения строки (*).
Выведите значения всех переменных.
Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса
Python — Типы переменных — CoderLessons.com
Переменные — это не что иное, как зарезервированные области памяти для хранения значений. Это означает, что когда вы создаете переменную, вы резервируете некоторое пространство в памяти.
На основе типа данных переменной интерпретатор выделяет память и решает, что можно сохранить в зарезервированной памяти. Поэтому, назначая переменным разные типы данных, вы можете хранить целые числа, десятичные числа или символы в этих переменных.
Присвоение значений переменным
Переменные Python не требуют явного объявления для резервирования места в памяти. Объявление происходит автоматически, когда вы присваиваете значение переменной. Знак равенства (=) используется для присвоения значений переменным.
Операнд слева от оператора = — это имя переменной, а операнд справа от оператора = — это значение, хранящееся в переменной. Например —
Live Demo
#!/usr/bin/python counter = 100 # An integer assignment miles = 1000. 0 # A floating point name = "John" # A string print counter print miles print name
Здесь 100, 1000.0 и «Джон» — это значения, присвоенные переменным счетчика , миль и имени соответственно. Это дает следующий результат —
100 1000.0 John
Множественное назначение
Python позволяет назначать одно значение нескольким переменным одновременно. Например —
a = b = c = 1
Здесь создается целочисленный объект со значением 1, и все три переменные назначаются одной и той же ячейке памяти. Вы также можете назначить несколько объектов для нескольких переменных. Например —
a,b,c = 1,2,"john"
Здесь два целочисленных объекта со значениями 1 и 2 назначены переменным a и b соответственно, а один строковый объект со значением «john» назначен переменной c.
Стандартные типы данных
Данные, хранящиеся в памяти, могут быть разных типов. Например, возраст человека сохраняется в виде числового значения, а его или ее адрес — в виде буквенно-цифровых символов. Python имеет различные стандартные типы данных, которые используются для определения возможных операций над ними и метода хранения для каждого из них.
Python имеет пять стандартных типов данных —
- чисел
- строка
- Список
- Кортеж
- толковый словарь
Номера Python
Числовые типы данных хранят числовые значения. Числовые объекты создаются при назначении им значения. Например —
var1 = 1 var2 = 10
Вы также можете удалить ссылку на числовой объект с помощью оператора del. Синтаксис оператора del —
del var1[,var2[,var3[....,varN]]]]
Вы можете удалить один объект или несколько объектов с помощью оператора del. Например —
del var del var_a, var_b
Python поддерживает четыре различных числовых типа —
- int (целые числа со знаком)
- long (длинные целые числа, они также могут быть представлены в восьмеричном и шестнадцатеричном виде)
- float (реальные значения с плавающей точкой)
- комплекс (комплексные числа)
Примеры
Вот несколько примеров чисел —
ИНТ | долго | поплавок | сложный |
---|---|---|---|
10 | 51924361L | 0. 0 | 3.14j |
100 | -0x19323L | 15,20 | 45.j |
-786 | 0122L | -21,9 | 9.322e-36j |
080 | 0xDEFABCECBDAECBFBAEl | 32,3 + e18 | .876j |
-0490 | 535633629843L | -90. | -.6545 + 0J |
-0x260 | -052318172735L | -32.54e100 | 3e + 26J |
0x69 | -4721885298529L | 70,2-E12 | 4.53e-7j |
Python позволяет использовать строчные буквы l с длинными, но рекомендуется использовать только заглавные буквы L, чтобы избежать путаницы с числом 1. Python отображает длинные целые числа с заглавными буквами L.
Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей точкой, обозначаемых x + yj, где x и y — действительные числа, а j — мнимая единица.
Python позволяет использовать строчные буквы l с длинными, но рекомендуется использовать только заглавные буквы L, чтобы избежать путаницы с числом 1. Python отображает длинные целые числа с заглавными буквами L.
Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей точкой, обозначаемых x + yj, где x и y — действительные числа, а j — мнимая единица.
Python Strings
Строки в Python идентифицируются как непрерывный набор символов, представленных в кавычках. Python допускает использование пар одинарных или двойных кавычек. Подмножества строк могут быть получены с использованием оператора среза ([] и [:]) с индексами, начинающимися с 0 в начале строки и проходящими их от -1 в конце.
Знак плюс (+) — это оператор объединения строк, а звездочка (*) — оператор повторения. Например —
Live Demo
#!/usr/bin/python str = 'Hello World!' print str # Prints complete string print str[0] # Prints first character of the string print str[2:5] # Prints characters starting from 3rd to 5th print str[2:] # Prints string starting from 3rd character print str * 2 # Prints string two times print str + "TEST" # Prints concatenated string
Это даст следующий результат —
Hello World! H llo llo World! Hello World!Hello World! Hello World!TEST
Списки Python
Списки являются наиболее универсальными из составных типов данных Python. Список содержит элементы, разделенные запятыми и заключенные в квадратные скобки ([]). В некоторой степени списки похожи на массивы в C. Одно из различий между ними состоит в том, что все элементы, принадлежащие списку, могут иметь разные типы данных.
Доступ к значениям, хранящимся в списке, можно получить с помощью оператора слайса ([] и [:]), индексы которого начинаются с 0 в начале списка и заканчиваются -1. Знак плюс (+) является оператором объединения списков, а звездочка (*) — оператором повторения. Например —
#!/usr/bin/python list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john'] print list # Prints complete list print list[0] # Prints first element of the list print list[1:3] # Prints elements starting from 2nd till 3rd print list[2:] # Prints elements starting from 3rd element print tinylist * 2 # Prints list two times print list + tinylist # Prints concatenated lists
Это дает следующий результат —
['abcd', 786, 2.23, 'john', 70.2] abcd [786, 2.23] [2.23, 'john', 70.2] [123, 'john', 123, 'john'] ['abcd', 786, 2.23, 'john', 70.2, 123, 'john']
Python Tuples
Кортеж — это другой тип данных последовательности, аналогичный списку. Кортеж состоит из нескольких значений, разделенных запятыми. В отличие от списков, однако, кортежи заключены в круглые скобки.
Основные различия между списками и кортежами: списки заключены в квадратные скобки ([]), их элементы и размер можно изменить, а кортежи заключить в скобки (()) и не могут быть обновлены. Кортежи можно рассматривать как списки только для чтения . Например —
Live Demo
#!/usr/bin/python tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ) tinytuple = (123, 'john') print tuple # Prints complete list print tuple[0] # Prints first element of the list print tuple[1:3] # Prints elements starting from 2nd till 3rd print tuple[2:] # Prints elements starting from 3rd element print tinytuple * 2 # Prints list two times print tuple + tinytuple # Prints concatenated lists
Это дает следующий результат —
('abcd', 786, 2. 23, 'john', 70.2) abcd (786, 2.23) (2.23, 'john', 70.2) (123, 'john', 123, 'john') ('abcd', 786, 2.23, 'john', 70.2, 123, 'john')
Следующий код недопустим с кортежем, потому что мы попытались обновить кортеж, что недопустимо. Подобный случай возможен со списками —
#!/usr/bin/python tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ) list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tuple[2] = 1000 # Invalid syntax with tuple list[2] = 1000 # Valid syntax with list
Словарь Python
Словари Python являются разновидностью хеш-таблиц. Они работают как ассоциативные массивы или хэши, найденные в Perl, и состоят из пар ключ-значение. Ключ словаря может быть практически любого типа Python, но обычно это числа или строки. Значения, с другой стороны, могут быть любым произвольным объектом Python.
Словари заключены в фигурные скобки ({}), а значения могут быть назначены и доступны с помощью квадратных скобок ([]). Например —
Live Demo
#!/usr/bin/python dict = {} dict['one'] = "This is one" dict[2] = "This is two" tinydict = {'name': 'john','code':6734, 'dept': 'sales'} print dict['one'] # Prints value for 'one' key print dict[2] # Prints value for 2 key print tinydict # Prints complete dictionary print tinydict.keys() # Prints all the keys print tinydict.values() # Prints all the values
Это дает следующий результат —
This is one This is two {'dept': 'sales', 'code': 6734, 'name': 'john'} ['dept', 'code', 'name'] ['sales', 6734, 'john']
Словари не имеют понятия порядка среди элементов. Неверно говорить, что элементы «вышли из строя»; они просто неупорядочены.
Преобразование типов данных
Иногда вам может потребоваться выполнить преобразования между встроенными типами. Для преобразования между типами вы просто используете имя типа в качестве функции.
Есть несколько встроенных функций для выполнения преобразования из одного типа данных в другой. Эти функции возвращают новый объект, представляющий преобразованное значение.
int (x [, base])
Преобразует х в целое число. base указывает базу, если x является строкой.
длинный (x [, base])
Преобразует x в длинное целое. base указывает базу, если x является строкой.
Поплавок (х)
Преобразует x в число с плавающей точкой.
сложный (настоящий [, imag])
Создает комплексное число.
ул (х)
Преобразует объект x в строковое представление.
магнезии (х)
Преобразует объект x в строку выражения.
Eval (ул)
Оценивает строку и возвращает объект.
набор (ы)
Преобразует s в кортеж.
(ена)
Преобразует s в список.
набор (ы)
Преобразует s в набор.
ДИКТ (д)
Создает словарь. d должен быть последовательностью (ключ, значение) кортежей.
frozenset (ы)
Преобразует s в замороженный набор.
CHR (х)
Преобразует целое число в символ.
unichr (х)
Преобразует целое число в символ Unicode.
Ord (х)
Преобразует один символ в его целочисленное значение.
гекс (х)
Преобразует целое число в шестнадцатеричную строку.
Октябрь (х)
Преобразует целое число в восьмеричную строку.
Как определить тип переменной Python? Ru Python
Как я могу увидеть тип переменной, является ли она неподписанной 32-разрядной, подписанной 16 бит и т. Д.?
Python не имеет те же типы, что и C / C ++, что, по-видимому, является вашим вопросом.
Попробуй это:
>>> i = 123 >>> type(i) <type 'int'> >>> type(i) is int True >>> i = 123456789L >>> type(i) <type 'long'> >>> type(i) is long True >>> i = 123. 456 >>> type(i) <type 'float'> >>> type(i) is float True
Однако различие между int и long уходит в Python 3.0.
Возможно, вы ищете функцию type()
.
См. Примеры ниже, но в Python нет типа «unsigned», как Java.
Положительное число:
>>> v = 10 >>> type(v) <type 'int'>
Большое положительное целое число:
>>> v = 100000000000000 >>> type(v) <type 'long'>
Отрицательное целое число:
>>> v = -10 >>> type(v) <type 'int'>
Буквальная последовательность символов:
>>> v = 'hi' >>> type(v) <type 'str'>
Это так просто. Вы делаете это так.
print(type(variable_name))
Итак, если у вас есть переменная, например:
one = 1
Вы хотите знать его тип?
В Python есть правильные пути и неправильные способы сделать практически все. Вот правильный путь:
type
использования
>>> type(one) <type 'int'>
Вы можете использовать атрибут __name__
для получения имени объекта. (Это один из немногих специальных атрибутов, которым нужно использовать имя __dunder__
чтобы добраться до – в модуле inspect
нет даже метода.)
>>> type(one).__name__ 'int'
Не используйте
__class__
В Python имена, начинающиеся с символа подчеркивания, семантически не являются частью общедоступного API, и пользователям лучше избегать их использования. (За исключением случаев, когда это абсолютно необходимо).
Поскольку type
дает нам класс объекта, мы должны избегать его получения. :
>>> one.__class__
Обычно это первая идея, которую люди имеют при доступе к типу объекта в методе – они уже ищут атрибуты, поэтому тип кажется странным. Например:
class Foo(object): def foo(self): self.__class__
Не. Вместо этого введите type (self):
class Foo(object): def foo(self): type(self)
Реализация деталей ints и floats
Как я могу увидеть тип переменной, является ли она неподписанной 32-разрядной, подписанной 16 бит и т. Д.?
В Python эти особенности являются деталями реализации. Итак, в общем, мы обычно не беспокоимся об этом в Python. Однако, чтобы удовлетворить ваше любопытство …
В Python 2 int обычно представляет собой целое число со знаком, равное ширине слова реализации (ограничено системой). Обычно это выполняется как долгое время на C. Когда целые числа становятся больше, чем это, мы обычно конвертируем их в длинные Python (с неограниченной точностью, чтобы не путать с C longs).
Например, в 32-битном Python 2 мы можем вывести, что int представляет собой 32-битное целое число:
>>> import sys >>> format(sys.maxint, '032b') '01111111111111111111111111111111' >>> format(-sys.maxint - 1, '032b') # minimum value, see docs. '-10000000000000000000000000000000'
В Python 3 старый int уходит, и мы просто используем (Python) long как int, который имеет неограниченную точность.
Мы также можем получить некоторую информацию о поплавках Python, которые обычно выполняются как двойные в C:
>>> sys.float_info sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)
Вывод
Не используйте __class__
, семантически частный атрибут, чтобы получить тип переменной. Вместо этого используйте type
.
И не беспокойтесь о деталях реализации Python. Мне не приходилось решать проблемы вокруг этого. Вы, вероятно, тоже этого не сделаете, и если вы действительно это делаете, вы должны знать достаточно, чтобы не смотреть на этот ответ, что делать.
Еще один способ использования __class__
:
>>> a = [1, 2, 3, 4] >>> a.__class__ <type 'list'> >>> b = {'key1': 'val1'} >>> b.__class__ <type 'dict'> >>> c = 12 >>> c.__class__ <type 'int'>
Вопрос несколько неоднозначен – я не уверен, что вы подразумеваете под «представлением». Если вы пытаетесь запросить тип родного объекта Python, ответ @atzz будет направлять вас в правильном направлении.
Однако, если вы пытаетесь создать объекты Python, которые имеют семантику примитивных C-типов (например, uint32_t
, int16_t
), используйте модуль struct
. Таким образом, вы можете определить количество бит в данном примитиве типа C:
>>> struct.calcsize('c') # char 1 >>> struct.calcsize('h') # short 2 >>> struct.calcsize('i') # int 4 >>> struct.calcsize('l') # long 4
Это также отражается в модуле array
, который может создавать массивы этих типов нижнего уровня:
>>> array.array('c').itemsize # char 1
Максимальное целочисленное число ( int
Python 2) задается sys.maxint .
>>> import sys, math >>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness 32.0
Существует также sys.getsizeof , который возвращает фактический размер объекта Python в остаточной памяти:
>>> a = 5 >>> sys.getsizeof(a) # Residual memory. 12
Для данных с плавающей запятой и данных точности используйте sys. float_info :
>>> sys.float_info sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)
Вы имеете в виду Python или ctypes ?
В первом случае вы просто не можете – потому что у Python нет подписанных / unsigned, 16/32 битных целых чисел.
Во втором случае вы можете использовать type()
:
>>> import ctypes >>> a = ctypes.c_uint() # unsigned int >>> type(a) <class 'ctypes.c_ulong'>
Дополнительную информацию о типах ctypes см. В официальной документации .
print type(variable_name)
Я также настоятельно рекомендую интерактивный интерпретатор IPython при решении таких вопросов. Он позволяет вам вводить имя variable_name?
и вернет полный список информации об объекте, включая тип и строку документа для этого типа.
например
In [9]: var = 123 In [10]: var? Type: int Base Class: <type 'int'> String Form: 123 Namespace: Interactive Docstring: int(x[, base]) -> integer Convert a string or number to an integer, if possible. A floating point argument will be truncated towards zero (this does not include a string representation of a floating point number!) When converting a string, use the optional base. It is an error to supply a base when converting a non-string. If the argument is outside the integer range a long object will be returned instead.
Это может быть немного нерелевантно. но вы можете проверить типы объектов с isinstance(object, type)
как указано здесь .
У Python нет таких типов, которые вы описываете. Для представления интегральных значений используются два типа: int
, который соответствует типу int платформы в C и long
, который является произвольным целым числом точности (то есть он растет по мере необходимости и не имеет верхнего предела). int
s молча преобразуются в long
если выражение производит результат, который не может быть сохранен в int
.
Примеры простой проверки типов в Python:
assert type(variable_name) == int assert type(variable_name) == bool assert type(variable_name) == list
Простой, для python 3.4 и выше
print (type(variable_name))
Python 2.7 и выше
print type(variable_name)
Это действительно зависит от того, какой уровень вы имеете в виду. В Python 2.x существуют два целочисленных типа: int
(ограничено sys.maxint
) и long
(неограниченная точность) по историческим причинам. В коде Python это не должно иметь большого значения, потому что интерпретатор автоматически преобразуется в длинный, когда число слишком велико. Если вы хотите узнать о фактических типах данных, используемых в базовом интерпретаторе, это зависит от реализации. (CPython находятся в объектах / intobject.c и Objects / longobject.c.) Чтобы узнать о типах систем, посмотрите на вызов cdleary для использования структурного модуля.
Для python2.x используйте
print type(variable_name)
Для python3.x используйте
print(type(variable_name))
Как узнать тип переменной Python
Введение
В Python есть две функции
type()
и
isinstance()
с помощью которых можно проверить к какому типу данных относится переменная.
type()
Встроенная функция type() это самый простой способ выяснить тип. Вы можете
воспользоваться следующим образом.
print(type(var_list))
Пример использования type()
В Python всего пять типов данных. Создайте пять переменных разного
типа и проверьте работу функции:
var_int = 1380
var_str = 'heihei.ru'
var_bool = True
var_list = ['heihei.ru','topbicycle.ru','urn.su']
var_tuple = ('andreyolegovich.ru', 'aredel.com')
print(type(var_int))
print(type(var_str))
print(type(var_bool))
print(type(var_list))
print(type(var_tuple))
<class ‘int’>
<class ‘str’>
<class ‘bool’>
<class ‘list’>
<class ‘tuple’>
Спецификацию функции type() вы можете прочитать
на сайте
docs.python.org
С помощью команды
type()
можно, например, определить куда установлен Python.
Подробнее об этом
можете прочитать
здесь
type python3
python3 is hashed (/usr/bin/python3)
type python
python3 is hashed (/usr/bin/python)
isinstance()
Кроме type() в Python есть функция isinstance(),
с помощью которой можно проверить не относится ли
переменная к какому-то определённому типу.
Иногда это очень удобно, а если нужно — всегда можно на основе
isinstance() написать свою функцию.
Пример использования
Из isinstance() можно сделать аналог type()
В Python пять типов данных, создадим пять переменных разного
типа и проверим работу функции
var_int = 1380
var_str = 'heihei. ru'
var_bool = True
var_list = ['heihei.ru','topbicycle.ru','urn.su']
var_tuple = ('andreyolegovich.ru', 'aredel.com')
if (isinstance(var_int, int)):
print(f"{var_int} is int")
else:
print(f"{var_int} is not int")
if (isinstance(var_str, str)):
print(f"{var_str} is str")
else:
print(f"{var_str} is not str")
if (isinstance(var_bool, bool)):
print(f"{var_bool} is bool")
else:
print(f"{var_bool} is not bool")
if (isinstance(var_list, list)):
print(f"{var_list} is list")
else:
print(f"{var_list} is not list")
if (isinstance(var_tuple, tuple)):
print(f"{var_tuple} is tuple")
else:
print(f"{var_tuple} is not tuple")
Результат
1380 is int
heihei. ru is str
True is bool
[‘heihei.ru’, ‘topbicycle.ru’, ‘urn.su’] is list
(‘andreyolegovich.ru’, ‘aredel.com’) is tuple
Напишем свою фукнцию по определению типа typeof()
на базе isinstance
def typeof(your_var):
if (isinstance(your_var, int)):
return 'int'
elif (isinstance(your_var, bool)):
return 'bool'
elif (isinstance(your_var, str)):
return 'str'
elif (isinstance(your_var, list)):
return 'list'
elif (isinstance(your_var, tuple)):
return 'tuple'
else:
print("type is unknown")
Протестируем нашу функцию
print(f»var_list is {typeof(var_list)}»)
var_list is list
В
C++
похожую задачу решает функция
typeid()
Читать статью: «Как определить тип переменной C++»
В
.NET / C#
за это отвечает функция
GetType()
Добавьте типы переменных в файл .pyx (Python)
Я пытаюсь скомпилировать модуль с помощью Cython, чтобы ускорить его работу.
Ускорение неплохое, но учебник Cython указывает, что оно может быть еще лучше при использовании статической типизации (см. http://docs.cython.org/src/quickstart/cythonize.html#determining-where-to-add-types ).
Теперь я использовал
cython -a myscript.pyd
команда, чтобы увидеть, где было бы хорошо добавить типы, и везде, где я объявляю переменные, строки кодов выделяются желтым цветом, указывая, что я потенциально могу добавить туда типы переменных.
Проблема у меня в том, что это только кажется возможным сделать внутри функции. Например, некоторые из моих выделенных желтым цветом строк в коде
a = np.zeros(len(b))
word = 'pref'
Поэтому в файле .pyx я изменил его на
float a = np.zeros(len(b))
char word = 'pref'
Теперь это не работает. Я не могу запустить или скомпилировать это. Итак, как я могу добавлять типы переменных, если они не находятся внутри функции?
python
types
cython
Поделиться
Источник
Neodyme
29 июля 2014 в 10:26
2 ответа
- Cython, чистый режим Python: .pxd и @locals
У меня есть программа Python, которую я хочу ускорить с помощью Cython, сохраняя при этом исходный код читаемым интерпретатором Python (чистый режим Python). Я получаю увеличение скорости 20%, просто компилируя его таким, какой он есть. Затем я создал файл .pxd и попытался добавить несколько…
- Не удалось установить PyX с помощью Anaconda
У меня возникли проблемы с установкой python модулей PyX, я получил следующую ошибку при использовании pip: $ pip install PyX Collecting PyX Could not find a version that satisfies the requirement PyX (from versions: ) Some externally hosted files were ignored as access to them may be unreliable…
2
Вам нужно использовать cdef
:
cdef char word
c = 'pref'
cdef int i,b etc..
Если вы посмотрите в тех документах, на которые вы ссылались:
Вызовы функций Python могут быть дорогостоящими – в Cython вдвойне, потому что для выполнения вызова может потребоваться преобразование в объекты Python и обратно. В приведенном выше примере предполагается, что аргумент является двойником C как внутри f(), так и в вызове к нему, однако объект Python float должен быть построен вокруг аргумента, чтобы передать его.
Поэтому Cython предоставляет синтаксис для объявления функции в стиле C-ключевое слово cdef:
cdef double f(double x) except? -2:
return x**2-x
Поделиться
Padraic Cunningham
29 июля 2014 в 10:54
1
Сначала вам нужно сказать cython, что эта переменная получит статический тип с cdef
. Во-вторых, вы пытаетесь присвоить массив одной переменной с плавающей запятой. Вы должны использовать тип, совместимый с массивом numpy. Numpy имеет C-бэкэнд, который определяет типы массивов, которые могут быть использованы в Cython. Правильный способ объявить тип для вашего массива будет следующим.
cimport numpy as np
cdef np.ndarray[np.double_t] a = np.zeros(len(b))
Многозначные строки сохраняются в массивах в C. Одна переменная char
может содержать только одну букву. В учебнике Cython есть страница, как обрабатывать строки python в cython
Поделиться
Max Linke
29 июля 2014 в 11:04
Похожие вопросы:
Ошибка неизвестный тип файла «файл» .pyx
Я пытаюсь создать пакет Python (pyregion), который содержит файл *.pyx, и в процессе сборки возникает ошибка. Проверка приведенного ниже вывода: $ python setup.py build running build running…
Типы переменных Python
x = 4 name = Josh y = 3.2 guess = True stuff = [guitar, bed] days = {Monday:favourite, Friday: least favourite} jay = (3, 9) Я изучаю Python и в настоящее время изучаю различные типы переменных. В…
Импорт нецелочисленной константы в файл .pyx
Как я могу объявить константы (различных типов , а не только значения перечисления) и разделить их между несколькими файлами .pyx ? В файле .pyx я могу объявлять и использовать константы: DEF. ..
Cython, чистый режим Python: .pxd и @locals
У меня есть программа Python, которую я хочу ускорить с помощью Cython, сохраняя при этом исходный код читаемым интерпретатором Python (чистый режим Python). Я получаю увеличение скорости 20%,…
Не удалось установить PyX с помощью Anaconda
У меня возникли проблемы с установкой python модулей PyX, я получил следующую ошибку при использовании pip: $ pip install PyX Collecting PyX Could not find a version that satisfies the requirement…
Python Ошибка w/ Pyx Модуль, Несмотря На Хороший Код
Я делаю некоторую работу с pyx, модулем python для настраиваемых данных graphing и визуализаций. Дело в том, что даже копирование самого простого примера кода graphing напрямую возвращает сломанный…
Как включить файл .pyx в пакет python
Я использовал cython в своих пакетах pyirt , но когда я опубликовал его в pypi, файл .pyx не был включен в tar.gz Я думаю, что это должно быть как-то связано с установочным файлом. Однако я не могу…
Python не позволяет аннотировать типы переменных при распаковке
PEP 526 говорит следующее: Обратите внимание, что хотя синтаксис и допускает упаковку кортежей, он не позволяет аннотировать типы переменных при использовании распаковки кортежей. Почему python не…
Используя PyX, как я могу установить размер canvas?
Вопрос новичка, использующего PyX в Python 3.8.1. Я создаю файл EPS и хотел бы, чтобы размер canvas составлял be 70 мм х 70 мм. Как я могу это сделать? from pyx import * # build and size canvas c =…
Создайте исполняемый файл из нескольких файлов pyx с помощью cython
Я пытаюсь сделать один исполняемый файл unix из моих исходных файлов python. У меня есть два файла, p1.py и p2.py p1.py :- from p2 import test_func print (test_func()) p2.py :- def test_func():…
Создание пользовательских типов растров в Python—ArcGIS Pro
Растровые типы могут настраиваться и применяться в Python в соответствии с типом растровых данных, которые вы хотите добавить. Растровые типы можно сравнить с набором функций, которые распознают формат структуры метаданных, связанных с вашими данными. Растровый тип также может обрабатывать метаданные, чтобы получать такие сведения, как пути к файлам данных, сведения о пространственной привязке и собственно метаданные (название сенсора, высота солнца, азимут солнца, расстояние до него, дата сбора данных, параметры отражения и излучения).
Кроме обработки и считывания метаданных из файла, растровый тип также задает шаблоны обработки, которые могут применяться к считываемому типу данных. Шаблоны обработки могут объединять различные фрагменты информации из источников для создания более значимых выходных данных, которые лучше подходят для отображения и последующего анализа. Большинство растровых типов, основанных на данных сенсоров, используют шаблон Мультиспектральный в качестве одного из рабочих. В зависимости от типов данных, доступных для продукта, можно задать множество других шаблонов. Например, растровый тип Landsat 8 задает различные шаблоны, такие как Мультиспектральный, Панхроматический, Панхроматическое слияние, Растительность, Перистые облака и Снег/Лед.
Дополнительные сведения о растровых типах ArcGIS, имеющихся в Python, см. в разделе Растровые типы Github.
Свойства растрового типа
Растровый тип создается с помощью задания одного или нескольких следующих свойств из исходных данных:
- Свойства канала – имя канала, минимальная и максимальная длины волн, поверхностная плотность потока солнечного излучения
- Шаблон обработки – шаблоны растровых функций, содержащие входные данные, функции и значения переменных
- Дополнительные поля – добавляются в набор данных мозаики
- Дополнительные входные данные – дополнительные сведения, необходимые для растрового типа для полного описания источника данных, например, ЦМР, которая должна быть применена к исходному набору данных для ортотрансформации изображения
Реализация пользовательского растрового типа
Подробности реализации растрового типа в модуле Python описаны ниже. растровый тип является слоем, который обеспечивает взаимодействие с приложением по различным аспектам данных. Растровые типы также являются основой для добавления растров в набор данных мозаики с помощью инструмента Добавить растры в набор данных мозаики.
Среда ArcGIS определяет растровый тип с помощью общеизвестного шаблона-фабрики. Фабрика растровых типов содержит коллекцию растровых типов, которая может быть организована по определенному критерию, или это может быть контейнер, содержащий все растровые типы.
Имеется три компонента растрового типа, реализованные в Python:
Как это работает?
Методика реализации растрового типа в Python является интуитивно понятной. ArcGIS предлагает адаптер растровых типов, который взаимодействует с системой ArcGIS и модулем Python для реализации растрового типа. Адаптер загружает модуль Python и находит RasterTypeFactory для определения растровых типов, использующихся в этом модуле. RasterTypeFactory должен содержать хотя бы одну открытую функцию, getRasterTypesInfo, которая возвращает информацию обо всех растровых типах, входящих в фабрику. Функция getRasterTypesInfo возвращает словарь RasterTypeDefinitions. Затем адаптер извлекает информацию о RasterTypes и обрабатывает растровые типы на основе Python так же, как и любые другие растровые типы, встречающиеся в ArcGIS. Затем среда ArcGIS взаимодействует с растровым типом на основе Python, используя Builder API и Crawler API.
После реализации вашего растрового типа с помощью Python, разместите модуль Python в папке [InstallDirectory]\Resources\Raster\Types.
Среда обработки растровых типов ArcGIS считывает все файлы *.py из этой папки и проверяет, имеются ли в них допустимые растровые типы. Если допустимые растровые типы найдены, они будут добавлены к списку поддерживаемых растровых типов в инструменте Добавить растры в набор данных мозаики.
Дополнительные сведения о реализации растрового типа в модуле Python, см. в разделе Анатомия растрового типа Python.
Связанные разделы
Отзыв по этому разделу?
Неизменяемость и примитивные типы — Python
Рассмотрим функцию abs()
, которая делает число неотрицательным:
balance = -200
amount = abs(balance)
print(amount) # => 200
На экран выведется 200
.
Но что будет выведено на экран, если вызвать print(balance)
? Выведется старое значение: -200
.
Функция abs()
вернула новые данные, но не изменила переданные в неё данные. Она не могла это сделать физически, потому что примитивные типы в Python — неизменяемы.
(Напомним, что примитивные типы — это простые типы, встроенные в сам язык программирования: например, число или строка).
В будущих уроках и заданиях мы будем использовать как собственные функции, так и функции из стандартной библиотеки, но никакие функции не смогут изменять данные примитивных типов.
Число -200
— это значение переменной balance
, и само число нельзя изменить. Но переменная называется переменной, потому что её значение можно заменить на другое значение.
То есть мы можем написать:
balance = -200
balance = abs(balance)
print(balance)
Сначала в переменную записывается одно значение, а потом в ту же переменную вместо предыдущего значения записывается новое: то, что вернет вызов abs(balance)
.
Строку balance = abs(balance)
можно прочитать так: «записать в переменную balance
то, что вернет вызов функции abs()
если передать в неё текущее значение переменной balance
».
Мы не изменили число, мы изменили переменную — записали в неё новое число вместо старого.
Изменение уже существующей переменной может показаться безобидным действием. Но в реальных программах переписывание переменной становится источником проблем. Код с изменяемыми переменными сложно понимать и анализировать: никогда нельзя быть уверенным, какое значение будет у переменной в какой-то момент времени.
Вы наверняка регулярно сталкиваетесь с багами и ошибками в приложениях, которые используете. Многие вызваны именно обилием изменяемых переменных: такие ошибки сложно найти и исправить.
Единственное место, где без переменных никак — это циклы, с которыми мы познакомимся позже. Во всех остальных местах относитесь к переменным как к константам — неизменяемым сущностям. Создавайте переменные, задавайте им значение и больше не меняйте.
Задание
Переведите число, записанное в переменную value
, в шестнадцатиричный вид, используя функцию hex()
. Новое значение (а это уже будет строка!) запишите в ту же переменную value
.
Возможно, вам покажется, что код получился странным. Это типичный пример: переписывание переменных делает код менее понятным и более запутанным, особенно в таких случаях, как этот — когда новое значение имеет тип, отличающийся от типа старого значения.
Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Типы данных Python
Типы данных в Python
Каждое значение в Python имеет тип данных. Поскольку в программировании на Python все является объектом, типы данных на самом деле являются классами, а переменные — экземплярами (объектами) этих классов.
В Python есть различные типы данных. Некоторые из важных типов перечислены ниже.
Числа Python
Целые числа, числа с плавающей запятой и комплексные числа подпадают под категорию чисел Python. В Python они определены как классы int
, float
и complex
.
Мы можем использовать функцию type ()
, чтобы узнать, к какому классу принадлежит переменная или значение. Точно так же функция isinstance ()
используется для проверки принадлежности объекта к определенному классу.
а = 5
print (a, «относится к типу», type (a))
а = 2,0
print (a, «относится к типу», type (a))
а = 1 + 2j
print (a, "комплексное число?", isinstance (1 + 2j, complex))
Выход
5 имеет тип2.0 имеет тип (1 + 2j) комплексное число? Правда
Целые числа могут иметь любую длину, она ограничена только доступной памятью.
Число с плавающей запятой имеет точность до 15 десятичных знаков. Целые числа и числа с плавающей точкой разделяются десятичными точками. 1 — целое число, 1.0 — число с плавающей запятой.
Комплексные числа записываются в виде x + yj
, где x — действительная часть, а y — мнимая часть. Вот несколько примеров.
>>> а = 12345678
456789
>>> а
12345678456789
>>> б = 0.12345678456789
>>> б
0,123456784568
>>> c = 1 + 2j
>>> c
(1 + 2j)
Обратите внимание, что переменная float
b усечена.
Список Python
Список — это упорядоченная последовательность элементов. Это один из наиболее часто используемых типов данных в Python и очень гибкий. Все элементы в списке не обязательно должны быть одного типа.
Объявить список довольно просто. Пункты, разделенные запятыми, заключаются в квадратные скобки []
.
a = [1, 2.2, 'python']
Мы можем использовать оператор среза []
для извлечения элемента или диапазона элементов из списка. В Python индекс начинается с 0.
a = [5,10,15,20,25,30,35,40]
# a [2] = 15
print ("a [2] =", a [2])
# a [0: 3] = [5, 10, 15]
print ("a [0: 3] =", a [0: 3])
# a [5:] = [30, 35, 40]
print ("a [5:] =", a [5:])
Выход
a [2] = 15 a [0: 3] = [5, 10, 15] a [5:] = [30, 35, 40]
Списки изменяемы, то есть значение элементов списка может быть изменено.
a = [1, 2, 3]
а [2] = 4
печать (а)
Выход
[1, 2, 4]
Кортеж Python
Кортеж — это упорядоченная последовательность элементов, аналогичная списку. Единственная разница в том, что кортежи неизменяемы. Однажды созданные кортежи не могут быть изменены.
Кортежи используются для защиты данных от записи и обычно работают быстрее, чем списки, поскольку они не могут изменяться динамически.
Он определяется в круглых скобках ()
, где элементы разделяются запятыми.
t = (5, 'программа', 1 + 3j)
Мы можем использовать оператор среза []
для извлечения элементов, но мы не можем изменить его значение.
t = (5, 'программа', 1 + 3j)
# t [1] = "программа"
print ("t [1] =", t [1])
# t [0: 3] = (5, 'программа', (1 + 3j))
print ("t [0: 3] =", t [0: 3])
# Выдает ошибку
# Кортежи неизменяемы
t [0] = 10
Выход
t [1] = программа t [0: 3] = (5, 'программа', (1 + 3j)) Отслеживание (последний вызов последний): Файл "test.py ", строка 11, вt [0] = 10 TypeError: объект 'tuple' не поддерживает назначение элементов
Строки Python
Строка — это последовательность символов Юникода. Мы можем использовать одинарные или двойные кавычки для представления строк. Многострочные строки могут быть обозначены тройными кавычками, '' '
или "" "
.
s = "Это строка"
печать (и)
s = '' 'Многострочный
нить'''
печать (и)
Выход
Это строка Многострочный нить
Так же, как список и кортеж, оператор среза []
может использоваться со строками.Однако строки неизменяемы.
s = 'Привет, мир!'
# s [4] = 'о'
print ("s [4] =", s [4])
# s [6:11] = 'мир'
print ("s [6:11] =", s [6:11])
# Выдает ошибку
# Строки неизменяемы в Python
s [5] = 'd'
Выход
с [4] = o s [6:11] = мир Отслеживание (последний вызов последний): Файл «<строка>», строка 11, в <модуле> TypeError: объект 'str' не поддерживает назначение элементов
Набор Python
Набор
— это неупорядоченная коллекция уникальных предметов. Набор определяется значениями, разделенными запятой внутри фигурных скобок {}
. Товары в наборе не заказываются.
a = {5,2,3,1,4}
# печать переменной набора
печать ("а =", а)
# тип данных переменной a
печать (тип (а))
Выход
a = {1, 2, 3, 4, 5} <класс 'набор'>
Мы можем выполнять операции над множествами, такие как объединение, пересечение двух множеств. Наборы имеют уникальные значения. Они устраняют дубликаты.
a = {1,2,2,3,3,3}
печать (а)
Выход
{1, 2, 3}
Поскольку набор представляет собой неупорядоченную коллекцию, индексация не имеет значения.Следовательно, оператор []
нарезки не работает.
>>> a = {1,2,3}
>>> a [1]
Отслеживание (последний вызов последний):
Файл «<строка>», строка 301, в коде выполнения
Файл «<интерактивный ввод>», строка 1, в <модуле>
TypeError: объект 'set' не поддерживает индексацию
Словарь Python
Словарь — это неупорядоченный набор пар ключ-значение.
Обычно используется, когда у нас есть огромное количество данных.Словари оптимизированы для получения данных. Мы должны знать ключ, чтобы получить значение.
В Python словари определены в фигурных скобках {}
, где каждый элемент представляет собой пару в форме ключ: значение
. Ключ и значение могут быть любого типа.
>>> d = {1: 'значение', 'ключ': 2}
>>> тип (d)
<класс 'dict'>
Мы используем ключ для получения соответствующего значения. Но не наоборот.
d = {1: 'значение', 'ключ': 2}
печать (тип (d))
print ("d [1] =", d [1])
print ("d ['ключ'] =", d ['ключ'])
# Выдает ошибку
print ("d [2] =", d [2])
Выход
<класс 'dict'> d [1] = значение d ['ключ'] = 2 Отслеживание (последний вызов последний): Файл «<строка>», строка 9, в <модуле> KeyError: 2
Преобразование между типами данных
Мы можем выполнять преобразование между разными типами данных, используя различные функции преобразования типов, такие как int ()
, float ()
, str ()
и т. Д.
>>> поплавок (5)
5.0
Преобразование из float в int приведет к усечению значения (приближению к нулю).
>>> интервал (10.6)
10
>>> int (-10,6)
-10
Преобразование в строку и из строки должно содержать совместимые значения.
>>> float ('2,5')
2,5
>>> str (25)
'25'
>>> int ('1p')
Отслеживание (последний вызов последний):
Файл «<строка>», строка 301, в коде выполнения
Файл «<интерактивный ввод>», строка 1, в <модуле>
ValueError: недопустимый литерал для int () с базой 10: '1p'
Мы даже можем преобразовать одну последовательность в другую.
>>> установить ([1,2,3])
{1, 2, 3}
>>> кортеж ({5,6,7})
(5, 6, 7)
>>> список ('привет')
['Привет']
Для преобразования в словарь каждый элемент должен быть парой:
>>> dict ([[1,2], [3,4]])
{1: 2, 3: 4}
>>> dict ([(3,26), (4,44)])
{3: 26, 4: 44}
pydoc — генератор документации и интерактивная справочная система — документация Python 3.9.2
Исходный код: Lib / pydoc.py
Модуль pydoc
автоматически генерирует документацию из Python
модули. Документация может быть представлена в виде страниц текста на консоли,
обслуживается веб-браузером или сохраняется в HTML-файлы.
Для модулей, классов, функций и методов отображаемая документация
полученный из строки документации (т. е. атрибута __doc__
) объекта,
и рекурсивно его документируемых членов. Если нет строки документации,
pydoc
пытается получить описание из блока строк комментариев просто
над определением класса, функции или метода в исходном файле или в
верх модуля (см. осмотр.getcomments ()
).
Встроенная функция help ()
вызывает онлайн-справочную систему в
интерактивный интерпретатор, который использует pydoc
для создания документации
как текст на консоли. Эту же текстовую документацию можно также просмотреть на
вне интерпретатора Python, запустив pydoc в качестве сценария на
командная строка операционной системы. Например, запуск
в приглашении оболочки отобразит документацию по модулю sys
в
стиль похож на страницы справочника, показываемые командой Unix man .В
аргумент pydoc может быть именем функции, модуля или пакета,
или пунктирная ссылка на класс, метод или функцию в модуле или модуле
в пакете. Если аргумент pydoc выглядит как путь (то есть
он содержит разделитель путей для вашей операционной системы, например косую черту в
Unix) и относится к существующему исходному файлу Python, тогда документация
произведен для этого файла.
Примечание
Для поиска объектов и их документации pydoc
импортирует
модуль (ы), который необходимо документировать.Следовательно, любой код на уровне модуля будет
казнен по этому поводу. Используйте , если __name__ == '__main__':
guard для
выполнять код только тогда, когда файл вызывается как сценарий, а не просто импортируется.
При выводе на консоль pydoc пытается разбить
вывод для облегчения чтения. Если установлена переменная среды PAGER
,
pydoc будет использовать его значение как программу разбиения на страницы.
Указание флага -w
перед аргументом вызовет документацию HTML
для записи в файл в текущем каталоге вместо отображения текста
на консоли.
Указание флага -k
перед аргументом для поиска в синопсисе
строк всех доступных модулей для ключевого слова, указанного в качестве аргумента, снова в
аналогично команде Unix man . Линия синопсиса
module — это первая строка его документации.
Вы также можете использовать pydoc для запуска HTTP-сервера на локальном компьютере.
который будет служить документацией для посещающих веб-браузеров. pydoc -p 1234
запустит HTTP-сервер на порту 1234, что позволит вам просматривать
документацию по адресу http: // localhost: 1234/
в предпочитаемом вами веб-браузере.Если указать 0
в качестве номера порта, будет выбран произвольный неиспользуемый порт.
pydoc -n
имя хоста. По умолчанию имя хоста — «localhost», но если вы хотите, чтобы сервер
быть доступным с других машин, вы можете изменить имя хоста,
сервер отвечает на. Во время разработки это особенно полезно, если вы хотите
для запуска pydoc из контейнера.
pydoc -b запустит сервер и дополнительно откроет веб
браузер на страницу индекса модуля.На каждой обслуживаемой странице есть панель навигации в
вверху, где вы можете Получить справку по отдельному элементу, Найти все модули с помощью
ключевое слово в их строке синопсиса и перейдите к указателю модуля , темам и
Ключевые слова страниц.
Когда pydoc создает документацию, он использует текущую среду
и путь к расположению модулей. Таким образом, вызывая pydoc spam
документирует именно ту версию модуля, которую вы получили бы, если бы запустили
Интерпретатор Python и набрал спам импорта
.
Предполагается, что документация по модулям
для основных модулей находится в
https://docs.python.org/X.Y/library/
, где X
и Y
—
основной и дополнительный номера версий интерпретатора Python. Это может
быть переопределено установкой переменной окружения PYTHONDOCS
на другой URL-адрес или в локальный каталог, содержащий библиотеку
Справочные страницы руководства.
Изменено в версии 3.2: Добавлена опция -b
.
Изменено в версии 3.3: Параметр командной строки -g
был удален.
Изменено в версии 3. 7: Добавлена опция -n
.
переменных в Python — настоящий Python
Смотреть сейчас В этом руководстве есть связанный видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным руководством, чтобы углубить свое понимание: Переменные в Python
В предыдущем руководстве по основным типам данных в Python вы увидели, как могут быть созданы значения различных типов данных Python.Но до сих пор все показанные значения были буквальными или постоянными значениями:
Если вы пишете более сложный код, вашей программе потребуются данные, которые могут изменяться по мере выполнения программы.
Вот что вы узнаете в этом руководстве: Вы узнаете, как каждый элемент данных в программе Python может быть описан абстрактным термином объект , и вы узнаете, как манипулировать объектами, используя символические имена, называемые переменные .
Пройдите тест: Проверьте свои знания с помощью нашей интерактивной викторины «Переменные Python».По завершении вы получите оценку, чтобы вы могли отслеживать свой прогресс в обучении с течением времени:
Пройдите тест »
Присвоение переменной
Думайте о переменной как об имени, прикрепленном к определенному объекту. В Python переменные не нужно объявлять или определять заранее, как это имеет место во многих других языках программирования. Чтобы создать переменную, вы просто присваиваете ей значение, а затем начинаете ее использовать. Присваивание выполняется с помощью единственного знака равенства ( =
):
Это читается или интерпретируется как « n
присваивается значение 300
.”Как только это будет сделано, n
можно использовать в операторе или выражении, и его значение будет заменено:
Так же, как буквальное значение может отображаться непосредственно из приглашения интерпретатора в сеансе REPL без необходимости print ()
, так может и переменная:
Позже, если вы измените значение n
и используете его снова, вместо него будет подставлено новое значение:
>>>
>>> п = 1000
>>> print (n)
1000
>>> п
1000
Python также позволяет назначать цепочки, что позволяет назначать одно и то же значение нескольким переменным одновременно:
>>>
>>> a = b = c = 300
>>> print (a, b, c)
300 300 300
Цепное присвоение, приведенное выше, одновременно присваивает 300
переменным a
, b
и c
.
Типы переменных в Python
Во многих языках программирования переменные имеют статическую типизацию. Это означает, что переменная изначально объявляется как имеющая определенный тип данных, и любое значение, присвоенное ей во время ее существования, всегда должно иметь этот тип.
Переменные в Python не подпадают под это ограничение. В Python переменной может быть присвоено значение одного типа, а затем повторно присвоено значение другого типа:
>>>
>>> var = 23.5
>>> print (var)
23,5
>>> var = "Теперь я строка"
>>> print (var)
Теперь я струна
Ссылки на объекты
Что на самом деле происходит, когда вы присваиваете переменную? Это важный вопрос для Python, потому что ответ несколько отличается от того, что вы найдете во многих других языках программирования.
Python — это очень объектно-ориентированный язык. Фактически, практически каждый элемент данных в программе Python является объектом определенного типа или класса.(Этот момент будет повторяться много раз в ходе этих руководств.)
Рассмотрим этот код:
При представлении отчета print (300)
интерпретатор делает следующее:
- Создает целочисленный объект
- Придает значение
300
- Показывает на консоли
Вы можете видеть, что целочисленный объект создается с помощью встроенной функции type ()
:
>>>
>>> тип (300)
<класс 'int'>
Переменная Python — это символическое имя, которое является ссылкой или указателем на объект.После того, как объект назначен переменной, вы можете ссылаться на объект по этому имени. Но сами данные по-прежнему содержатся в объекте.
Например:
Это назначение создает целочисленный объект со значением 300
и присваивает переменной n
, указывающей на этот объект.
Назначение переменной
Следующий код проверяет, что n
указывает на целочисленный объект:
>>>
>>> print (n)
300
>>> тип (n)
<класс 'int'>
Теперь рассмотрим следующее утверждение:
Что происходит, когда он выполняется? Python не создает другой объект. Он просто создает новое символическое имя или ссылку, m
, которая указывает на тот же объект, на который указывает n
.
Множественные ссылки на один объект
Теперь предположим, что вы делаете это:
Теперь Python создает новый целочисленный объект со значением 400
, и m
становится ссылкой на него.
Ссылки на отдельные объекты
Наконец, предположим, что этот оператор выполняется следующим образом:
Теперь Python создает строковый объект со значением "foo"
и ссылается на него n
.
Осиротевший объект
Больше нет ссылки на целочисленный объект 300
. Он осиротел, и к нему нет доступа.
Учебники из этой серии иногда будут ссылаться на время жизни объекта. Жизнь объекта начинается с момента его создания, когда создается по крайней мере одна ссылка на него. Во время существования объекта могут быть созданы дополнительные ссылки на него, как вы видели выше, а также ссылки на него могут быть удалены. Объект как бы остается живым до тех пор, пока на него есть хотя бы одна ссылка.
Когда количество ссылок на объект падает до нуля, он становится недоступным. На этом его срок службы закончился. Python в конечном итоге заметит, что он недоступен, и освободит выделенную память, чтобы ее можно было использовать для чего-то другого. На компьютерном жаргоне этот процесс называется сборкой мусора.
Идентификация объекта
В Python каждому создаваемому объекту присваивается номер, который однозначно его идентифицирует. Гарантируется, что никакие два объекта не будут иметь одинаковый идентификатор в течение любого периода, в течение которого их время жизни перекрывается.После того, как счетчик ссылок на объект упадет до нуля и он будет обработан сборщиком мусора, как это произошло с объектом 300
выше, его идентификационный номер становится доступным и может использоваться снова.
Встроенная функция Python id ()
возвращает целочисленный идентификатор объекта. Используя функцию id ()
, вы можете убедиться, что две переменные действительно указывают на один и тот же объект:
>>>
>>> п = 300
>>> т = п
>>> id (n)
60127840
>>> id (м)
60127840
>>> m = 400
>>> id (м)
60127872
После присвоения m = n
, m
и n
оба указывают на один и тот же объект, что подтверждается тем фактом, что id (m)
и id (n)
возвращают одно и то же число.После переназначения m
на 400
, m
и n
указывают на разные объекты с разными идентификаторами.
Deep Dive: кэширование малых целочисленных значений
Из того, что вы теперь знаете о присвоении переменных и ссылках на объекты в Python, вас, вероятно, не удивит следующее:
>>>
>>> m = 300 >>> п = 300 >>> id (м) 60062304 >>> id (n) 60062896
Используя оператор
m = 300
, Python создает целочисленный объект со значением300
и устанавливаетm
в качестве ссылки на него.Затемn
аналогичным образом присваивается целочисленному объекту со значением300
— но не тому же объекту. Таким образом, они имеют разные идентификаторы, что вы можете проверить по значениям, возвращаемымid ()
.Но учтите это:
>>>
>>> m = 30 >>> п = 30 >>> id (м) 1405569120 >>> id (n) 1405569120
Здесь
m
иn
отдельно назначаются целочисленным объектам, имеющим значение30
.Но в этом случаеid (m)
иid (n)
идентичны!В целях оптимизации интерпретатор создает объекты для целых чисел в диапазоне
[-5, 256]
при запуске, а затем повторно использует их во время выполнения программы. Таким образом, когда вы назначаете отдельные переменные целочисленному значению в этом диапазоне, они фактически будут ссылаться на один и тот же объект.
Имена переменных
В примерах, которые вы видели до сих пор, использовались короткие, лаконичные имена переменных, например m
и n
.Но имена переменных могут быть более подробными. Фактически, это обычно полезно, потому что это делает назначение переменной более очевидным с первого взгляда.
Официально имена переменных в Python могут быть любой длины и могут состоять из прописных и строчных букв ( A – Z
, a – z
), цифр ( 0–9
) и символа подчеркивания ( _
). Дополнительным ограничением является то, что, хотя имя переменной может содержать цифры, первый символ имени переменной не может быть цифрой.
Примечание: Одним из дополнений к Python 3 была полная поддержка Unicode, которая также позволяет использовать символы Unicode в имени переменной. Вы узнаете о Unicode более подробно в одном из будущих руководств.
Например, все следующие допустимые имена переменных:
>>>
>>> name = "Боб"
>>> Возраст = 54
>>> has_W2 = Истина
>>> print (имя, возраст, has_W2)
Боб 54 Верно
Но это не так, потому что имя переменной не может начинаться с цифры:
>>>
>>> 1099_filed = Ложь
SyntaxError: недопустимый токен
Обратите внимание, что регистр имеет значение.Строчные и прописные буквы — это не одно и то же. Также важно использование символа подчеркивания. Каждое из следующих значений определяет разные переменные:
>>>
>>> возраст = 1
>>> Возраст = 2
>>> aGe = 3
>>> ВОЗРАСТ = 4
>>> a_g_e = 5
>>> _age = 6
>>> age_ = 7
>>> _AGE_ = 8
>>> print (age, Age, aGe, AGE, a_g_e, _age, age_, _AGE_)
1 2 3 4 5 6 7 8
Ничто не мешает вам создать две разные переменные в одной программе под названием age
и Age
, или, если на то пошло, agE
.Но, вероятно, это опрометчиво. Это, безусловно, могло бы сбить с толку любого, кто пытается прочитать ваш код, и даже вас самого, после того, как вы некоторое время пробыли вдали от него.
Стоит дать переменной имя, которое достаточно информативно, чтобы было понятно, для чего она используется. Например, предположим, что вы подсчитываете количество людей, окончивших колледж. Вы могли бы выбрать любое из следующего:
>>>
>>> количество выпускников = 2500
>>> NUMBEROFCOLLEGRADUATES = 2500
>>> numberOfCollegeGraduates = 2500
>>> NumberOfCollegeGraduates = 2500
>>> number_of_college_graduates = 2500
>>> print (количество выпускников колледжа, ЧИСЛО КОЛЛЕГЕРАДОВ,
... numberOfCollegeGraduates, NumberOfCollegeGraduates,
... number_of_college_graduates)
2500 2500 2500 2500 2500
Все они, вероятно, лучший выбор, чем n
или ncg
или им подобные. По крайней мере, вы можете сказать по имени, что должно представлять значение переменной.
С другой стороны, не обязательно все они одинаково удобочитаемы. Как и во многих других случаях, это вопрос личных предпочтений, но большинство людей сочтут, что первые два примера, в которых все буквы сложены вместе, труднее читать, особенно букву, написанную заглавными буквами.Наиболее часто используемые методы построения имени переменной из нескольких слов — это последние три примера:
- Camel Регистр: Второе и последующие слова пишутся с заглавной буквы, чтобы границы слов было легче увидеть. (Возможно, в какой-то момент кого-то поразило, что прописные буквы, разбросанные по всему имени переменной, отдаленно напоминают верблюжьи горбы.)
- Пример:
numberOfCollegeGraduates
- Пример:
- Паскаль Регистр: Идентичен регистру Camel, за исключением того, что первое слово также пишется с большой буквы.
- Пример:
NumberOfCollegeGraduates
- Пример:
- Змеиный регистр: Слова разделены подчеркиванием.
- Пример:
number_of_college_graduates
- Пример:
Программисты горячо и с удивительной страстью спорят, что из них предпочтительнее. За всех них можно привести достойные аргументы. Используйте то, что вам больше всего нравится визуально. Выберите один и используйте его постоянно.
Позже вы увидите, что не только переменным можно давать имена.Вы также можете давать имена функциям, классам, модулям и так далее. Правила, применяемые к именам переменных, также применяются к идентификаторам, более общему термину для имен, присвоенных программным объектам.
Руководство по стилю кода Python, также известное как PEP 8 , содержит соглашения об именах, в которых перечислены предлагаемые стандарты для имен различных типов объектов. PEP 8 включает следующие рекомендации:
- Snake Case следует использовать для имен функций и переменных.
- Pascal.(PEP 8 именует это соглашением «CapWords».)
Для имен классов следует использовать регистр
Зарезервированные слова (ключевые слова)
Есть еще одно ограничение на имена идентификаторов. В языке Python зарезервирован небольшой набор ключевых слов, обозначающих специальные функции языка. Ни один объект не может иметь то же имя, что и зарезервированное слово.
В Python 3.6 есть 33 зарезервированных ключевых слова:
Python Ключевые слова | |||
---|---|---|---|
Ложь | деф | если | поднять |
Нет | del | импорт | возврат |
Истинно | Элиф | дюйм | попробовать |
и | еще | это | , а |
как | кроме | лямбда | с |
отстаивать | наконец | нелокальный | выход |
перерыв | для | не | |
класс | из | или | |
продолжить | по всему миру | проход |
Вы можете просмотреть этот список в любое время, набрав help («ключевые слова»)
в интерпретаторе Python. Зарезервированные слова чувствительны к регистру и должны использоваться точно так, как показано. Все они полностью строчные, за исключением False
, None
и True
.
Попытка создать переменную с тем же именем, что и любое зарезервированное слово, приводит к ошибке:
>>>
>>> for = 3
SyntaxError: недопустимый синтаксис
Заключение
В этом руководстве были рассмотрены основы переменных Python , включая ссылки на объекты и их идентификационные данные, а также присвоение имен идентификаторам Python.
Теперь вы хорошо разбираетесь в некоторых типах данных Python и знаете, как создавать переменные, которые ссылаются на объекты этих типов.
Далее вы увидите, как объединить объекты данных в выражений , включая различные операции .
Пройдите тест: Проверьте свои знания с помощью нашей интерактивной викторины «Переменные Python». По завершении вы получите оценку, чтобы вы могли отслеживать свой прогресс в обучении с течением времени:
Пройдите тест »
Смотреть сейчас В этом руководстве есть связанный видеокурс, созданный командой Real Python.Посмотрите его вместе с письменным руководством, чтобы углубить свое понимание: Переменные в Python
типов данных Python с Python
- RhinoPython
- Основы
Автор: Дейл Фужье (последнее изменение: 5 декабря 2018 г.)
Это руководство представляет собой обзор типов данных Python.
Обзор
Python имеет пять стандартных типов данных:
Python устанавливает тип переменной на основе присвоенного ей значения.В отличие от других языков риггеров, Python изменит тип переменной, если значение переменной будет установлено на другое значение. Например:
var = 123 # Это создаст целочисленное присвоение числа
var = 'john' # переменная `var` теперь имеет строковый тип.
Номера
Числовые переменные Python создаются стандартным методом Python:
var = 382
В большинстве случаев можно использовать стандартный числовой тип Python. Python автоматически преобразует число из одного типа в другой, если это необходимо.Но при определенных обстоятельствах, когда необходим конкретный тип числа (например, сложный, шестнадцатеричный), формат можно принудительно преобразовать в формат, используя дополнительный синтаксис в таблице ниже:
Тип | Формат | Описание | ||||
---|---|---|---|---|---|---|
внутренний | а = 10 | Целое число со знаком | ||||
длинный | а = 345 л | (L) Длинные целые числа, они также могут быть представлены в восьмеричном и шестнадцатеричном формате | ||||
поплавок | а = 45.67 | (.) Действительные значения с плавающей запятой | ||||
комплекс | а = 3,14 Дж | (J) Содержит целое число в диапазоне от 0 до 255. | ||||
В большинстве случаев Python выполняет преобразование переменных автоматически.Вы также можете использовать функции преобразования Python (int (), long (), float (), complex ()) для преобразования данных из одного типа в другой. Кроме того, функция типа
возвращает информацию о том, как ваши данные хранятся в переменной.
message = "Доброе утро"
число = 85
пи = 3,14159
print (type (message)) # Это вернет строку
print (type (n)) # Это вернет целое число
print (type (pi)) # Это вернет число с плавающей запятой
Строка
Создавайте строковые переменные, заключая символы в кавычки.Python использует одинарные кавычки '
двойные кавычки "
и тройные кавычки " ""
для обозначения буквальных строк. Только строки с тройными кавычками "" "
также будут автоматически продолжаться до конца строки.
firstName = 'Джон'
lastName = "кузнец"
message = "" "Это строка, которая будет занимать несколько строк. Использование символов новой строки
и без пробелов для следующих строк. Конец строк в этой строке также считается новой строкой при печати "" "
К строкам можно обращаться как к целой строке или к подстроке полной переменной, используя квадратные скобки «[]».Вот пара примеров:
var1 = 'Hello World!'
var2 = 'RhinoPython'
print var1 [0] # это напечатает первый символ в строке `H`
print var2 [1: 5] # это напечатает подстроку 'hinoP`
Python может использовать специальный синтаксис для форматирования нескольких строк и чисел. Средство форматирования строк быстро рассматривается здесь, потому что оно часто встречается и важно распознать синтаксис.
print «Элемент {} повторяется {} раз» .format (element, count))
{}
— это заполнители, которые заменяются переменными element
и count
в последней строке.Этот компактный синтаксис предназначен для того, чтобы код был более читабельным и компактным.
Python в настоящее время переходит на синтаксис формата, указанный выше, но python может использовать более старый синтаксис, который постепенно сокращается, но все еще встречается в некоторых примерах кода:
print «Элемент% i повторяется% i раз»% (element, count)
Дополнительные сведения о программе форматирования строк в Python см. В статье: Веб-сайт PyFormat
Для более подробного изучения строковых переменных в Python см. Учебное пособие Tutorialspoint Python по stings.Примечание: в этой статье используется старый синтаксис форматирования, но есть много полезной информации.
Список
Списки — очень полезный тип переменных в Python. Список может содержать серию значений. Переменные списка объявляются с помощью скобок []
после имени переменной.
A = [] # Это пустая переменная списка
B = [1, 23, 45, 67] # этот список создает начальный список из 4 номеров.
C = [2, 4, 'john'] # списки могут содержать разные типы переменных.
Все списки в Python индексируются с нуля. При ссылке на член или длину списка количество элементов списка всегда равно показанному числу плюс один.
mylist = ['Носорог', 'Кузнечик', 'Фламинго', 'Бонго']
B = len (mylist) # Это вернет длину списка, равную 3. Индекс - 0, 1, 2, 3.
print mylist [1] # Это вернет значение с индексом 1, которым является 'Grasshopper'
print mylist [0: 2] # Это вернет первые 3 элемента в списке.
Вы можете назначить данные конкретному элементу списка, используя индекс в списке. Индекс списка начинается с нуля. Данные могут быть присвоены элементам массива следующим образом:
mylist = [0, 1, 2, 3]
mylist [0] = "Носорог"
mylist [1] = "Кузнечик"
mylist [2] = 'Фламинго'
mylist [3] = 'Бонго'
распечатать мой список [1]
Списки не ограничиваются одним измерением. Хотя большинство людей не понимают более трех или четырех измерений. Вы можете объявить несколько измерений, разделив их запятыми.В следующем примере переменная MyTable представляет собой двумерный массив:
MyTable = [[], []]
В двумерном массиве первое число — это всегда количество строк; второе число — количество столбцов.
Подробнее об управлении списками читайте в статье
.
Кортеж
Кортежи — это группа значений, подобная списку, и ими можно управлять аналогичным образом. Но размер кортежей фиксируется после их назначения.В Python фиксированный размер считается неизменным по сравнению со списком, который является динамическим и изменяемым. Кортежи определяются круглыми скобками ().
myGroup = ('Носорог', 'Кузнечик', 'Фламинго', 'Бонго')
Вот некоторые преимущества кортежей над списками:
- Элементы кортежа. Кортежи не имеют метода добавления или расширения.
- Элементы не могут быть удалены из кортежа.
- Вы можете найти элементы в кортеже, поскольку это не меняет кортеж.
- Вы также можете использовать оператор in, чтобы проверить, существует ли элемент в кортеже.
- Кортежи быстрее списков. Если вы определяете постоянный набор значений и все, что вы собираетесь с ним делать, это перебирать его, используйте кортеж вместо списка.
- Это делает ваш код более безопасным, если вы «защищаете от записи» данные, которые не нужно изменять.
Кажется, кортежи очень ограничивают, так почему они полезны? В Rhino есть множество структур данных, требующих фиксированного набора значений.Например, точка Rhino представляет собой список из 3 чисел [34,5, 45,7, 0]
. Если он установлен как кортеж, то вы можете быть уверены, что исходная структура из трех чисел останется точкой (34,5, 45,7, 0)
. В Rhino есть и другие структуры данных, такие как линии, векторы, домены и другие данные, которые также требуют определенного набора значений, которые не меняются. Для этого отлично подходят кортежи.
Для получения дополнительной информации о кортежах см. Учебное пособие по Python TutorialPoint по кортежам и раздел «Погружение в Python» по кортежам.
Словарь
Словари
в Python представляют собой списки пар Key
: Value
. Это очень мощный тип данных для хранения большого количества связанной информации, которая может быть связана с помощью ключей
. Основная операция словаря — извлечь значение на основе имени ключа
. В отличие от списков, в которых используются номера индексов, словари позволяют использовать ключ
для доступа к своим членам. Словари также можно использовать для сортировки, перебора и сравнения данных.
Словари создаются с помощью фигурных скобок ({}) с парами, разделенными запятой (,), и значениями ключей, связанными с двоеточием (:). В словарях ключ Key
должен быть уникальным. Вот краткий пример использования словарей:
room_num = {'john': 425, 'tom': 212}
room_num ['john'] = 645 # установить значение, связанное с ключом 'john', равным 645
print (room_num ['tom']) # распечатать значение клавиши 'tom'.
room_num ['isaac'] = 345 # Добавить новый ключ 'isaac' со связанным значением
print (room_num.keys ()) # распечатать список ключей в словаре
print ('isaac' in room_num) # проверяет, есть ли 'issac' в словаре. Это вернет истину.
Словари
могут быть более сложными для понимания, но они отлично подходят для хранения данных, к которым легко получить доступ. Чтобы узнать больше об использовании словарей, см. Основы Python — Словари
.
Как определить тип переменной Python?
Итак, если у вас есть переменная, например:
один = 1
Хотите узнать его тип?
Есть правильные и неправильные способы делать практически все в Python.Вот правильный путь:
Используйте тип
>>> тип (один)
<тип int>
Вы можете использовать атрибут __name__
, чтобы получить имя объекта. (Это один из немногих специальных атрибутов, для доступа к которым вам необходимо использовать имя __dunder__
— для него нет даже метода в модуле inspect
.)
>>> тип (один) .__ имя__
'int'
Не использовать
__class__
В Python имена, начинающиеся с подчеркивания, семантически не являются частью общедоступного API, и пользователям рекомендуется избегать их использования. (кроме случаев крайней необходимости)
Поскольку тип
дает нам класс объекта, нам следует избегать его получения напрямую. :
>>> один .__ класс__
Обычно это первая идея, возникающая у людей при доступе к типу объекта в методе — они уже ищут атрибуты, поэтому тип кажется странным. Например:
класс Foo (объект):
def foo (сам):
сам .__ класс__
Не надо.Вместо этого введите (self):
класс Foo (объект):
def foo (сам):
тип (сам)
Детали реализации int и float
Как узнать тип переменной, является ли она 32-битной без знака, 16-битной со знаком и т. Д.?
В Python эти особенности являются деталями реализации. Итак, в Python мы обычно не беспокоимся об этом. Однако, чтобы удовлетворить ваше любопытство …
В Python 2 int обычно представляет собой целое число со знаком, равное ширине слова реализации (ограничено системой).Обычно это реализуется как long в C. Когда целые числа становятся больше этого, мы обычно конвертируем их в длинные числа Python (с неограниченной точностью, не путать с длинными числами C).
Например, в 32-битном Python 2 мы можем вывести, что int является 32-битным целым числом со знаком:
>>> import sys
>>> формат (sys.maxint, '032b')
'01111111111111111111111111111111'
>>> format (-sys.maxint - 1, '032b') # минимальное значение, см. docs.
'-10000000000000000000000000000000'
В Python 3 старый int удаляется, и мы просто используем (Python) long как int, который имеет неограниченную точность.
Мы также можем получить некоторую информацию о числах с плавающей запятой в Python, которые обычно реализуются как двойные в C:
.
>>> sys.float_info
sys.floatinfo (max = 1,7976931348623157e + 308, max_exp = 1024, max_10_exp = 308,
min = 2.2250738585072014e-308, min_exp = -1021, min_10_exp = -307, dig = 15,
mant_dig = 53, epsilon = 2.22044604131e-16, radix = 2, rounds = 1)
Заключение
Не используйте __class__
, семантически закрытый API, для получения типа переменной.Вместо этого используйте типа
.
И не беспокойтесь о деталях реализации Python. Мне самому не приходилось сталкиваться с проблемами, связанными с этим. Вы, вероятно, тоже этого не сделаете, и если вы действительно это сделаете, вы должны знать достаточно, чтобы не искать этот ответ, чтобы узнать, что делать.
Как определить / объявить типы строковых переменных
Переменная Python — это зарезервированная область памяти для хранения значений. Другими словами, переменная в программе на Python передает данные компьютеру для обработки.
Каждое значение в Python имеет тип данных. Различные типы данных в Python: числа, список, кортеж, строки, словарь и т. Д. Переменные в Python могут быть объявлены любым именем или даже алфавитами, такими как a, aa, abc и т. Д.
Как объявить и использовать переменную
Посмотрим на примере. Мы определим переменную в Python, объявим ее как «a» и распечатаем.
а = 100 print (a)
Повторное объявление переменной
Вы можете повторно объявить переменные Python даже после того, как вы объявили их один раз.
Здесь у нас есть переменная объявления Python, инициализированная значением f = 0.
Позже мы повторно присвоим переменной f значение «guru99»
Python 2 Пример
# Объявить переменную и инициализировать ее f = 0 печать f # повторное объявление переменной работает f = 'guru99' print f
Python 3 Пример
# Объявить переменную и инициализировать ее f = 0 печать (е) # повторное объявление переменной работает f = 'guru99' print (f)
Python Конкатенация строк и переменная
Давайте посмотрим, можно ли объединить различные типы данных, такие как строка и число, вместе.Например, мы объединим «Гуру» с числом «99».
В отличие от Java, которая объединяет число со строкой без объявления числа как строки, в то время как объявление переменных в Python требует объявления числа как строки, в противном случае будет отображаться ошибка TypeError
Для следующего кода вы получите неопределенный вывод —
a = "Гуру" b = 99 напечатать a + b
После того, как целое число объявлено как строка, оно может объединить в выходных данных «Guru» + str («99») = «Guru99».
a = "Гуру" b = 99 print (a + str (b))
Типы переменных Python: локальные и глобальные
В Python есть два типа переменных: глобальная переменная и локальная переменная. Если вы хотите использовать одну и ту же переменную для остальной части вашей программы или модуля, вы объявляете ее как глобальную переменную, а если вы хотите использовать переменную в определенной функции или методе, вы используете локальную переменную при объявлении переменной Python.
Давайте разберемся с этими типами переменных Python с разницей между локальными и глобальными переменными в приведенной ниже программе.
- Давайте определим переменную в Python, где переменная «f» имеет глобальную в области видимости и ей присвоено значение 101, которое печатается на выходе
- Переменная f снова объявлена в функции и предполагает локальную область . Ему присваивается значение «Я изучаю Python». который распечатывается как результат. Эта объявленная переменная Python отличается от глобальной переменной «f», определенной ранее.
- После завершения вызова функции локальная переменная f уничтожается.В строке 12, когда мы снова печатаем значение «f», оно отображает значение глобальной переменной f = 101
Python 2 Пример
# Объявить переменную и инициализировать ее f = 101 печать f # Глобальные и локальные переменные в функциях def someFunction (): # глобальный f f = 'Я изучаю Python' печать f someFunction () print f
Python 3 Пример
# Объявить переменную и инициализировать ее f = 101 печать (е) # Global vs.локальные переменные в функциях def someFunction (): # глобальный f f = 'Я изучаю Python' печать (е) someFunction () print (f)
При объявлении переменной Python с использованием ключевого слова global, вы можете ссылаться на глобальную переменную внутри функции.
- Переменная «f» имеет глобальный в области видимости и ей присвоено значение 101, которое выводится на выходе
- Переменная f объявляется с использованием ключевого слова global . Это НЕ локальная переменная , а та же глобальная переменная, объявленная ранее.Следовательно, когда мы печатаем его значение, на выходе получаем 101
Мы изменили значение «f» внутри функции. После завершения вызова функции измененное значение переменной «f» сохраняется. В строке 12, когда мы снова печатаем значение «f», оно отображает значение «изменяющаяся глобальная переменная»
Python 2 Пример
f = 101; печать f # Глобальные и локальные переменные в функциях def someFunction (): глобальный f печать f f = "изменение глобальной переменной" someFunction () print f
Python 3 Пример
f = 101; печать (е) # Global vs.локальные переменные в функциях def someFunction (): глобальный f печать (е) f = "изменение глобальной переменной" someFunction () print (f)
Удалить переменную
Вы также можете удалить переменные Python с помощью команды del «имя переменной».
В приведенном ниже примере удаления переменной Python мы удалили переменную f, и когда мы продолжаем ее печатать, мы получаем ошибку « имя переменной не определено », что означает, что вы удалили переменную.
Пример переменной удаления Python или переменной удаления Python:
f = 11; печать (е) дель ф print (f)
Резюме:
Переменные Python и типы данных — полное руководство для начинающих
Бесплатный курс Python с 25 проектами в реальном времени Начните сейчас!
В этом руководстве по Python мы узнаем о переменных и типах данных Python, используемых в Python.
Мы также узнаем о преобразовании одного типа данных в другой в Python и локальных и глобальных переменных в Python.
Итак, начнем с Руководства по переменным и типам данных Python.
Что такое переменные Python?
Переменная — это контейнер для значения. Ему можно присвоить имя, вы можете использовать его для ссылки на него позже в программе.
На основе присвоенного значения интерпретатор определяет свой тип данных. Вы всегда можете сохранить в переменной другой тип.
Например, если вы сохраните 7 в переменной, позже вы можете сохранить «Динозавр».
1. Правила именования переменных Python
Существуют определенные правила, по которым вы можете назвать переменную (называемую идентификатором).
- Переменные Python могут начинаться только с буквы (A-Z / a-z) или символа подчеркивания (_).
>>> 9lives = 9
Выход
SyntaxError: недопустимый синтаксис
>>> flag = 0 >>> флаг
>>> _9lives = 'cat' >>> _9lives
Выходные данные
‘cat’
- Остальная часть идентификатора может содержать буквы (A-Z / a-z), подчеркивания (_) и цифры (0-9).
>>> year2 = 'Второкурсник' >>> year2
Выходные данные
‘Sophomore’
>>> _ $$ = 7
Выходные данные
SyntaxError: недопустимый синтаксис
- Python чувствителен к регистру, и поэтому — идентификаторы Python. Имя и имя — это два разных идентификатора.
>>> name = 'Ayushi' >>> имя
Выходные данные
‘Ayushi’
>>> Имя
Выходные данные
Отслеживание (последний звонок последний):
Файл «
Имя
NameError: имя «Имя» не определено
- Зарезервированные слова (ключевые слова) не могут использоваться в качестве имен идентификаторов.
и | def | False | import | not | True | |||||
as | del | наконец | или попробуйте
| или попробуйте
| ||||||
перерыв | еще | от | лямбда | печать | с | |||||
класс | yield | |||||||||
continue | exec | if | nonlocal | return |
2.Присвоение и переназначение переменных Python
Чтобы присвоить значение переменным Python, вам не нужно объявлять его тип.
Вы назначаете ему имя в соответствии с правилами, изложенными в разделе 2a, и вводите значение после знака равенства (=).
>>> возраст = 7 >>> print (возраст)
Вывод
7
>>> age = 'Dinosaur' >>> print (age)
Output
Dinosaur
Однако возраст = Dinosaur не имеет смысла.Кроме того, вы не можете использовать переменные Python до присвоения им значения.
>>> name
Output
Traceback (последний вызов последним):
Файл «
name
NameError: имя 'name' не определено
Однако вы не можете поместить идентификатор справа от знака равенства. Следующий код вызывает ошибку.
>>> 7 = age
Выходные данные
SyntaxError: невозможно присвоить литералу
Вы также не можете назначить переменные Python ключевому слову.
>>> False = выбор
Выходные данные
SyntaxError: невозможно присвоить ключевому слову
3. Множественное присвоение
Вы можете присвоить значения нескольким переменным Python в одном операторе.
>>> возраст, город = 21, 'Индор' >>> print (age, city)
Вывод
21 Indore
Или вы можете присвоить одно и то же значение нескольким переменным Python.
>>> возраст = fav = 7 >>> print (age, fav)
Вывод
7 7
Вот как вы присваиваете значения переменным Python
4.Обмен переменными
Обмен означает обмен значениями. Чтобы поменять местами переменные Python, вам не нужно много делать.
>>> a, b = 'красный', 'синий' >>> а, Ь = Ь, а >>> print (a, b)
Вывод
синий красный
5. Удаление переменных
Вы также можете удалить переменные Python, используя ключевое слово «del».
>>> a = 'красный' >>> дель а >>> a
Выходные данные
Отслеживание (последний вызов последний):
Файл «
a
NameError: name ' a 'не определено
Типы данных Python
Хотя нам не нужно объявлять тип для переменных Python, значение имеет тип.Эта информация жизненно важна для переводчика.
Python поддерживает следующие типы данных.
1. Числа Python
Существует четыре числовых типа данных Python.
а. int
int означает целое число. Этот тип данных Python содержит целые числа со знаком. Мы можем использовать функцию type (), чтобы определить, к какому классу он принадлежит.
>>> а = -7 >>> type (a)
Output
Целое число может иметь любую длину, единственное ограничение - доступная память.
>>> а = 9999999999999999999999999999999 >>> тип (a)
Выход
b. float
Этот тип данных Python содержит действительные значения с плавающей запятой. Int может хранить только число 3, но float может хранить 3,25, если хотите.
>>> а = 3,0 >>> тип (a)
Выход
<класс «float»>
c. long
Этот тип данных Python содержит длинное целое число неограниченной длины.Но этой конструкции нет в Python 3.x.
г. complex
Этот тип данных Python содержит комплексное число. Комплексное число выглядит так: a + bj Здесь a и b - действительные части числа, а j - мнимое.
>>> а = 2 + 3j >>> type (a)
Output
Используйте функцию isinstance (), чтобы определить принадлежность переменных Python к определенному классу. Он принимает два параметра - переменную / значение и класс.
>>> print (isinstance (a, complex))
Вывод
True
2. Строки
Строка - это последовательность символов. Python не имеет типа данных char, в отличие от C ++ или Java. Вы можете разделить строку одинарными или двойными кавычками.
>>> city = 'Ахмедабад' >>> город
Выход
«Ахмедабад»
>>> city = "Ahmedabad" >>> город
Выход
«Ахмедабад»
а.Распределение строки по строкам
Чтобы разбить строку на несколько строк, вы можете использовать тройные кавычки.
>>> var = "" "Если Только""" >>> var
Вывод
'If \ n \ tonly'
>>> print (var)
Вывод
Если
Только
>>> "" "Если только "" "
Выходные данные
« Если \ n \ tonly »
Как видите, кавычки сохранили форматирование (\ n - escape-последовательность для новой строки, \ t - для табуляции).
г. Отображение части строки
Вы можете отобразить символ из строки, используя его индекс в строке. Помните, индексирование начинается с 0.
>>> lesson = 'разочарование' >>> Урок [0]
Вывод
‘d’
Вы также можете отобразить серию символов в строке, используя оператор нарезки [].
>>> урок [5:10]
Вывод
«точка»
При этом печатаются символы от 5 до 9.
г. Средства форматирования строк
Средства форматирования строк позволяют нам одновременно печатать символы и значения. Вы можете использовать оператор%.
>>> х = 10; >>> принтер = "Dell" >>> print ("Я только что распечатал% s страниц на принтере% s"% (x, printer))
Или вы можете использовать метод форматирования.
>>> print ("Я только что распечатал {0} страниц на принтере {1}". Format (x, printer)) >>> print ("Я только что распечатал {x} страниц на принтере {принтере}".format (x = 7, printer = "Dell"))
Третий вариант - использовать f-строки.
>>> print (f "Я только что распечатал {x} страниц на принтере {printer}")
d. Объединение строк
Строки можно объединять (объединять).
>>> a = '10 ' >>> print (a + a)
Вывод
1010
Однако вы не можете объединить значения разных типов.
>>> print ('10' + 10)
Вывод
Отслеживание (последний вызов последним): Файл «
печать (’10’ + 10)
TypeError: должно быть str, а не int
3.Списки Python
Список - это набор значений. Помните, что он может содержать разные типы значений.
Чтобы определить список, вы должны заключить значения, разделенные запятыми, в квадратные скобки. Вам также не нужно объявлять тип для списка.
>>> days = ['понедельник', 'вторник', 3,4,5,6,7] >>> дней
Выходные данные
[«Понедельник», «Вторник», 3, 4, 5, 6, 7]
a. Нарезка списка
Вы можете нарезать список так же, как и строку, с помощью оператора нарезки.
>>> days [1: 3]
Выходные данные
[«Вторник», 3]
Индексирование для списка начинается с 0, как для строки. В Python нет массивов.
г. Длина списка
Python поддерживает встроенную функцию для вычисления длины списка.
>>> len (дни)
Выход
7
c. Переназначение элементов списка
Список изменяемый.Это означает, что вы можете переназначить элементы позже.
>>> days [2] = 'среда' >>> дни
Выходные данные
[«понедельник», «вторник», «среда», 4, 5, 6, 7]
d. Итерация по списку
Для итерации по списку мы можем использовать цикл for. Путем итерации мы можем получить доступ к каждому элементу один за другим, что очень полезно, когда нам нужно выполнить некоторые операции с каждым элементом списка.
число = [1,2,5,6,8] для n в числах: печать (п)
Выход
1
2
5
6
8
e.Многомерные списки
Список может иметь более одного измерения. Подробно об этом читайте в руководстве DataFlair по Python Lists .
>>> a = [[1,2,3], [4,5,6]] >>> a
Выходные данные
[[1, 2, 3], [4, 5, 6]]
4. Кортежи Python
Кортеж похож на список. Вместо этого вы объявляете это, используя круглые скобки.
>>> Subject = ('Физика', 'Химия', 'Математика') >>> предметы
Выходные данные
(«Физика», «Химия», «Математика»)
a.Доступ и нарезка кортежа
Вы получаете доступ к кортежу так же, как и к списку. То же самое и с нарезкой.
>>> предметы [1]
Вывод
«Химия»
>>> предметы [0: 2]
Вывод
(«Физика», «Химия»)
г. Кортеж неизменяем
Кортеж Python неизменен. После объявления вы не можете изменить его размер или элементы.
>>> subject [2] = 'Biology'
Выходные данные
Отслеживание (последний звонок последним):
Файл «
subject [2] = 'Biology'
TypeError: объект 'tuple' не поддерживает назначение элемента
>>> subject [3] = 'Computer Science'
Output
Traceback (последний вызов последним):
Файл «
subject [3] = «Компьютерные науки»
TypeError: объект 'tuple' не поддерживает назначение элементов
5.Словари
Словарь содержит пары ключ-значение. Объявите его в фигурных скобках, разделив пары запятыми. Разделите ключи и значения двоеточием (:).
>>> person = {'city': 'Ahmedabad', 'age': 7} >>> person
Вывод
{‘city’: ‘Ahmedabad’, ‘age’: 7}
Функция type () работает и со словарями.
>>> тип (лицо)
Выход
a.Доступ к значению
Чтобы получить доступ к значению, вы указываете ключ в квадратных скобках.
>>> человек ['город']
Выход
«Ахмедабад»
b. Переназначение элементов
Вы можете переназначить значение ключу.
>>> человек ['age'] = 21 >>> человек ['возраст']
Выход
21
c. Список ключей
Используйте функцию keys (), чтобы получить список ключей в словаре.
>>> person.keys ()
Выходные данные
dict_keys ([‘city’, ‘age’])
6. bool
Логическое значение может быть True или False.
>>> а = 2> 1 >>> type (a)
Output
7. Наборы
Набор может иметь список значений. Обозначьте его фигурными скобками.
>>> a = {1,2,3} >>> a
Выходные данные
{1, 2, 3}
Возвращает только один экземпляр любого значения, присутствующего более одного раза.
>>> a = {1,2,2,3} >>> a
Выходные данные
{1, 2, 3}
Однако набор неупорядочен, поэтому он не поддерживает индексацию.
>>> a [2]
Выходные данные
Отслеживание (последний вызов последним):
Файл «
a [2 ]
TypeError: объект 'set' не поддерживает индексацию
Кроме того, он изменяемый.Вы можете изменить его элементы или добавить больше. Для этого используйте методы add () и remove ().
>>> a = {1,2,3,4} >>> a
Выход
{1, 2, 3, 4}
>>> a.remove (4) >>> a
Выход
{1, 2, 3}
>>> a.add (4) >>> a
Выходные данные
{1, 2, 3, 4}
Преобразование типов
Так как Python имеет динамическую типизацию, вы можете захотеть преобразовать значение в другой тип.Python поддерживает список функций для тех же.
1. int ()
Преобразует значение в int.
>>> int (3.7)
Выходные данные
3
Обратите внимание, как оно усекло 0,7 вместо округления числа до 4. Вы также можете превратить логическое значение в int.
>>> int (True)
Выход
1
>>> int (False)
Однако вы не можете превратить строку в int.Выдает ошибку.
>>> int ("a")
Выходные данные
Отслеживание (последний вызов последним):
Файл «
int («a»)
ValueError: недопустимый литерал для int () с основанием 10: «a»
Однако, если строка содержит только числа, вы можете.
>>> int ("77")
Выход
77
2.float ()
Преобразует значение в число с плавающей запятой.
>>> float (7)
Выход
7,0
>>> float (7.7)
Выход
7,7
>>> float (True)
Выходные данные
>>> float ("11")
Выходные данные
11.0
Вы также можете использовать 'e' для обозначения экспоненциального числа.
>>> float ("2.1e-2")
Выход
0,021
>>> float (2.1e-2)
Выход
0,021
Однако, это число работает даже без функции float ().
>>> 2.1e-2
Выходные данные
0,021
3. str ()
Преобразует значение в строку.
>>> str (2.1)
Выход
‘2.1 '
>>> str (7)
Выход
' 7 '
>>> str (True)
Выход
' True '
Вы также можете преобразовать список, кортеж, набор или словарь в строку.
>>> str ([1,2,3])
Вывод
‘[1, 2, 3]’
4. bool ()
Преобразует значение в логическое значение.
>>> bool (3)
Выход
True
>>> bool (0)
Выход
False
>>> bool (True)
Выход
True
>>> bool (0.1)
Вывод
True
Список можно преобразовать в логическое значение.
>>> bool ([1,2])
Выходные данные
True
Функция возвращает False для пустых конструкций.
>>> bool ()
Выход
Ложь
>>> bool ([])
Выход
Ложь
>>> bool ({})
Выходные данные
False
None - ключевое слово в Python, которое означает отсутствие значения.
>>> bool (Нет)
Выходные данные
Ложь
5. set ()
Преобразует значение в набор.
>>> set ([1,2,2,3])
Выход
{1, 2, 3}
>>> set ({1,2,2,3})
Вывод
{1, 2, 3}
6. list ()
Преобразует значение в список.
>>> del list >>> list ("123")
Вывод
['1', '2', '3']
>>> list ({1,2,2,3})
Выходные данные
[1, 2, 3]
>>> list ({"a": 1, "b": 2})
Выходные данные
['a', 'b ']
Однако следующее вызывает ошибку.
>>> list ({a: 1, b: 2})
Вывод
Отслеживание (последний вызов последним):
Файл «
список ({a: 1, b: 2})
TypeError: unhashable type: ‘set’
7. tuple ()
Преобразует значение в кортеж.
>>> кортеж ({1,2,2,3})
Вывод
(1, 2, 3)
Вы можете попробовать свои собственные комбинации.Также попробуйте составные функции.
>>> tuple (list (set ([1,2])))
Выходные данные
(1, 2)
Локальные и глобальные переменные Python
Другая классификация переменных Python основана на объем.
1. Локальные переменные Python
Когда вы объявляете переменную в функции, классе и т. Д., Она видна только в этой области. Если вы вызовете его за пределами этой области, вы получите ошибку «undefined».
>>> def func1 (): uvw = 2 печать (увв) >>> func1 ()
Выходные данные
2
>>> uvw
Выходные данные
Traceback (последний вызов последнего):
Файл «
uvw
NameError: имя 'uvw' не определено [/ php]
Здесь переменная uvw является локальной для функции func1 ().
2. Глобальные переменные
Когда вы объявляете переменную вне любого контекста / области видимости, она видна во всей программе.
>>> xyz = 3 >>> def func2 (): xyz = 0 xyz + = 1 печать (xyz) >>> func2 ()
Выходные данные
1
>>> xyz
Выходные данные
3
Вы можете использовать ключевое слово global, если вы хотите обрабатывать переменную как глобальный в локальной области.
>>> foo = 1 >>> def func2 (): глобальный фу foo = 3 печать (foo) >>> func2 ()
Выходные данные
3
>>> foo
Выходные данные
3
Часто задаваемые вопросы собеседования по Python по переменным и типам данных Python?
- Что такое переменные и типы данных в Python?
- Что такое type () в Python?
- Что такое локальные и глобальные переменные в Python?
- Объясните различные правила именования переменных Python.