Найти - Пользователи
Полная версия: *args and **kwargs
Начало » Python для новичков » *args and **kwargs
1
Vitek64
def myfunc(**kwargs):
for k, v in kwargs.items():
print(k, v, sep='->', end=' ')
if kwargs:
print()

Подскажите, для чего нужно условие “if kwargs” в подобных функциях. Не могу понять для чего оно служит, и что вообще делает.Без него получаю тот же результат в разных вариациях, при разном количестве переменных.

Например:
def myfunc(**kwargs):
for k, v in kwargs.items():
print(k, v, sep='->', end=' ')
if kwargs:
print()

myfunc(a=5, b=67, c=89)

Если убрать условие if, получается тот же результат. И так в разных случаях.
Та же история при args/if args:.
py.user.next
Ты, похоже, что-то напутал просто с самим кодом и всё.
  
>>> def myfunc(*args, **kwargs):
...     for a in args:
...         print(a)
...     if args:
...         print('args')
...     for k, v in kwargs.items():
...         print(k, v, sep='->', end=' ')
...     if kwargs:
...         print('kwargs')
... 
>>> myfunc()
>>> 
>>> myfunc(1)
1
args
>>> 
>>> myfunc(b=2)
b->2 kwargs
>>> 
>>> myfunc(1, b=2)
1
args
b->2 kwargs
>>>

Vitek64
Не могу понять для чего оно служит
Зачем ты в этом пытаешься разобраться? Это явно писал какой-то дурак просто.

Vitek64
Если убрать условие if, получается тот же результат. И так в разных случаях.
Та же история при args/if args:.
Либо ты напутал, либо дурость написана просто, а ты её хаваешь с открытым ртом. Больше профессиональных книг читай, чтобы научиться отделять говноматериалы в исполнении всяких дураков зачастую малолетних от действительно качественных материалов в исполнении профессиональных программистов и качественных преподавателей к тому же.

Много говна идёт со всяких Индий, Пакистанов и прочей шелухи. Не надо по ним учиться, это дебилы пишут.
Vitek64
py.user.next
Ты, похоже, что-то напутал просто с самим кодом и всё.
Это код из учебника по питону..
py.user.next
Vitek64
Это код из учебника по питону
Vitek64
def myfunc(**kwargs):
for k, v in kwargs.items():
print(k, v, sep='->', end=' ')
if kwargs:
print()
Вот это вот, да? Вот прямо так в учебнике и записано?
Поздравляю, ты читаешь “учебник”, написанный дебилом.

Если бы ты его просто читал и спокойно сам там всё изучал, я бы тебе ничего не говорил. Но ты предлагаешь нам разбираться в дебилизме какого-то дебила, чтобы ты мог понять, есть ли там хотя бы что-то осмысленное в том, что он там написал. Ты вот спрашиваешь “а зачем они нужны там эти последние две строчки?”, я тебе говорю “они не нужны там, их какой-то дебил туда написал”. И ты говоришь “не-е-ет! это же учебник! учебники не могут дебилами писаться”, а я тебе говорю “не-е-ет! это ты не понимаешь! учебники как раз могут дебилами писаться, потому что дебилы, когда их никто не слушает, начинают писать учебники и распространять их, потому что программы-то они писать не умеют, а учебники можно любому дураку писать, главное слово учебник там написать крупными буквами и всё”. Их никто не рецензирует, эти учебники.

Я вот с одним общался лет пять назад, он мне стал говорить, что он учебник по UNIX написал, дал ссылки на свой учебник (бумажный они выпустили вдвоём с кем-то). Это он стал мне говорить, когда я не стал слушать его вещания, а просто сказал ему, что у него вот это в коде неправильно и вот это в коде неправильно и так далее. Оказалось, что это просто какой-то там чмошник лет пятидесяти, который всю жизнь проработал преподом в каком-то ПТУ, у него у самого образования нет ибо нет мозгов просто даже, и вот он решил написать учебник, чтобы хоть как-то в жизни подзаработать. Ну, знаешь, как какая-нибудь дура с утиными губами накачанными пишет книгу про свою жизнь, муж деньги даёт - она пишет. Вот это то же самое, только околонаучное. В итоге он ни в UNIX'е, ни в C нихера не знает, но с умным видом пишет книжку как эксперт в этом, выпускает её в издательстве в бумажном виде и потом развозит по магазинам. Всё. Дураки покупают, никто ничего не понимает, никто ничего не знает. То, что это фуфло, в массы не идёт. Естественно, потом он при каждом своём просирании где-то начинает давать информацию, что мол “смотрите! я книгу написал! вот такой вот я умный!”.

Поэтому найди нормальные материалы для начала, чтобы учиться.
Vitek64
py.user.next
Ну я собственно не предлагаю никому разбераться в дебилизме. Я, как новичок, просто хочу понять как это, увиденное мной, работает, поэтому и спрашиваю.
А книга, скорее книга а не учебник, которую дебилы написали, мировой компьютерный бестселлер “Изучаем программирование на Python” от Head First.🙄
py.user.next
Vitek64
А книга, скорее книга а не учебник, которую дебилы написали, мировой компьютерный бестселлер “Изучаем программирование на Python” от Head First.
Vitek64
def myfunc(**kwargs):
for k, v in kwargs.items():
print(k, v, sep='->', end=' ')
if kwargs:
print()
Vitek64
Подскажите, для чего нужно условие “if kwargs” в подобных функциях.
Там print() в цикле не выводит конец строки, так как аргумент end у функции print() заменён на пробел. Поэтому если аргументы у функции myfunc() есть и они выводились, то после их вывода в одну строку надо вывести перевод строки. Если же аргументов у функции myfunc() нет и они не выводились вообще, то тогда перевод строки выводить после их вывода не надо, так как этого вывода не было.

Здесь мы не убирали if. Если мы подаём аргументы, то они выводятся в одну строку и после их вывода выводится пустая строка. Если мы не подаём аргументы, то вообще ничего не выводится.
  
>>> def myfunc(**kwargs):
...     for k, v in kwargs.items():
...         print(k, v, sep='->', end=' ')
...     if kwargs:
...         print()
... 
>>> myfunc(a=1)
a->1 
>>> myfunc(a=1, b=2)
a->1 b->2 
>>> 
>>> myfunc()
>>>

Здесь мы убрали if. Если мы подаём аргументы, то они выводятся в одну строку и после их вывода выводится пустая строка. Если мы не подаём аргументы, то выводится пустая строка, которая не нужна.
  
>>> def myfunc(**kwargs):
...     for k, v in kwargs.items():
...         print(k, v, sep='->', end=' ')
...     print()
... 
>>> myfunc(a=1, b=2)
a->1 b->2 
>>> myfunc()
 
>>>
xam1816
Vitek64
Подскажите, для чего нужно условие “if kwargs” в подобных функциях. Не могу понять для чего оно служит, и что вообще делает.Без него получаю тот же результат в разных вариациях, при разном количестве переменных.

закомментируйте строки и посмотрите что будет
  
def myfunc(**kwargs):
    for k, v in kwargs.items():
        print(k, v, sep='->', end=' ')
    # if kwargs:
    #     print()
myfunc(a=1, b=2)
myfunc(b=3, c=4)
myfunc(d=5,e=6)

a->1 b->2 b->3 c->4 d->5 e->6 

  
def myfunc(**kwargs):
    for k, v in kwargs.items():
        print(k, v, sep='->', end=' ')
    if kwargs:
        print()
myfunc(a=1, b=2)
myfunc(b=3, c=4)
myfunc(d=5,e=6)

a->1 b->2 
b->3 c->4
d->5 e->6

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