Найти - Пользователи
Полная версия: передача целых по ссылке
Начало » Python для новичков » передача целых по ссылке
1
demas
Можно ли передать целые числа в функцию по ссылке? И как вообще, с точки зрения Python, правильнее реализовать процедуру swap?
Что-то типа:

def swap(a, b):
c = a
a = b
b = c
Александр Кошелев
Например так:
>>> def swap(a, b):
... return b, a

>>> a, b = 5, 7
>>> a, b = swap(a,b)
>>> a, b
(7, 5)
crchemist
demas
Можно ли передать целые числа в функцию по ссылке?
>>> a = 10; b = 10;
>>> id(a) == id(b)
True
але для малих чисел -5..260 здається

И как вообще, с точки зрения Python, правильнее реализовать процедуру swap?
для чого процедура?
>>> a = 15; b = 20
>>> a, b = b, a
>>> a, b
(20, 15)
doza_and
например хочу управлять генератором
def g(n,i):
k=0
while k<n:
k+=i
yield k
delta=1
for i in g(5,delta):
if i>4:
delta=2
print i
Если delta элемент класса то можно а если целое то как?
можно конечно ctypes использовать но это ведь тоже класс будет.
Ed
Управлять генератором можно, послав ему вашу delta, используя метод генератора send.
А какое это имеет отношение к этой теме?
doza_and
Если бы можно было передать ссылку на целое тогда в этом примере из внешнего цикла мы ЛЕГКО управляли-бы шагом внутреннего. Альтернатива - завернуть целое значение в класс или сделать его глобальным. Использование ссылки на целое в данном случае приводит к простому и понятному коду (как мне кажется). Вместо декларации об использовании send было-бы интересно посмотреть как вы это сделаете. Он ведь не только передает значение но одновременно возвращает управление генератору. Лобовая реализация приведет к выпадению одного значения (или всех если использовать как показано выше :))
Вместо 1 2 4 6 8 10 получим 1 2 6 8 10 причем при более сложном коде
def error_g(n):
k=0
delta=1
while k<n:
k+=delta
delta1=(yield k)
if delta1:
delta=delta1
it=error_g(10)
for i in it:
if i==2:
it.send(2)
print i
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB