Вы можете выполнить транспонирование , за которым следует свопакс :
import numpy as np
movies = np.zeros((10, 250, 100))
print(movies.shape)
print(np.swapaxes(movies.T, 0, 1).shape)
Выход
(10, 250, 100)
(250, 100, 10)
Почему не просто делают это:
var = None
Python является динамичным, таким образом, Вы не должны объявлять вещи; они существуют автоматически в первом объеме, где им присваивают. Так, все, в чем Вы нуждаетесь, является регулярным старым оператором присваивания как выше.
Это хорошо, потому что Вы никогда не будете заканчивать с неинициализированной переменной. Но будьте осторожны - это не означает, что Вы не закончите с неправильно инициализированные переменные. Если Вы init что-то к None
, удостоверьтесь, что это - то, что Вы действительно хотите и присваиваете что-то более значимое, если Вы можете.
Я сердечно рекомендовал бы читать , Другие языки имеют "переменные" (я добавил его как ссылку по теме), †“за две минуты, Вы будете знать, что Python имеет "имена", не "переменные".
val = None
# ...
if val is None:
val = any_object
Я не уверен, что Вы пытаетесь сделать. Python является очень динамическим языком; Вы не должны обычно объявлять переменные, пока Вы на самом деле не собираетесь присвоиться к или использовать их. Я думаю, что Вы хотите сделать, всего
foo = None
, который присвоит значение None
переменной foo
.
РЕДАКТИРОВАНИЕ: То, что Вы действительно , кажется, хотите сделать, является просто этим:
#note how I don't do *anything* with value here
#we can just start using it right inside the loop
for index in sequence:
if conditionMet:
value = index
break
try:
doSomething(value)
except NameError:
print "Didn't find anything"
немного трудно сказать, действительно ли это - правильный стиль для использования от такого примера короткого кода, но это больше способа "Pythonic" работать.
РЕДАКТИРОВАНИЕ: ниже комментарий JFS (отправленный здесь для показа кода)
for item in sequence:
if some_condition(item):
found = True
break
else: # no break or len(sequence) == 0
found = False
if found:
do_something(item)
ПРИМЕЧАНИЕ: если some_condition()
повышения исключение тогда found
развязано.
ПРИМЕЧАНИЕ: если len (последовательность) == 0 тогда item
развязан.
вышеупомянутый код не желателен. Ее цель состоит в том, чтобы проиллюстрировать, как локальные переменные работают, а именно, "определяется" ли "переменная", мог бы быть определен только во времени выполнения в этом случае. Предпочтительный путь:
for item in sequence:
if some_condition(item):
do_something(item)
break
Или
found = False
for item in sequence:
if some_condition(item):
found = True
break
if found:
do_something(item)
Я обычно инициализирую переменную к чему-то, что обозначает тип как
var = ""
или
var = 0
, Если это будет объектом, тогда не инициализируют его, пока Вы не инстанцируете его:
var = Var()
В первую очередь, мой ответ на вопрос Вы первоначально спросили
Q: Как я обнаруживаю, определяется ли переменная в точке в моем коде?
А: Читайте в исходном файле, пока Вы не видите строку, где та переменная определяется.
, Но далее, Вы дали пример кода, что существуют различные перестановки этого, вполне pythonic. Вы после способа просканировать последовательность для элементов, которые соответствуют условию, таким образом, вот некоторые решения:
def findFirstMatch(sequence):
for value in sequence:
if matchCondition(value):
return value
raise LookupError("Could not find match in sequence")
Очевидно в этом примере Вы могли заменить raise
return None
в зависимости от того, чего Вы хотели достигнуть.
, Если Вы хотели все, что соответствовало условию, Вы могли сделать это:
def findAllMatches(sequence):
matches = []
for value in sequence:
if matchCondition(value):
matches.append(value)
return matches
существует другой способ сделать это с yield
, что я не потружусь показывать Вам, потому что он является вполне сложным в способе, которым он работает.
Далее, существует одна строка способ достигнуть этого:
all_matches = [value for value in sequence if matchCondition(value)]
Если я понимаю Ваше право в качестве примера, Вы не должны относиться для 'оценивания' в если оператор так или иначе. Вы убегаете из цикла, как только он мог быть установлен на что-либо.
value = None
for index in sequence:
doSomethingHere
if conditionMet:
value = index
break
Вы похожи, Вы пытаетесь записать C в Python. Если Вы хотите найти что-то в последовательности, Python имеет встроенные функции, чтобы сделать это, как
value = sequence.index(blarg)
Это возможный объявить переменную в Python (var=None):
def decl_var(var=None):
if var is None:
var = []
var.append(1)
return var
Что ж, если вы хотите проверить, определена ли переменная или нет, то почему бы не проверить, есть ли она в массивах locals () или globals ()? Ваш код переписан:
for index in sequence:
if 'value' not in globals() and conditionMet:
value = index
break
Если вы ищете локальную переменную, замените globals () на locals ().