Пытаясь понять функции и как они вызываются с помощью упражнения - PullRequest
0 голосов
/ 21 октября 2018

Я заинтересовался Python и начал читать Think Python by Allen B. Downey.Я - новичок и не знаю никого из моего круга друзей, которые программируют, поэтому я решил задать свой вопрос здесь, каким бы простым он ни был.В настоящее время я нахожусь в разделе, связанном с функциями, и не могу понять пример / упражнение, которое включает конкатенацию:

def cat_twice(part1, part2):
    cat = part1 + part2
    print_twice(cat)

В книге это описывается как хранение локальной переменной в функции.В предыдущих главах этой же книги все упражнения выполнялись в Python Shell IDLE.Насколько я понял, для вызова функции после того, как что-то в ней хранится, вы делаете это:

cat_twice()

И все же, когда я делаю это, я получаю:

Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
cat_twice()
TypeError: cat_twice() missing 2 required positional arguments: 'part1' and 'part2'. 

Что именно яЯ не получаю или делаю неправильно?почему не работает программа?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Вот простой пример, я определил функцию cat_twice, которая будет печатать два значения, которые передаются ей.Затем я передал два значения, вызвав его как cat_twice () simple :).

def cat_twice(part1,part2):
    print(part1+part2)    #this is the code in the function that will execute

cat_twice(1,2)     #this is known as calling function
0 голосов
/ 21 октября 2018

Что вы делаете здесь, так это то, что ваша функция ожидает два аргумента, то есть part1 и part2, принудительно.Когда вы вызываете свою функцию, вы должны вызывать ее следующим образом:

cat_twice(1,2) # assuming are trying to add two numbers in your function

Если вы пытаетесь объединить строки, я бы порекомендовал вам поискать функцию join() в python.

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

def cat_twice(part1=None, part2=None)
    ...
    ...
    ...

if __name__ == '__main__':
    cat_twice(part1=<something>)
    cat_twice(part2=<somethingElse>)
    cat_twice(part2=<some>, part1=<someMore>)
    cat_twice(1,2) # here 1 will be passed as part1 and 2 as part2

Keepпомните, что если вы назначили None по умолчанию для параметров функции, перед выполнением операции сложения проверьте None, или вы можете перейти к TypeError для добавления неподдерживаемых типов операндов.

Надеюсь, это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...