Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2011 16:13:53

BIA
От:
Зарегистрирован: 2011-08-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

возврат данных из рекурсивной функции

Здравствуйте уважаемые.

Помогите разобраться с поведением функции, а точнее с результатом который она должна вернуть.(возвращается объект None)

#! /usr/bin/python
# -*- coding: utf-8 -*-

import os, sys

#def prefix(name, d):
def prefix(name):
"""
возвращается имя файла с добавлением
префикса вида: name_file.XXX
"""
if os.path.exists(name):
if name.split('.')[-1].isdigit():
print '%s is digit'%name.split('.')[-1]
name='.'.join(['.'.join(name.split('.')[:-1]), str(int(name.split('.')[-1])+1)])
print 'new name is %s'%name
#prefix(name, d)
prefix(name)
else:
print '%s is string'%name.split('.')[-1]
#prefix(name+'.0', d)
prefix(name+'.0')
else:
print '%s name not exists'%name
print 'type is %s'%type(name)
#d['res']=name
return name # 1) возвращает объект типа None
#return name # 2) возвращает первоначальное значение name
#return d['res']

d={}
name=sys.argv[1]
#new_name=prefix(name, d)
new_name=prefix(name)
print new_name
print d
Пример вывода для случая 1)

&> python file_prefix.py task1

task1 is string

task1.0 name not exists
type is <type ‘str’>
None
{'res': ‘task1.0’}

Пример вывода для случая 2)

&> python file_prefix.py task1

task1 is string

task1.0 name not exists
type is <type ‘str’>
task1
{'res': ‘task1.0’}



В общем ожидал на выходе из функции новое имя файла с добавлением префикса(в случае если и префикс есть то инкремент префикса) - а получаю либо объект None либо входное имя.
Подскажите что происходит?

Решить проблему получилось введением в функцию глобальной переменной или добавлением в аргументы функции словаря - но это какие то лишние телодвижения.



Офлайн

#2 Авг. 30, 2011 17:04:12

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

возврат данных из рекурсивной функции

Замените везде вызов prefix(…) на return prefix(…)



Офлайн

#3 Сен. 1, 2011 10:05:00

BIA
От:
Зарегистрирован: 2011-08-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

возврат данных из рекурсивной функции

как все просто) Спасибо!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version