Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2008 19:04:39

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

передача целых по ссылке

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

def swap(a, b):
c = a
a = b
b = c



Офлайн

#2 Сен. 14, 2008 19:26:25

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

передача целых по ссылке

Например так:

>>> def swap(a, b):
... return b, a

>>> a, b = 5, 7
>>> a, b = swap(a,b)
>>> a, b
(7, 5)



Офлайн

#3 Сен. 14, 2008 19:40:53

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

передача целых по ссылке

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)



Отредактировано (Сен. 14, 2008 19:53:56)

Офлайн

#4 Авг. 15, 2010 21:15:28

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

передача целых по ссылке

например хочу управлять генератором

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 использовать но это ведь тоже класс будет.



Отредактировано (Сен. 25, 2010 16:28:19)

Офлайн

#5 Авг. 16, 2010 01:24:58

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

передача целых по ссылке

Управлять генератором можно, послав ему вашу delta, используя метод генератора send.
А какое это имеет отношение к этой теме?



Офлайн

#6 Сен. 25, 2010 16:24:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

передача целых по ссылке

Если бы можно было передать ссылку на целое тогда в этом примере из внешнего цикла мы ЛЕГКО управляли-бы шагом внутреннего. Альтернатива - завернуть целое значение в класс или сделать его глобальным. Использование ссылки на целое в данном случае приводит к простому и понятному коду (как мне кажется). Вместо декларации об использовании 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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version