Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2023 15:29:55

Vitek64
Зарегистрирован: 2022-10-19
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

*args and **kwargs

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:.

Отредактировано Vitek64 (Фев. 15, 2023 15:36:14)

Офлайн

#2 Фев. 15, 2023 20:45:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9865
Репутация: +  853  -
Профиль   Отправить e-mail  

*args and **kwargs

Ты, похоже, что-то напутал просто с самим кодом и всё.

  
>>> 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:.
Либо ты напутал, либо дурость написана просто, а ты её хаваешь с открытым ртом. Больше профессиональных книг читай, чтобы научиться отделять говноматериалы в исполнении всяких дураков зачастую малолетних от действительно качественных материалов в исполнении профессиональных программистов и качественных преподавателей к тому же.

Много говна идёт со всяких Индий, Пакистанов и прочей шелухи. Не надо по ним учиться, это дебилы пишут.



Отредактировано py.user.next (Фев. 15, 2023 20:52:06)

Офлайн

#3 Фев. 15, 2023 23:57:23

Vitek64
Зарегистрирован: 2022-10-19
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

*args and **kwargs

py.user.next
Ты, похоже, что-то напутал просто с самим кодом и всё.
Это код из учебника по питону..

Отредактировано Vitek64 (Фев. 16, 2023 01:03:29)

Офлайн

#4 Фев. 16, 2023 02:35:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9865
Репутация: +  853  -
Профиль   Отправить e-mail  

*args and **kwargs

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

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

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

Поэтому найди нормальные материалы для начала, чтобы учиться.



Отредактировано py.user.next (Фев. 16, 2023 02:54:48)

Офлайн

#5 Фев. 17, 2023 11:15:35

Vitek64
Зарегистрирован: 2022-10-19
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

*args and **kwargs

py.user.next
Ну я собственно не предлагаю никому разбераться в дебилизме. Я, как новичок, просто хочу понять как это, увиденное мной, работает, поэтому и спрашиваю.
А книга, скорее книга а не учебник, которую дебилы написали, мировой компьютерный бестселлер “Изучаем программирование на Python” от Head First.🙄

Офлайн

#6 Фев. 17, 2023 12:40:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9865
Репутация: +  853  -
Профиль   Отправить e-mail  

*args and **kwargs

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()
 
>>>



Отредактировано py.user.next (Фев. 17, 2023 12:42:53)

Офлайн

#7 Фев. 17, 2023 16:25:45

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

*args and **kwargs

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version