Иногда, почему мы должны передавать аргумент как кортеж в python? - PullRequest
0 голосов
/ 22 апреля 2020

Итак, я написал эту простую программу на python, в которой есть функция с именем num, которая принимает два аргумента в виде целых чисел и проверяет, есть ли для некоторого "20", и если это так, то возвращается True, в противном случае возвращается False и вы заметите, что в операторе if я вызвал другую функцию sum, которая является встроенной функцией в python, поэтому, когда я пытаюсь передать значения a и b в эта функция, не передавая их как кортеж , тогда она дает мне ошибку, упомянутую ниже, поэтому мой вопрос заключается в том, почему это работает, когда я передаю их так sum((a,b)), а не как это sum(a,b)

 File "c.py", line 8, in <module>
    print(num(220,10))
  File "c.py", line 3, in num
    if sum(a,b) == 20:
TypeError: 'int' object is not iterable
def num(a,b):
    if sum(a,b) == 20:
        return True
    else:
        return False

print(num(220,10))

Ответы [ 3 ]

4 голосов
/ 22 апреля 2020

Python sum() - это встроенная функция, которая принимает итерируемый и возвращает сумму элементов в ней.

Так что в принципе вам нужно пройти к нему итеративный объект (как кортеж или список) sum((a,b)), а не два отдельных объекта sum(a, b).

1 голос
/ 22 апреля 2020

когда вы используете sum (a, b), он рассматривается как a, b как отдельный объект, следовательно, говорят, что объект '' int 'не повторяется, поэтому нам нужно передать его как кортеж типа sum ((a , б)).

Спасибо, если вам понравился мой ответ, пожалуйста, нажмите "Это полезная кнопка ответа сбоку".

1 голос
/ 22 апреля 2020

На самом деле это очень просто, когда вы используете
sum((1,3,4,5,6,7))
, вы хотите, чтобы он был максимально простым, чтобы быстро понять, к чему это приведет.

но, как вы можете видеть,
sum(iterable, /, start=0)
есть еще параметры, которые вам не нужно записывать, но они должны быть переданы.

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

...