Dear pythonist that question is for you! I don't ask to solve my task, just ask for explaining why it happens) I know what is args and kwargs when they using but has been really shoked, when have found one thing. So, please check my example, here we pass arguments to the function
def firstFunc(*args, **kwargs):
print('args' )
print(args)
print('kwargs')
print(kwargs)
firstFunc([1, 2], {'firstFirst': 'firstFirst', 'first' : '123', 'second' : '999'})
My second question is, why we can get the dictonary from the second function, if we will set it like this kwargs['second'] = 222, that's my code
def firstFunc(*args, **kwargs):
print('args' )
print(*args)
print('kwargs')
print(**kwargs)
kwargs['second'] = 222
secondFunc([1, 2], **kwargs)
def secondFunc(*args, **kwargs):
print('args' )
print(args)
print('kwargs')
print(kwargs)
firstFunc([1, 2], {'firstFirst': 'firstFirst', 'first' : '123', 'second' : '999'})
hope I described understandable, I am waiting for u answer, please tell me why it hapens, and why I cannot just pass dictionarie as kwargs! many thanks for u
#python #pythonic #kwargs #args #functions
I expected just mine dictionary in kwargs
CodePudding user response:
You're passing the list and the dictionary as two positional arguments, so those two positional arguments are what shows up in your *args
in the function body, and **kwargs
is an empty dictionary since no keyword arguments were provided.
If you want to pass each element of the list as its own positional argument, use the *
operator:
firstFunc(*[1, 2])
If you want to also pass each element of the dictionary as a keyword argument, use the **
operator:
firstFunc(
*[1, 2],
**{'firstFirst': 'firstFirst', 'first' : '123', 'second' : '999'}
)
This is equivalent to doing:
firstFunc(
1,
2,
firstFirst='firstFirst',
first='123',
second='999'
)
CodePudding user response:
Thank you guys ! I found the difference when I passing arguments, that for first function I didn't passed ** with argument(applied expanding), but for second functtion I passed it(applied expanding), just my syntax mistake. but what conclusion when we can make - that if u passing dictionarie as kwargs always use **(always expand it), otherwise it will be just element of the list(*args) Best regards to all!