Нормальные аргументы по сравнению с аргументами ключевого слова

Я нашел, что порядок, в котором я установил Команду и CommandParameter, имеет значение. Установка свойства Command заставляет CanExecute быть сразу названным, таким образом, Вы хотите, чтобы CommandParameter уже был установлен в той точке.

я нашел, что переключение порядка свойств в XAML может на самом деле иметь эффект, хотя я не уверен, что это решит Вашу проблему. Это стоит попытки, все же.

Вы, кажется, предполагаете, что кнопка никогда не становится включенной, что удивительно, так как я ожидал бы, что CommandParameter будет установлен вскоре после свойства Command в Вашем примере. Делает вызов CommandManager. InvalidateRequerySuggested () заставляют кнопку становиться включенной?

270
задан codeforester 16 November 2018 в 07:18
поделиться

6 ответов

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

На вызывающей стороне, о чем упоминали другие комментаторы, у вас есть возможность указать некоторые аргументы функции по имени . Вы должны упомянуть их после всех аргументов без имен (позиционные аргументы), и должны быть значения по умолчанию для любых параметров, которые вообще не упоминались.

Другая концепция находится на стороне определения функции: вы можете определить функция, которая принимает параметры по имени - и вам даже не нужно указывать, что это за имена. Это чисто ключевые аргументы, и их нельзя передать позиционно. Синтаксис:

def my_function(arg1, arg2, **kwargs)

Любые аргументы ключевого слова, переданные в эту функцию, будут помещены в словарь с именем kwargs. Вы можете проверить ключи этого словаря во время выполнения, например:

def my_function(**kwargs):
    print str(kwargs)

my_function(a=12, b="abc")

{'a': 12, 'b': 'abc'}
326
ответ дан 23 November 2019 в 02:17
поделиться

Использование аргументов ключевого слова - то же самое, что и обычные аргументы, за исключением того, что порядок не имеет значения. Например, два вызова функций ниже одинаковы:

def foo(bar, baz):
    pass

foo(1, 2)
foo(baz=2, bar=1)
98
ответ дан 23 November 2019 в 02:17
поделиться

Позиционные аргументы

Перед ними нет ключевых слов. Порядок важен!

func(1,2,3, "foo")

Аргументы ключевых слов

У них есть ключевые слова впереди. Они могут быть в любом порядке!

func(foo="bar", baz=5, hello=123)

func(baz=5, foo="bar", hello=123)

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

def func(foo=1, baz=2, hello=3): ...
func("bar", 5, 123)
46
ответ дан 23 November 2019 в 02:17
поделиться

Есть еще одна языковая особенность, для которой важно различие. Рассмотрим следующую функцию:

def foo(*positional, **keywords):
    print "Positional:", positional
    print "Keywords:", keywords

Аргумент * positional будет хранить все позиционные аргументы, переданные в foo () , без ограничения количества, которое вы можете предоставить.

>>> foo('one', 'two', 'three')
Positional: ('one', 'two', 'three')
Keywords: {}

Аргумент ** keywords будет хранить любые аргументы ключевых слов:

>>> foo(a='one', b='two', c='three')
Positional: ()
Keywords: {'a': 'one', 'c': 'three', 'b': 'two'}

И, конечно, вы можете использовать оба одновременно:

>>> foo('one','two',c='three',d='four')
Positional: ('one', 'two')
Keywords: {'c': 'three', 'd': 'four'}

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

179
ответ дан 23 November 2019 в 02:17
поделиться

Я удивлен, что никто не упомянул тот факт, что вы можете смешивать позиционные и ключевые аргументы, чтобы делать такие хитрые вещи, используя * args и ** kwargs ( с этого сайта ):

def test_var_kwargs(farg, **kwargs):
    print "formal arg:", farg
    for key in kwargs:
        print "another keyword arg: %s: %s" % (key, kwargs[key])

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

11
ответ дан 23 November 2019 в 02:17
поделиться

Есть два способа присвоить значения аргументов параметрам функции, оба используются:

  1. По позиции. Позиционные аргументы не имеют ключевых слов и назначаются первыми.

  2. По ключевому слову. Аргументы ключевого слова имеют ключевые слова и назначаются вторыми после позиционных аргументов.

Обратите внимание, что вы можете использовать позиционные аргументы.

Если вы не используете позиционные аргументы , тогда - да - все , которое вы написали, оказывается аргументом ключевого слова.

Когда вы вызываете функцию, вы принимаете решение использовать позицию, ключевое слово или их сочетание . Вы можете выбрать все ключевые слова, если хотите. Некоторые из нас не делают этого выбора и используют позиционные аргументы.

23
ответ дан 23 November 2019 в 02:17
поделиться
Другие вопросы по тегам:

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