Значение по умолчанию в функции в Python [дубликат]

9
задан Mateusz Piotrowski 11 April 2016 в 18:49
поделиться

3 ответа

Да, это правильное поведение.

Однако, судя по вашему вопросу, это не то, что вы ожидали.

Если вы хотите, чтобы оно соответствовало вашим ожиданиям, помните о следующем:

Правило 1. Не используйте изменяемые объекты в качестве значений по умолчанию.

def anyFunction( arg=[] ):

Не будет создан свежий объект списка. Объект списка по умолчанию для arg будет использоваться повсеместно.

Аналогично

def anyFunction( arg={} ):

не будет создавать свежий объект dict. Этот dict по умолчанию будет общим.

class MyClass( object ):
    def __init__( self, arg= None ):
        self.myList= [] if arg is None else arg 

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

11
ответ дан 4 December 2019 в 13:01
поделиться

Да, это правильное поведение.

Однако из вашего вопроса видно, что это не то, чего вы ожидали.

Если вы хотите, чтобы он соответствовал вашим ожиданиям, помните следующее:

Правило 1. Не используйте изменяемые объекты в качестве значений по умолчанию.

def anyFunction( arg=[] ):

Не будет создавать новый объект списка. Объект списка по умолчанию для arg будет использоваться совместно по всему месту.

Аналогично

def anyFunction( arg={} ):

не создает новый объект dict. Этот dict по умолчанию будет использоваться совместно.

class MyClass( object ):
    def __init__( self, arg= None ):
        self.myList= [] if arg is None else arg 

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

-121--3311333-

Можно переопределить системные свойства actors.maxPoolSize и actors.corePoolSize , которые ограничивают размер пула потоков актера, а затем выбрасывают в пул столько заданий, сколько могут обработать актеры. Почему, по-вашему, необходимо регулировать ваши реакции?

-121--2980825-

Это классический подводный камень. См. http://zephyrfalcon.org/labs/python_pitfalls.html , раздел 5: «Изменяемые аргументы по умолчанию»

4
ответ дан 4 December 2019 в 13:01
поделиться

Всегда создавайте такие функции:

def __init__ ( self, data = None ):
    if data is None:
       data = []

    self._data = data

В качестве альтернативы вы также можете использовать data = data или [] , но это не позволяет пользователю передавать пустые параметры ( '' , 0 , Ложь и т. Д.).

1
ответ дан 4 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

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