Надеюсь, это показывает, что я имею в виду с массивом numpy (происходит то же самое) при этом список Python изменяется посредством понимания, а не цикла для каждого элемента):
Код: Выделить всё
import numpy as np
def inc_elements(my_array):
for i in range(len(my_array)):
my_array[i] = my_array[i] + 1.0
# same effect as: my_array[i] += 1.0
return my_array
def inc_array(my_array):
my_array = np.add(my_array, np.full_like(my_array, 1.0))
# same effect as: my_array = my_array + np.full_like(my_array, 1.0)
# and: my_array = my_array + 1.0
# but NOT: my_array += 1.0
return my_array
def del_element(my_array):
my_array = np.delete(my_array, [0,])
return my_array
functions = [inc_elements, inc_array, del_element]
for func in functions:
old_array = np.array([0., 1., 2.])
print(f'old_array = {old_array}, {type(old_array)}')
new_array = func(old_array)
print(f'after {func.__name__}:')
print(f'new array = {new_array}, {type(new_array)}')
print(f'old_array = {old_array}, {type(old_array)}\n')
del old_array, new_array
после inc_elements:
новый массив = [1. 2. 3.],
old_array = [1. 2. 3.],
old_array = [0. 1. 2.],
после inc_array:
новый массив = [1. 2. 3.],
old_array = [0. 1. 2.],
old_array = [0. 1. 2.],
после del_element:
новый массив = [1. 2.],
old_array = [0. 1. 2.],
Похоже, что элементы массива аргументов изменяемы, поэтому, если я изменяю их по одному с помощью inc_elements, значения также изменяются в аргументе моей функции, но сам массив не (?), поэтому, если я использую функцию numpy для изменения всего массива в inc_array или < em>del_element (даже если он изменяет только элементы массива), он не меняет аргумент моей функции. Это вообще правда? Я хотел бы понять, потому что у меня будут случаи, когда я передаю подмассив или даже один элемент массива в функцию, и я также хотел бы знать, применимо ли то же самое ко всем другим функциям numpy, например. заменить:
Код: Выделить всё
my_array = np.add(my_array, np.full_like(my_array, 1.0))
Код: Выделить всё
my_array = np.sqrt(my_array)
Может ли кто-нибудь порекомендовать достойный учебник (или ссылку), который может подробно объяснить, как аргументы массива и списка передаются в функции Python?
Большое спасибо.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -arguments
Мобильная версия