Как инициализировать переменные ни к Одному/Неопределенному и выдержать сравнение с другими переменными в Python?

Это должно сделать:

parents.stream()
        .flatMap(parent -> parent.getChildren()
                            .stream()
                            .map(child -> new SimpleEntry<>(parent, child)))
        .map(pair -> new Parent(pair.getKey().getName(), 
                                Arrays.asList(pair.getValue())))
        .collect(Collectors.toList());

Это просто создание пары родитель / потомок для каждого ребенка, а затем создание нового родителя для каждой из этих пар с одним дочерним элементом добавлено в поле children. Затем он попадает в список Parent.

5
задан Joan Venge 29 April 2009 в 16:07
поделиться

5 ответов

Мне нужно исправить Джаррета Харди, и так как у меня недостаточно представителей, чтобы комментировать.

Глобальный охват не является проблемой. Python будет автоматически искать имена переменных во вложенных областях. Единственная проблема, когда вы хотите изменить значение. Если вы просто переопределите переменную, Python создаст новую локальную переменную, если вы не используете ключевое слово global. Итак,

originalTime = None

def doSomething():
  if originalTime:
    print "originalTime is not None and does not evaluate to False"
  else:
    print "originalTime is None or evaluates to False"

def doSomethingElse():
  originalTime = True

def doSomethingCompletelyDifferent()
  global originalTime
  originalTime = True

doSomething()
doSomethingElse()
doSomething()
doSomethingCompletelyDifferent()
doSomething()

должен вывести:

originalTime is None or evaluates to False
originalTime is None or evaluates to False
originalTime is not None and does not evaluate to False

Я второй раз предупреждаю его, что это плохой дизайн.

15
ответ дан 18 December 2019 в 09:53
поделиться

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

6
ответ дан 18 December 2019 в 09:53
поделиться

Я только что попробовал ваш код в оболочке, но не получил ошибку. Он должен работать. Может опубликовать весь код? Вы также можете использовать try / catch.

Или, может быть, locals (). Has_key ('originalTime')?

-2
ответ дан 18 December 2019 в 09:53
поделиться

Если оператор if находится внутри функции, но объявления = Нет находятся на уровне модуля, то переменные вне области внутри функции. Самое простое решение - явно указать, что идентификаторы переменных находятся в глобальной области видимости:

def doSomething():
    global originalTime
    if originalTime:
        print "originalTime exists and does not evaluate to False"

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

def doSomething():
    global originalTime
    if originalTime:
        print "originalTime exists and does not evaluate to False"

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

def doSomething():
    global originalTime
    if originalTime:
        print "originalTime exists and does not evaluate to False"

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

0
ответ дан 18 December 2019 в 09:53
поделиться

На самом деле нет никакого "красивого" способа обойти это. Исходя из названий переменных, которые вы указали, мой первый инстинкт - создать объект:

class SomeTimeClass(object):
    def __init__(self, recentTime=None, originalTime=None, postTime=None):
        self.recentTime = recentTime
        self.originalTime = originalTime
        self.postTime = postTime

time = SomeTimeClass()
if not time.recentTime::
    ...

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

Обернуть процедуру в функцию:

def SomeFunc(recentTime=None, originalTime=None, postTime=None):
    if not recentTime:
        ... 

Используйте диктовку:

some_dict = {}

if not some_dict.get('originalTime', None): #return None if key doesn't exist
    ...
-2
ответ дан 18 December 2019 в 09:53
поделиться
Другие вопросы по тегам:

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