Как вы относите строку к списку-массиву, даже если ни строка, ни список не определены? - PullRequest
0 голосов
/ 03 января 2019

Я постараюсь дать хорошее описание, поскольку мне потребовалось 5 минут, чтобы подвести итог целостному названию моей проблемы.

Я создаю SDK, размещенный на сервере centos7 для более крупного проекта, подробности о нем не требуются, поскольку он не имеет значения. То, чего я пытаюсь достичь, это:

  • Создать список, содержащий строки.
  • Вызов списка в методе в качестве аргумента.
  • Вместо назначения списочных массивов строке (пример (foo = myList [0])), можно напрямую использовать строки в списке, только вызывая строку, не добавляя строку в качестве аргумента для указанный метод.

Я попытаюсь привести пример того, что я плохо пытаюсь объяснить.

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

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

Первое, что пришло в голову, - это просто предварительно определить строки вне любого метода

(
  foo = myList[0]
  def method2(myList):
    print foo

  output> myList[0] is printed   
)

Но это приведет только к ошибке при загрузке запуска сценария, поскольку ни список, ни строки не определяются мгновенно, а определяются с помощью ряда других сценариев.

def method1():

  foo = "thisisfoo"
  bar = "thisisbar"

  myList = [foo, bar]
  method2(myList)

def method2(myList):
  print foo

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Я думаю, что нашел подходящий способ сделать это,

Возможно, это не самый эффективный способ, но этого должно быть достаточно.

myList = [tab,col,servid]
mydict = {
    "table" : myList[0],
    "column" : myList[1]
    }


table = mydict.get("table")
column = mydict.get("column")

Таким образом, результатом этого является (table == myList [0], column == myList [1]), которое должно быть достаточно простым для реализации в текущих сценариях. Может быть, это далеко, время покажет, когда я продвинусь дальше в развитии, работает ли он должным образом.

0 голосов
/ 03 января 2019

Учитывая method1, который устанавливает некоторые переменные, вы можете отправить их следующему методу:

def method1():

    foo = "thisisfoo"
    bar = "thisisbar"

    myList = [foo, bar]
    method2(myList, foo)

def method2(myList, foo):
    print foo

Не ясно, для чего вам нужен список, но отправьте то, что вам нужно.

Изменение вызывающего кода также будет работать, чтобы просто взять строку:

    # as before
    method2(foo)

def method2(foo):
    print foo

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

class Data
    def __init__(self):
    self.foo = "thisisfoo"
    self.bar = "thisisbar"

    self.myList = [foo, bar]

    def method(self):
        print self.foo        

Затем вы можете создать экземпляр и вызвать метод:

    data = Data()
    data.method()

(Data, вероятно, не лучшее имя для класса, который делает вещи, но это показывает, как настроить элементы в __init__ как члены и запомнить их для последующего использования).


Редактировать вЛегкий комментарий.

Облегченный способ сделать что-то для хранения данных, на которые вы хотите сослаться, - это именованный кортеж.

from collections import namedtuple
Data = namedtuple('Data','foo bar')
data = Data('one', 'two')

Затем вы можете получить доступ к элементам, foo, bar вот так:

>>> data.foo
'one'

Итак, как и в классе, вы указываете «тип» и можете ссылаться на него, прежде чем создавать его.


Или создать словарь

data = {}

и добавляйте вещи по мере необходимости

data['Table'] = 'MyTable'

и используйте их по мере необходимости.

print data['Table']

Имейте в виду, что это вызовет исключения, если элемент, который вы запрашиваете, не являетсяне там.

...