Изменение Python с помощью импортированной функции - PullRequest
2 голосов
/ 25 января 2012

Я пытаюсь создать функцию, которая при импорте и последующем вызове проверяет и изменяет кортеж. Я хотел бы иметь возможность назвать это несколько раз. Однако у меня просто есть функция, возвращающая новую переменную, потому что я не могу найти способ изменить переменную на месте.

Вот мои примеры с двумя файлами, как я бы хотел, чтобы это работало:

**modifier.py**
import variable

def function(new_string):
    if new_string not in variable.tuple:
        variable.tuple = new_string, + variable.tuple

**variable.py**
import modifier

tuple = ('one','two',)

modifier.function('add this')

modifier.function('now this')

#--> tuple should now equal ('now this', 'add this', 'one', 'two',)

Однако сейчас я должен сделать это:

**modifier.py**    
def function(tuple_old, new_string):
    if new_string not in tuple_old:
        return new_string, + tuple_old

**variable.py**
import modifier

tuple = ('one','two',)

tuple = modifier.function(tuple, 'add this')

tuple = modifier.function(tuple, 'now this')

#--> tuple now equals ('now this', 'add this', 'one', 'two',)

Это намного грязнее. Прежде всего, я должен передать старое значение кортежа и получить возвращаемое значение вместо прямой замены кортежа. Это работает, но это не СУХОЙ, и я знаю, что должен быть способ сделать это чище.


Я не могу использовать списки, потому что на самом деле это функция обновления моего промежуточного программного обеспечения в моем файле настроек django. Также у меня нет , чтобы иметь функцию для другого файла, но я также думаю, что это должно быть возможно.

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Я не вижу ничего плохого в том, что вы делаете сейчас (последний блок кода), это понятно.Если я вижу что-то вроде:

tuple = # something ...

Я знаю, что кортеж изменен (возможно, это просто имя, которое вы использовали в примере, но не называйте свою переменную «кортеж»).

Но если я увижу это (что вы хотели бы сделать):

tuple = 'one', two'
function('add this')

Я бы никогда не подумал, что function изменило значение tuple.В любом случае, это можно сделать с помощью:

tuple = 'one', 'two'

def function(string):
    global tuple
    if new_string not in tuple:
        tuple = (new_string,) + tuple

function('add this')

Также можно сделать что-то подобное:

tuple = 'one', two'
function(tuple, 'add this')

Я бы сказал, что это немного лучше, потому что если бы я использовал ваш кодимея проблемы, я могу догадаться, что function делает что-то для кортежа.

И код будет:

tuple = 'one', 'two'

def function(old_tuple, string):
    global tuple
    if new_string not in old_tuple:
        tuple = (new_string,) + old_tuple

function(tuple, 'add this')

В конце я бы сказал, что выделать прямо сейчас понятно и проще, я бы не стал его менять.

1 голос
/ 25 января 2012

Это похоже на работу:

def function(new_string):
if new_string not in variable.tuple:
    variable.tuple = (new_string,) + variable.tuple
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...