Какой смысл передавать ключевые слова, равные `None ', в качестве параметров в функции? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь перевести Python Voronoi Generator на Java, но я не очень хорошо знаком с аргументами ключевых слов, и меня смущает аргумент ключевого слова, который записывается как параметр функции.

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

Кажется, что функция просто устанавливает a и b на None. Я не понимаю, почему это необходимо. Почему бы просто не набрать None вместо использования таких параметров?

Какой смысл использовать параметры ключевых слов, равные None, в определениях функций?

Функция:

class Arc:
    p = None
    pprev = None
    pnext = None
    e = None
    s0 = None
    s1 = None

    def __init__(self, p, a=None, b=None):
        self.p = p
        self.pprev = a
        self.pnext = b
        self.e = None
        self.s0 = None
        self.s1 = None

Ответы [ 4 ]

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

Это понятие называется значение по умолчанию .

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

Предположим, у вас есть метод с поведением по умолчанию, но вы хотите зарезервировать возможность изменить его по своему усмотрению. Это даст вам эту силу.

Рассмотрим следующий пример:

def custom_method(msg, prefix=None):
  tag = prefix if prefix else ''
  print(tag + msg)

Теперь, как пользователь этого API, вы можете использовать префикс или избегать его:

custom_method('Dude', 'Hi')
# Prints 'Hi Dude'

Или:

custom_method('Dude')
# Prints 'Dude'
0 голосов
/ 16 января 2019
def __init__(self, p, a=None, b=None):

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

Установка a и b равной None в определении метода делает None их значением по умолчанию. Это делает их необязательными при вызове метода. (Таким образом, вы можете вызывать метод с 1, 2 или 3 параметрами.) Если вы не передадите значения для a и b, будет использоваться None. В Python принято использовать необязательные параметры вместо методов перегрузки.

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

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

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

Здесь Arc(p) совпадает с Arc(p, None, None), но вы можете использовать:

a1 = Arc(p)
a2 = Arc(p, a1)

и затем a2.pprevбудет a1.

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

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

Аргументы ключевых слов могут иметь значение по умолчанию. В этом случае значения по умолчанию a и b равны None. Это означает, что когда эти аргументы не передаются в функцию, a и b устанавливаются на None.

Пример:

def func(a=None):
    print(a)
func()
>>>None

Но если вы сделаете что-то вроде этого:

def func(a):
    print(a)
func()
>>>TypeError: func() missing 1 required positional argument: 'a'
...