Я создал обобщенную c функцию для создания 2D-сетки размером x, y, make_grid
.
def make_grid(x, y, mode="empty"):
if mode == "rand":
def filling():
return randint(0, 1)
else:
def filling():
return 0
grid = []
for r in range(x):
row = []
for c in range(y):
row.append(filling())
grid.append(row)
return grid
. Я настроил ее для определения функции filling
. основанный на вводе mode
, чтобы я не запустил кучу if
проверок без необходимости через циклы for - надежда на то, что на большой сетке это сэкономит значительное время.
Я не уверен, однако, что это был бы самый Pythoni c способ достижения этого - не совсем понятно определять функции внутри функций таким способом. Кто-нибудь может предложить лучшие (более четкие или более эффективные) методы? Я чувствую, что лямбды могут быть верным путем, но я никогда не чувствовал себя комфортно с ними ... Я должен, по крайней мере, быть в состоянии определить функции в другом месте, выбрать, какую из них следует вызывать перед для l oop, а затем используйте его во время цикла for, верно?
Редактировать: вот более минимальный пример, так как я сначала был позорно ленивым и не удосужился сделать правильный… (я оставив оригинал, чтобы ответы все еще имели смысл.)
def example(mode=0):
if mode == 1:
def action_to_take():
print("mode1")
else:
def action_to_take():
print("mode_other")
for r in range(1000):
for c in range(1000):
action_to_take()
Представьте себе, что условно определенная функция action_to_take
достаточно сложна, чтобы ответить на этот вопрос, и l oop обходится достаточно раз, чтобы ставить под сомнение эффективность кода разумно.