Найти - Пользователи
Полная версия: Python 2.6.3 Не могу понять в каком виде функция возвращает значение
Начало » Python для новичков » Python 2.6.3 Не могу понять в каком виде функция возвращает значение
1
rudm
код
# -*- 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()
но результат неудовлетворительный.
JOHN_16
функция 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
rudm
Большое спасибо, сейчас вижу, что действительно, я в цикле получаю каждый раз новое значение при вызове функции - классическая ошибка.
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