Как я передаю много переменных к и от функции в Python?

Вы можете использовать:

  • String.TrimStart - Удаляет все начальные вхождения набора символов, указанных в массиве, из текущего объекта String.
  • String.TrimEnd - Удаляет все концевые вхождения набора символов, указанных в массиве, из текущего объекта String.
  • String.Trim - комбинация двух вышеуказанных функций

Использование:

string txt = "                   i am a string                                    ";
char[] charsToTrim = { ' ' };    
txt = txt.Trim(charsToTrim)); // txt = "i am a string"

РЕДАКТИРОВАТЬ:

txt = txt.Replace(" ", ""); // txt = "iamastring"   

5
задан Curt 28 May 2009 в 14:29
поделиться

6 ответов

Самым простым способом было бы создать класс. Вместо того, чтобы иметь дело со списком переменных, у класса будут атрибуты. Затем вы просто используете единственный экземпляр класса.

16
ответ дан 18 December 2019 в 05:55
поделиться

На ум приходят два достойных варианта.

Первый - использовать словарь для сбора всех переменных в одном месте:

d = {}
d['var1'] = [1,2,3]
d['var2'] = 'asdf'
foo(d)

Второй - использовать класс для связать все аргументы. Это может быть что-то простое, например:

class Foo(object):
    pass
f = Foo()
f.var1 = [1,2,3]
f.var2 = 'asdf'
foo(f)

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

9
ответ дан 18 December 2019 в 05:55
поделиться

Для меня идеальным решением является использование такого класса:

>>> class Vars(object):
...     def __init__(self, **argd):
...             self.__dict__.update(argd)
...
>>> x = Vars(x=1, y=2)
>>> x.x
1
>>> x.y
2

Вы также можете создать словарь и передать его следующим образом:

>>> some_dict = {'x' : 1, 'y' : 2}
>>> #the two stars below mean to pass the dict as keyword arguments
>>> x = Vars(**some_dict)  
>>> x.x
1
>>> x.y
2

Затем вы можете получить данные или изменить их по мере необходимости при передаче его в функцию:

>>> def foo(some_vars):
...     some_vars.z = 3 #note that we're creating the member z
...
>>> foo(x)
>>> x.z
3
2
ответ дан 18 December 2019 в 05:55
поделиться

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

Вы можете получить почти тот же эффект, что и «передача по ссылке» при передаче dict (или для синтаксического удобства связки , см. http://code.activestate.com/recipes/ 52308 / ).

1
ответ дан 18 December 2019 в 05:55
поделиться
  1. Я бы рекомендовал использовать словарь или класс для накопления всех деталей о ваших переменных
    • значение
    • текст приглашения
  2. Список для хранения порядка, в котором вы хотите, чтобы они отображались
  3. Затем используйте старую добрую итерацию для подготовки ввода и сбора вывода

Таким образом, вы будете только изменять небольшой управляемый участок кода снова и снова. Конечно, вы должны инкапсулировать все это в класс, если вам удобно работать с классами.

"""Store all variables
"""
vars = {}
"""Store the order of display
"""
order = []

"""Define a function that will store details and order of the variable definitions
"""
def makeVar(parent, order, name, value, prompt):
    parent[name] = dict(zip(('value', 'prompt'), (value, prompt)))
    order.append(name)

"""Create your variable definitions in order
"""
makeVar(vars, order, 's', 'this is a string', 'your string here')
makeVar(vars, order, 'i', 1, 'your int here')
makeVar(vars, order, 'f', 3.14, 'your float here')

"""Use a list comprehension to prepare your input
"""
my_list = [[name, vars[name]['prompt'], vars[name]['value']] for name in order]
input_panel = Input(my_list)

out_list = input_panel.results();
"""Collect your output
"""
for i in range(0, len(order)):
    vars[order[i]]['value'] = out_list[i];
0
ответ дан 18 December 2019 в 05:55
поделиться

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

0
ответ дан 18 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: