python функция подкачки без оператора возврата - PullRequest
0 голосов
/ 05 мая 2020
def swapPositions(list, pos1, pos2):
    list[pos1], list[pos2] = list[pos2], list[pos1]
    return list

seq=['abd','dfs','sdfs','fds','fsd','fsd']
print(swapPositions(seq,2,3))

Можем ли мы сделать это без оператора return?

Ответы [ 2 ]

1 голос
/ 05 мая 2020
Объект

list в python является изменяемым объектом , что означает, что он передается в функции по ссылке, а не по значению. Итак, вы уже меняете seq на месте, и оператор return не нужен.

def swapPositions(list, pos1, pos2):
    list[pos1], list[pos2] = list[pos2], list[pos1]


seq=['abd','dfs','sdfs','fds','fsd','fsd']
swapPositions(seq,2,3)
print(seq)
# returns ['abd', 'dfs', 'fds', 'sdfs', 'fsd', 'fsd']
0 голосов
/ 05 мая 2020

Python функции обычно следуют двум соглашениям:

  1. Возвращает новый объект, оставляя аргумент без изменений.
  2. Измените аргумент на месте, и return None.

Ваша функция выполняет последнее и должна опускать оператор return.

>>> x = [1, 2, 3, 4]
>>> swapPositions(x, 2, 3)
>>> x
[1, 2, 4, 3]

Если вы выберете первое, x должно быть остался один

def swapPositions(L, pos1, pos2):
    L = L.copy()
    L[pos1], L[pos2] = L[pos2], L[pos1]
    return L

>>> x = [1, 2, 3, 4]
>>> swapPositions(list, 2, 3)
[1, 2, 4, 3]
>>> x
[1, 2, 3, 4]
...