Проблема с компонентом / областью AngularJS в пользовательском интерфейсе

  • kwargs в **kwargs - просто имя переменной. Вы можете очень хорошо иметь **anyVariableName
  • kwargs означает «аргументы ключевого слова». Но я считаю, что их лучше назвать «именованными аргументами», поскольку это просто аргументы, передаваемые вместе с именами (я не считаю какое-либо значение для слова «ключевое слово» в терминах «аргументы ключевых слов». Я думаю, что «ключевое слово» обычно означает слова, зарезервированные по языку программирования и, следовательно, не используемые программистом для имен переменных. В этой ситуации здесь не происходит.). Поэтому мы даем именам param1 и param2 двум значениям параметров, переданным функции следующим образом: func(param1="val1",param2="val2") вместо передачи только значений: func(val1,val2). Таким образом, я считаю, что их следует соответствующим образом называть «произвольным числом именованных аргументов», поскольку мы можем указать любое количество этих параметров (то есть аргументы), если func имеет подпись func(**kwargs)

Так что, говоря, что позвольте мне сначала объяснить «именованные аргументы», а затем «произвольное число именованных аргументов» kwargs.

Именованные аргументы

  • named args должны следовать позиционным args
  • порядок названных аргументов не важен
  • Пример
    def function1(param1,param2="arg2",param3="arg3"):
        print("\n"+str(param1)+" "+str(param2)+" "+str(param3)+"\n")
    
    function1(1)                      #1 arg2 arg3   #1 positional arg
    function1(param1=1)               #1 arg2 arg3   #1 named arg
    function1(1,param2=2)             #1 2 arg3      #1 positional arg, 1 named arg
    function1(param1=1,param2=2)      #1 2 arg3      #2 named args       
    function1(param2=2, param1=1)     #1 2 arg3      #2 named args out of order
    function1(1, param3=3, param2=2)  #1 2 3         #
    
    #function1()                      #invalid: required argument missing
    #function1(param2=2,1)            #invalid: SyntaxError: non-keyword arg after keyword arg
    #function1(1,param1=11)           #invalid: TypeError: function1() got multiple values for argument 'param1'
    #function1(param4=4)              #invalid: TypeError: function1() got an unexpected keyword argument 'param4'
    

Произвольное число именованных аргументов kwargs

  • Последовательность параметров функции: формальные параметры позиционного параметра, фиксирующие произвольное количество аргументов (с префиксом *) с формальными параметрами формальных параметров, фиксирующими произвольное количество именованных параметров (с префиксом **)
  • Пример
    def function2(param1, *tupleParams, param2, param3, **dictionaryParams):
        print("param1: "+ param1)
        print("param2: "+ param2)
        print("param3: "+ param3)
        print("custom tuple params","-"*10)
        for p in tupleParams:
            print(str(p) + ",")
        print("custom named params","-"*10)
        for k,v in dictionaryParams.items():
            print(str(k)+":"+str(v))
    
    function2("arg1",
              "custom param1",
              "custom param2",
              "custom param3",
              param3="arg3",
              param2="arg2", 
              customNamedParam1 = "val1",
              customNamedParam2 = "val2"
              )
    
    # Output
    #
    #param1: arg1
    #param2: arg2
    #param3: arg3
    #custom tuple params ----------
    #custom param1,
    #custom param2,
    #custom param3,
    #custom named params ----------
    #customNamedParam2:val2
    #customNamedParam1:val1
    

Передача кортежей и переменных dict для пользовательских аргументов

Чтобы закончить его, позвольте мне также отметить, что мы можем пройти

  • ", фиксирующий произвольное число ar guments "в качестве переменной tuple и
  • " формальный параметр, фиксирующий произвольное количество именованных параметров "в качестве переменной dict

Таким образом, тот же самый вызов можно сделать следующим образом:

tupleCustomArgs = ("custom param1", "custom param2", "custom param3")
dictCustomNamedArgs = {"customNamedParam1":"val1", "customNamedParam2":"val2"}

function2("arg1",
      *tupleCustomArgs,    #note *
      param3="arg3",
      param2="arg2", 
      **dictCustomNamedArgs     #note **
      )

Наконец, обратите внимание на * и ** в вызовах функций выше. Если мы их опустим, мы можем получить больные результаты.

Опускание * в кортежах args:

function2("arg1",
      tupleCustomArgs,   #omitting *
      param3="arg3",
      param2="arg2", 
      **dictCustomNamedArgs
      )

печатает

param1: arg1
param2: arg2
param3: arg3
custom tuple params ----------
('custom param1', 'custom param2', 'custom param3'),
custom named params ----------
customNamedParam2:val2
customNamedParam1:val1

Выше кортежа ('custom param1', 'custom param2', 'custom param3') печатается как есть.

Опускание dict args:

function2("arg1",
      *tupleCustomArgs,   
      param3="arg3",
      param2="arg2", 
      dictCustomNamedArgs   #omitting **
      )

дает

dictCustomNamedArgs
         ^
SyntaxError: non-keyword arg after keyword arg
0
задан InvDeath 22 February 2019 в 09:25
поделиться

1 ответ

решаемые.

Проблема была в коде компонентов - я забыл удалить все ссылки на предыдущий экземпляр контроллера, и после изменения состояния этот контроллер остался живым в памяти (я не уверен, как он был подключен к новому объекту области, но он описывает решение).

Если у вас такое поведение, попробуйте оставить практически пустой компонент, и вы обнаружите ошибку.

0
ответ дан InvDeath 22 February 2019 в 09:25
поделиться
Другие вопросы по тегам:

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