Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 19, 2012 22:41:37

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу понять в каком виде функция возвращает значение

код

# -*- coding: cp1251 -*-
import random #Подключаем генератор псевдослучайных чисел
keys_list = ['n', 'g'] #Простой массив с обозначением ключей

def some_function_one():
temp_var = random.choice(keys_list) #Выбираем любое обозначение из массива
return temp_var #Возвращаем

print 'Chosen key is', some_function_one()

features_list = [('feat one', 3, 'n'), ('feat two', 2, 'g'), #Массив с ключами
('feat four', 1, 'g'), ('feat five', 1, 'n'), #удельными значениями
('feat six', 0, 'n')] #и флагами

def some_function_two():
counter = len(features_list) #Счетчик равный длине массива с кортежами
while counter > 0: #Сравниваем и удаляем совпадения

if features_list[counter - 1][2] == some_function_one():
del features_list[counter - 1]
counter = counter - 1

some_function_two()
print 'features list after removing some keys', features_list
Выводит массив после отфильтровки которого в списке остаются как элементы с флагом ‘n’, так и с флагом ‘g’
Chosen key is g
features list after removing some keys [('feat one', 3, 'n'), ('feat four', 1, 'g'), ('feat five', 1, 'n')]
>>>

Если же просто в условии заменить значение возвращаемое функцией на строковую переменную
# -*- coding: cp1251 -*-
import random #Подключаем генератор псевдослучайных чисел
keys_list = ['n', 'g'] #Простой массив с обозначением ключей

def some_function_one():
temp_var = random.choice(keys_list) #Выбираем любое обозначение из массива
return temp_var #Возвращаем

#print 'Chosen key is', some_function_one()

features_list = [('feat one', 3, 'n'), ('feat two', 2, 'g'), #Массив с ключами
('feat four', 1, 'g'), ('feat five', 1, 'n'), #удельными значениями
('feat six', 0, 'n')] #и флагами

def some_function_two():
counter = len(features_list) #Счетчик равный длине массива с кортежами
while counter > 0: #Сравниваем и удаляем совпадения

if features_list[counter - 1][2] == 'n': #some_function_one():
del features_list[counter - 1]
counter = counter - 1

some_function_two()
print 'Chosen key is n'
print 'features list after removing some keys', features_list
то код работает правильно
Chosen key is n
features list after removing some keys [('feat two', 2, 'g'), ('feat four', 1, 'g')]

Пробовал приводить результаты выдаваемые функцией к строковому виду, с помощью функции repr()
но результат неудовлетворительный.



Офлайн

#2 Дек. 19, 2012 23:08:37

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу понять в каком виде функция возвращает значение

функция some_function_one(): каждый раз возвращает случайное значение из заданного массива, а вы им в цикле пользуетесь - вот и причина.
Вот исправленный код - но и он не красота (имхо конечно же)

# -*- coding: cp1251 -*-
import random      
# исходные данные            
keys_list = ['n', 'g']      
features_list = [('feat one', 3, 'n'), ('feat two', 2, 'g'), 
              ('feat four', 1, 'g'), ('feat five', 1, 'n'),  
              ('feat six', 0, 'n')]   
       
target=random.choice(keys_list) 
print 'Chosen key is', target
def some_function_two():
    counter = len(features_list)    
    while counter > 0:              
        if features_list[counter - 1][2] == target:
            del features_list[counter - 1]
        counter = counter - 1
some_function_two()
print 'features list after removing some keys', features_list



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 20, 2012 08:38:24

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу понять в каком виде функция возвращает значение

Большое спасибо, сейчас вижу, что действительно, я в цикле получаю каждый раз новое значение при вызове функции - классическая ошибка.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version