Найти - Пользователи
Полная версия: Помогите разобраться.
Начало » Python для новичков » Помогите разобраться.
1 2
avldokuchaev
Здравствуйте, уважаемые.
Изучаю Python. До этого не программировал. Пытаюсь разобраться с данной функцией, но никак не доходит.
Объясните, пожалуйста, чайнику.

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))

Если можно, то по шагам.
Спасибо.
FishHook
Спрашивайте что конкретно непонятно, цитировать вам учебник никто не будет.
avldokuchaev
Я практически разобрался. Потом попробую описать свои мысли, а вы, если не сложно, скажете прав я или нет.
avldokuchaev
Где то в функции ошибка. Интерпретатор выдает ошибку. Похоже, что в словаре. Надо как то извлечь из словаря числа 50 и 100, чтобы с ними математические действия могли производится. Пойду читать про словари.
avldokuchaev
Хотя нет ошибки. Я просто не верно записал. Не пойму почему в результате 166 получается?
avldokuchaev
Пока искал где ошибка, узнал, что эту функцию можно еще по другому записать.
def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key, val in keywords.items():
        count += val
    return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))
Но так и не понял почему получается 166?
Stright
А сколько по-вашему должно получиться? В вызове функции total параметру initial вы задаете 10, остальные значения параметров к нему прибавляются, так и получается 166
avldokuchaev
А все понял, спасибо. Я подумал, что параметр initial не меняется и будет 5.
avldokuchaev
Еще раз здравствуйте.
В процессе изучения языка Python наткнулся на следующий код. Немного изменил имена переменных.
class Privet_1:
	def __init__(self, imya):
		self.name_1 = imya
	def priv_1(self):
		print('Привет, ', self.name_1)
pr_2 = Privet_1('Андрей')
pr_2.priv_1()
Потом поразмыслил и решил, что можно написать вот так:
class Privet_2:
	def __init__(self, inya):
		print('Привет, ', inya)
Privet_2('Андрей')
Результат вывода идентичный. Но хотел узнать, можно ли так писать, или не желательно по каким-нибудь причинам?
py.user.next
avldokuchaev
Еще раз здравствуйте.
Отдельные вопросы пиши в отдельные темы. Если кто-то ответит в эту тему по первому вопросу, а другой - по второму, а третий - снова по первому, то эти ответы начнут перемешиваться и получится свалка, из которой будет непонятно, кто кому что и на что отвечает.

avldokuchaev
Потом поразмыслил и решил, что можно написать вот так:
Зря поразмыслил. Во-первых, priv_1() в первом случае можно вызывать, а можно и не вызывать, а можно вызывать и несколько раз в разное время. А во-вторых, класс вообще ничего не должен сам выводить, выводить должны только специальные методы и только тогда, когда их специально вызывают. Иначе тебе может понадобиться этот класс там, где выводить ничего не надо, и ты его не сможешь использовать, потому что он выводит.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB