#python #c #arrays #typedef
#python #c #массивы #typedef
Вопрос:
В C можно создать typedef для 1D, 2D массивов, а затем использовать их для объявления переменных.
typedef char my2DDataArr[2][2];
typedef int my1DDataArr[10];
my2DDataArr arr2d_1= {{0,1},{2,3}};
my1DDataArr arr1d_1 = {1,2,3,4,5,6,7,8,9,10};
Как я могу выполнить подобное в Python?
Комментарии:
1. Вам вообще не нужно объявлять типы переменных в Python.
Ответ №1:
Python сильно, но динамически типизирован. Это означает, что вам не нужно сообщать компилятору, какого типа будет переменная — в основном потому, что код python не компилируется.
Итак, очевидно, что вы могли бы просто сделать что-то вроде:
my_list = [] # List that can contain other lists, could be 1D or nD
initialized_list = [[1, 2], [2, 4]]
Теперь, как я уже писал, список может содержать другие списки. Некоторым людям не нравится неопределенность и отсутствие удобочитаемости, когда вы не определяете тип переменной. Для этого у вас есть два разных решения:
import numpy as np
my_array = np.ndarray((2, 2)) # 2D Array
initialized_array = np.array([[1, 2], [2, 4]])
Теперь это обозначение должно выглядеть для вас более знакомым, поскольку это 2-мерный массив. В отличие от списка, он может и будет иметь только 2 измерения, всего 4 элемента (2×2). Если вы не заботитесь о неизменяемости массива и / или хотите изменчивости, вы можете просто использовать подсказки типа:
from typing import List
my_list: List[List[int]]
my_list = []
В таком написании говорится, что это список, который будет содержать списки целых чисел. Размер по-прежнему не ограничен, но интеллектуальная среда разработки выдаст вам предупреждения, если вы начнете добавлять в него что-то еще или сделаете его трехмерным.
Комментарии:
1. Вероятно, стоит отметить, что подсказки типа — это просто подсказки для IDE, а не принудительное исполнение интерпретатором
Ответ №2:
Эквивалент Python будет
arr2d_1 = [[0,1],[2,3]]
arr1d_1 = [1,2,3,4,5,6,7,8,9,10]
Там нет typedef и нет необходимости указывать тип переменной. Самое большее, что вы могли бы сделать:
arr2d_1:list = [[0,1],[2,3]]
arr1d_1:list = [1,2,3,4,5,6,7,8,9,10]
Но даже тогда :list
часть называется подсказкой типа, которая поможет некоторым IDE в рефакторинге, это не является строгим требованием для интерпретатора.