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

Swift 4

Чтобы кодировать параметр в URL-адресе, я нахожу, что с помощью символа .alphanumerics задан самый простой вариант:

let encoded = parameter.addingPercentEncoding(withAllowedCharacters: .alphanumerics)
let url = "http://www.example.com/?name=\(encoded!)"

Использование любого из стандартных наборов символов для кодирования URL-адресов (например, URLQueryAllowedCharacterSet или URLHostAllowedCharacterSet) не будут работать, потому что они не исключают символы = или &.

Обратите внимание, что с помощью .alphanumerics он кодирует некоторые символы, которые делают не нужно кодировать (например, ., - или _). Я нахожу использование .alphanumerics проще, чем создание пользовательского набора символов, и не против некоторых дополнительных символов, которые нужно закодировать. Если это вас беспокоит, создайте пользовательский набор символов, как описано в . Как процитировать кодировку URL String , например, например:

var allowed = CharacterSet.alphanumerics
allowed.insert(charactersIn: ".-_")
let encoded = parameter.addingPercentEncoding(withAllowedCharacters: allowed)
let url = "http://www.example.com/?name=\(encoded!)"

Внимание: параметр encoded это сила, развернутая. Для недопустимой строки юникода может произойти сбой. См. . Почему возвращаемое значение String.addingPercentEncoding () необязательно? . Вместо развертывания силы encoded! вы можете использовать encoded ?? "" или использовать if let encoded = ....

1
задан LuminousNutria 16 January 2019 в 16:05
поделиться

4 ответа

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

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

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

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

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

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

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

Или: [ 118]

custom_method('Dude')
# Prints 'Dude'
0
ответ дан Daniel Trugman 16 January 2019 в 16:05
поделиться

Аргументы ключевых слов могут иметь значение по умолчанию. В этом случае значения по умолчанию 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'
0
ответ дан Primusa 16 January 2019 в 16:05
поделиться
def __init__(self, p, a=None, b=None):

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

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

0
ответ дан Bill the Lizard 16 January 2019 в 16:05
поделиться

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

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

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

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

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

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

0
ответ дан Serge Ballesta 16 January 2019 в 16:05
поделиться
Другие вопросы по тегам:

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