2016-11-08 2 views
-6

компилятор показывает отсутствующий аргумент ключевого слова для prime (list, num), но я думаю, что я делаю это правильно * arg для списка и n для num. Но почему возникает ошибка аргумента показать ключевое слово для печати (список, Num)почему отсутствует ошибка ключевого слова в аргументе

num = int(input('Please enter a number : ')) 
list = [i for i in range(2,int((num/2) +1))] 

def prime(*arg , n): 
    for test in arg: 
     if n % test == 0 : 
      print('%d number is not a prime number.' %n) 
     elif n == 1 or n == 0: 
      print('Number is bellow 2.') 
     else : 
      print('It is a prime number') 

prime(list, num) 

+1

** «Почему это происходит со мной?» ** «Почему то, что происходит с вами?» ** «Эта ошибка» ** «Какая ошибка?» – byxor

+0

Пожалуйста, разместите соответствующую часть вашего кода, в которой вы указали указанную ошибку, а затем точно укажите, что такое ошибка и что вы сделали для ее решения. – smac89

+1

'* args' может следовать за аргументами ключевого слова или' ** kwargs', а не позиционный аргумент. И подсветка 'list' дает вам подсказку, что это имя принадлежит Python (встроенный список). –

ответ

0

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

Например, в следующем, a могут быть переданы по имени или позиции, b собирает любые дополнительные позиционные аргументы и c должны быть переданы только ключевым словом.

>>> def kwonly(a, *b, c): 
     print(a, b, c) 

>>>>kwonly(1, 2, c=3) 
1 (2,) 3 

>>>kwonly(1, 2, 3) 
TypeError: kwonly() missing 1 required keyword-only argument: 'c' 

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

def prime(*arg , n): 

n должен быть принят только с ключевыми словами значение

prime(list, n=num) 
0

Удалите * из параметра arg

def prime(arg, n): 
    # rest of code here 
+0

thnx, но я не использую * arg для передачи списка значений/кортежа в качестве аргумента? @ smac89 – Tuhin

+0

@Tuhin, вам не нужно '*' передавать аргументы в виде списков/кортежей – smac89

Смежные вопросы