Я хотел бы получить совет по моей проблеме с приведенным ниже кодом. Я объявил несколько глобальных переменных (таких как shelfDim
, a
, b
, c
, d
, productList
). Эти глобальные переменные затем использовались в качестве аргументов по умолчанию в моих 2 функциях (packByLength
, packByWidth
).
Как часть функции packByWidth()
, некоторые аргументы были изменены. Например, я создал новый список newDim
, который в основном является копией productList
. Затем функция изменяет этот список, меняя местами несколько элементов. Проблема в том, что мои глобальные переменные меняются в результате выполнения этой функции. Следовательно, вызов packByWidth()
один раз дает правильный ответ, но повторный вызов дает мне неправильный ответ (поскольку глобальные переменные изменились при первом вызове).
Я знаю, что для Python, когда
a=[1,2,3]
b=a
b[0]=2
и a
и b
будут изменены на [2,2,3]
. Однако я не ожидал, что это произойдет, поскольку мои операции со списками содержались внутри функции.
Может кто-нибудь сказать мне, что вызывает такое поведение, и что можно сделать, чтобы этого не произошло? Я бы хотел, чтобы мои глобальные переменные оставались неизменными независимо от того, сколько раз я запускаю свои функции!
Постскриптум Я пытался использовать кортежи в моих глобальных переменных, но это не помогло. Спасибо!
import numpy as np
# Parameters
shelfDim = [100, 120, 150]
a = [15, 4, 30]
b = [11, 8, 12]
c = [5, 3.5, 18]
d = [23, 6.8, 10]
productList = [a, b, c, d]
# 1 All products to be aligned length-wise (assuming product must be placed upright)
def packByLength(products = productList, shelfDim = shelfDim):
usableProdSpace =list(shelfDim)
usableProdSpace[0] = usableProdSpace[0]/len(products)
totalQty = []
for product in products:
packableQty = []
for dim in range(3):
packableQty.append(usableProdSpace[dim]//product[dim])
totalQty.append(packableQty)
return totalQty
# 2 All products to be aligned width-wise (assuming product must be placed upright)
def packByWidth(products = productList, shelfDim = shelfDim):
swap = None
newDim = list(products)
for product in newDim:
swap = product[0]
product[0] = product[1]
product[1] = swap
print ('products', products)
print ('newDim', newDim)
totalQty = packByLength(products = newDim)
return totalQty