💻 Want to jumpstart your career in tech? Click the link below to match with the best programs for you and join your first coaching session. The first 1,000 people to click the link can join their free career coaching session with a Career Karma coach today: ck.chat/tech-with-tim
Something that he left out about unpacking is that you could use * to group a section of your collection. Let's grab his example tup = (1,2,3,4,5), if we would unpack it as follow a, *b, c = tup, than a = 1, b = [2,3,4], c = 5
In your example, what would determine that b = [2,3,4]? Is is because it is the MIDDLE values and 1 and 5 are the beginning and end? How would I get b to = [3,4,5] if a, *b, c = (1,2,3,4,5)?
@@yogiblak7819 Hi I know this is late but I assume that you would instead just do a, b, *c = (1,2,3,4,5), because the star automatically divides it up into the number of divisions you need
@@evanli4272 but there are 3 variables, so does it automatically assign a to first value, c to last and be to all values in between? Whatn if there were 60 elements in the list? Would b = all 48 of the values not in position 0 and and len - 1?
You are truly a legend Tim. I used to code when I was younger but lost my passion for it however now I am re-engaged to coding and your videos have been FANTASIC. Keep up the excellent quality of your teaching and videos.
I was once debugging exactly this problem for one whole day, where I didn't understand what happens at: [[random()]*5]*5 The 2D list was containing the same values because at run-time the "random" call executes first (most inner brackets) and returns a value and then that value gets mutated, and that mutation (column) gets mutated further on. It basically mutated the pointer/reference that points to the first "random" value. Must be really carefull when it comes to this!
11:25 , you probably wouldn't want to do this since it uses the original list's reference to duplicate it. If you make changes to one of the nested lists the other lists will also be changed. If you do x[0][0] = 2 for example, x is now [[2,2,3],[2,2,3],[2,2,3],...] which is most likely not the desired behavior.
fun fact: the "multiple assignment" syntax is actually the same as the unpacking syntax: the right side of the equation creates a tuple that is then unpacked by the left side. for instance: x, y = a, b creates a tuple (a, b) and then unpacks it into x, y
There is no name for the multiple assignment because there is no multiple assignment here, it is still a tuple unpacking: x, y = 1, 2 is the same as: x, y = (1, 2) A tuple is defined by the commas, not the brackets. Brackets are optional in tuples and used just for readability, that's why a tuple with one element has to be declared as (1,) and not (1).
Another cool thing combining multiple assignment, * and fstring: tup = (1, 2, 3, 4, 5) a, *b, _, c = tup print(f"{a = }; {b = }; {c = }") >>> a = 1; b = [2, 3]; c = 5 _ works as a variable (usually a throwaway one).
That bit about For / Else was very insightful to me, specifically the fact that Else: ... only gets triggered if the For ... part has completed without a *break* . Thanks for this!
for list comprehension, or any other 'tips', its very easy to get in a habbit of trying to keep everything tight and fun and pythonic, but what should guide your behavior is the following- find someone who has had to troubleshoot a problem in a python module while under extreme time pressure, ask them what 'pythonic' habits are very hard to understand when under extreme duress. One of the pythonic habbits that because very hard to trouble-shoot under time pressure is list comprehensions where people have put way too much logic into a single conditional. How much is too much? A good rule of thumb would be 'anything more than 1 conditonal'. 1 conditional is easy, why is that our limit? Because the number of times that 1 condition turns into 2, or 3, or more during refactoring... is very high.. each step/addition makes sense when it is added but when you are trying to comprehend the entire list comprehension while on the run and in a hurry, it because a huge issue. list comprehensions are nice, just keep them very short and simple. create additional list comprehensions if you need to keep conditionalizing them. Make sure that the You under time pressure, or your friend or coworker, isn't in big trouble later.
Very helpful video. Straight to the point. I watched it several times to make sure I remember each one. I am using all of them now including the bonus itertools. Thanks a lot Tim. 👍👍
You said "Tern-er-rary". LOL! I don't know why I find that so funny, but I do. 😂 Keep up the great work! I love your videos and how fast you fly through it without all the padding like most UA-camrs. You get in, explain it, show an example, and move on. The way it should be! Fan for life..
WRT the f-string segment of the video, another way of printing variables that is very often used in early python (and thus everywhere in legacy code) is the format, bracket string: money = '$10.00' print("We have {} left to spend".format(money)) I used to use f-strings exclusively until some of my code was getting deployed into < python 3.0 environments and causing all kinds of issues. If you know you are deploying into a brand new, all-modern python environment then there is no issue but if you are not sure then you should seriously consider format bracket strings.
A very well paced and the exact level of detail for such a video. For a future version, you can maybe include the enumerate function to loop over a list while keeping track of the index (to do something every x elements - like printing a message)
Thanks for another amazing video! I think I had an "AHA!" moment here, and I tried looking somewhere else if someone had already asked about it, but I found out I cannot even phrase it properly to render precise results in my search. I'll try to phrase here. Regarding the *args, if you use name, say, a list with another name besides args, you can still use the * to unpack the values exactly the same way, right? Up till now, I was attached to the idea that *args you could only use * to unpack iterables using specifically the variable name args, which I decided to test, and it is not true. So, is it a convention at all to use the variable name args when * unpacking with *args? Or is *args is just a way to refer to this technique of unpacking interables with *?
thanks for all the videos! may I ask to make some full time episodes on useful modules in python like intertools and random and much more I don't even know 😅
11:29 be really careful with the nested list multiplication. It creates n copies of links to the same list, so if you change one list, you will change them all
Great tutorials! However, it's hard to believe that One can start a 100k career from tutorials and 3 month boot camps.. So if you were to create a road map for individuals pursuing a dev job as a self taught person, what would this road map be? How likely am I to land a job assuming I did posses the necessary skills? What are dev interviewers expecting from the interviewee? What should I avoid in learning code so as not to waste my time. Much appreciated!
What do you think about the pydash module? Have you ever used it? Is it helpful to you? Maybe consider to make a video about that module? I think it's pretty handy ^^
The unpacking lacked a little bit of clarity. In javascript, it's called destructuring and, when destructuring an object you need to wrap it with curly braces, and refer to the object key, in which you get the value from it. You didn't clearly explain, in python we do the same, with the olny caveat that it returns the keys, not the values and we'd need to do dict.items() to get the items?
I'd like to know how Tim gets the execution duration of the script at the bottom of the terminal. Is this a built in feature of vscode? Ie: "Finished in xxxxms"
I know you're just trying to find an example to make a point, but .... The right way to check for element in a list is: if target in search: // do something else: ...
Hey, Tim, hey! Thank you very much for your videos and tutorials. You make very useful content. Please give advice on what books and resources to use to study Python. I want to learn how to create bots and applications on a python. I’d really appreciate your help
💻 Want to jumpstart your career in tech? Click the link below to match with the best programs for you and join your first coaching session. The first 1,000 people to click the link can join their free career coaching session with a Career Karma coach today: ck.chat/tech-with-tim
Something that he left out about unpacking is that you could use * to group a section of your collection. Let's grab his example tup = (1,2,3,4,5), if we would unpack it as follow a, *b, c = tup, than a = 1, b = [2,3,4], c = 5
You can also use this to optionally assign. For example, with a, b, *c = (1, 2), a == 1, b == 2, c == []. It's pretty ugly, though.
In your example, what would determine that b = [2,3,4]? Is is because it is the MIDDLE values and 1 and 5 are the beginning and end? How would I get b to = [3,4,5] if a, *b, c = (1,2,3,4,5)?
@@yogiblak7819 Hi I know this is late but I assume that you would instead just do a, b, *c = (1,2,3,4,5), because the star automatically divides it up into the number of divisions you need
@@evanli4272 but there are 3 variables, so does it automatically assign a to first value, c to last and be to all values in between? Whatn if there were 60 elements in the list? Would b = all 48 of the values not in position 0 and and len - 1?
That's exactly (one of the things) what I was looking for. Thanks
You are truly a legend Tim. I used to code when I was younger but lost my passion for it however now I am re-engaged to coding and your videos have been FANTASIC. Keep up the excellent quality of your teaching and videos.
Watch out when you multiply a nested list like that! All the sublists will be the same object, and changing one will change the rest
This is important. I didn’t know that. Thanks for pointing it out.
I was once debugging exactly this problem for one whole day, where I didn't understand what happens at: [[random()]*5]*5
The 2D list was containing the same values because at run-time the "random" call executes first (most inner brackets) and returns a value and then that value gets mutated, and that mutation (column) gets mutated further on. It basically mutated the pointer/reference that points to the first "random" value.
Must be really carefull when it comes to this!
@@kenny-kvibe I also had to debug this problem once. Luckily for me, it was in a relatively small program, so I could track it down somewhat quickly.
I ran into this and thought to myself...this sucks...lol
“The first thing you need to know is the sponsor of this video”, haha
Was just about to say the same.
raid shadow legends
Smooth segue, lol!
That’s Linus levels of smooth
Hahaha so smooth. But with this high quality content I dont mind at all haha.
11:25 , you probably wouldn't want to do this since it uses the original list's reference to duplicate it. If you make changes to one of the nested lists the other lists will also be changed. If you do x[0][0] = 2 for example, x is now [[2,2,3],[2,2,3],[2,2,3],...] which is most likely not the desired behavior.
EXTREMELY more helpful than I had expected !!! Thanks Tim !!
fun fact: the "multiple assignment" syntax is actually the same as the unpacking syntax: the right side of the equation creates a tuple that is then unpacked by the left side. for instance: x, y = a, b creates a tuple (a, b) and then unpacks it into x, y
There is no name for the multiple assignment because there is no multiple assignment here, it is still a tuple unpacking:
x, y = 1, 2
is the same as:
x, y = (1, 2)
A tuple is defined by the commas, not the brackets. Brackets are optional in tuples and used just for readability, that's why a tuple with one element has to be declared as (1,) and not (1).
Exactly right. Too bad it's not usually explained that way.
Another cool thing combining multiple assignment, * and fstring:
tup = (1, 2, 3, 4, 5)
a, *b, _, c = tup
print(f"{a = }; {b = }; {c = }")
>>> a = 1; b = [2, 3]; c = 5
_ works as a variable (usually a throwaway one).
God bless you Tim! Thank you! From Nigeria
Long life to the nigerian fried rice, it's very tasty
Right!👍
That bit about For / Else was very insightful to me, specifically the fact that Else: ... only gets triggered if the For ... part has completed without a *break* . Thanks for this!
Don't use this. There's a book full of reasons this is bad, not least being that even the creator regrets its inclusion in python.
args and kwargs finally make sense! Thanks Tim
Thanks Tim! I couldn't program at all 6 months ago, and with videos like yours it really helps make coding fast and productive.
for list comprehension, or any other 'tips', its very easy to get in a habbit of trying to keep everything tight and fun and pythonic, but what should guide your behavior is the following-
find someone who has had to troubleshoot a problem in a python module while under extreme time pressure, ask them what 'pythonic' habits are very hard to understand when under extreme duress.
One of the pythonic habbits that because very hard to trouble-shoot under time pressure is list comprehensions where people have put way too much logic into a single conditional.
How much is too much? A good rule of thumb would be 'anything more than 1 conditonal'.
1 conditional is easy, why is that our limit? Because the number of times that 1 condition turns into 2, or 3, or more during refactoring... is very high.. each step/addition makes sense when it is added but when you are trying to comprehend the entire list comprehension while on the run and in a hurry, it because a huge issue.
list comprehensions are nice, just keep them very short and simple.
create additional list comprehensions if you need to keep conditionalizing them.
Make sure that the You under time pressure, or your friend or coworker, isn't in big trouble later.
'for & while else' and last bonus is pretty nice tips!!
Thank you for going over list comprehension. I was so confused on how to work them and their logic. You explained it so simply and beautifully
Who in their right mind gave this video thumbs down? It is brilliant. Thank you Tim you Python genius. I’ve learnt so much from your videos.
Damn! Bro dosent even think. He just goes with the flow.
Very helpful video. Straight to the point. I watched it several times to make sure I remember each one. I am using all of them now including the bonus itertools. Thanks a lot Tim. 👍👍
Thanks for teaching us "zip".
“The first thing you need to know is the sponsor of this video” You got it right Tim! 🤣 You Legend! Thanks for sharing this video.
We need some Time out with Tim!
so true
I've been following you for quite a while, but this is the first time I recognized from your accent that you're Canadian!
Wut? He is!?
Just started learning python, your vids help me a lot.
Thx man !!!
That "bonus" one were very useful for me! Thx a lot!
Your videos are my energy packs
Multiplying a nested list causes trouble as x[0] is x[1] evaluates to True. That means if you change one, the other is changed as well
God this is the kind of stuff that makes me love Python. Thank you for this video! I’ve learned so much!
You said "Tern-er-rary". LOL! I don't know why I find that so funny, but I do. 😂 Keep up the great work! I love your videos and how fast you fly through it without all the padding like most UA-camrs. You get in, explain it, show an example, and move on. The way it should be! Fan for life..
hey, what happened to the audio from 11:41 to 11:44
Nothing, he just didnt say anything.
WRT the f-string segment of the video, another way of printing variables that is very often used in early python (and thus everywhere in legacy code) is the format, bracket string:
money = '$10.00'
print("We have {} left to spend".format(money))
I used to use f-strings exclusively until some of my code was getting deployed into < python 3.0 environments and causing all kinds of issues.
If you know you are deploying into a brand new, all-modern python environment then there is no issue but if you are not sure then you should seriously consider format bracket strings.
I''m learning python in a uni class and I love tips like this to make me seem smarter lmao.
Thanks a lot Tim!
12:10 You can also write 2 > 3 and 1 or 0 and that's pretty much the same thing
Yes this works, but Python has given you the better way for the same action
@Pínned by Téch With Tím haha nice scam bot
@@user-do3pd1sk6c talking about how fake a scam bot can be
can you do ursina video
great explanation of args and kwargs
There is also formatted string
'Hello, {}'.format(name)
This channel inspires me please keep up the good work.
7:49 You can also do this:
x = [0] * 100
Thanks Tim
Very very useful! Thank you Tim.
Nice I didn't know any of them except for f string
Wow, I didn't know the For/While Else and other useful stuff. Thank you!
thank you so much for putting the compilation list up front.
Thank you for the video. I am grateful for your time and contribution. Kind regards, Akira.
Best example of Lambda I've seen
A very well paced and the exact level of detail for such a video. For a future version, you can maybe include the enumerate function to loop over a list while keeping track of the index (to do something every x elements - like printing a message)
If you want to check if something is in a list, instead of using a loop, you could use
if target in search:
I love to use kwargs for django models, makes everything so much faster to write, read and manage in case you change the model
You really post a bunch it is great to see
Thank you Tim
That explain so much for me👍
Thanks for another amazing video!
I think I had an "AHA!" moment here, and I tried looking somewhere else if someone had already asked about it, but I found out I cannot even phrase it properly to render precise results in my search.
I'll try to phrase here.
Regarding the *args, if you use name, say, a list with another name besides args, you can still use the * to unpack the values exactly the same way, right?
Up till now, I was attached to the idea that *args you could only use * to unpack iterables using specifically the variable name args, which I decided to test, and it is not true.
So, is it a convention at all to use the variable name args when * unpacking with *args? Or is *args is just a way to refer to this technique of unpacking interables with *?
Great. Just right speed and content.
Thank you! Good work!
Kind man! Thank U!
your contents are really amazing man ...Thanks !
700k🎉🎉🎉🎉congratz tim
This Video is so helpful. Thank You Tim
Better than chain_list = itertools.chain(lst, lst2) is
chain_list = (*lst, *lst2)
that was eye opening, thank you!
Great tips, thanks.
Keep going buddy 😎👍
thanks for all the videos! may I ask to make some full time episodes on useful modules in python like intertools and random and much more I don't even know 😅
awesome as usual. My bookmarks are full because of your great videos ))
11:29 be really careful with the nested list multiplication. It creates n copies of links to the same list, so if you change one list, you will change them all
Great tutorials! However, it's hard to believe that One can start a 100k career from tutorials and 3 month boot camps.. So if you were to create a road map for individuals pursuing a dev job as a self taught person, what would this road map be? How likely am I to land a job assuming I did posses the necessary skills? What are dev interviewers expecting from the interviewee? What should I avoid in learning code so as not to waste my time. Much appreciated!
This video is of extremely useful! You explain things pretty clear with great examples👍
pretty cool vid. thx mate
great video!!! Thanks!!!!
What font do you use?
not bad, the swap in 1 line
Watch till the end😉 a bonus shortcut found✌✌
wooow ! awesome tricks and thanx for the video
what editor are you using that runs it right out of it and puts errors on the line where they errored?
nice video, thx for the explaination of *args, **kwargs,
for else and while else ; this is cool, first time i see that in programmation langage
To Tuple, or not to Tuple. That is the argument.
06:07 | Multiple Assignment I'm literally working in a python code that in some point does exactly that, awesome tip!
Hello Tim. Your illustrations are very good. May I use your video for my class? I teach Python also.
What do you think about the pydash module? Have you ever used it? Is it helpful to you? Maybe consider to make a video about that module? I think it's pretty handy ^^
Thanking Tim
Though I knew much of those, It was quite helpful!!!
Thanks tim!❣️
The unpacking lacked a little bit of clarity. In javascript, it's called destructuring and, when destructuring an object you need to wrap it with curly braces, and refer to the object key, in which you get the value from it. You didn't clearly explain, in python we do the same, with the olny caveat that it returns the keys, not the values and we'd need to do dict.items() to get the items?
Thank you
Looks like an awesome video and super useful! *_Also, was the first comment._*
cool stuff, thanks Tim
What is that gorgeous colorscheme?
so itertools chain is like a zip generator?
Very good 👍
I'd like to know how Tim gets the execution duration of the script at the bottom of the terminal. Is this a built in feature of vscode? Ie: "Finished in xxxxms"
Is there a way to unpack an iterable with an unknown number of entries? Or is it necessary to know the number of elements before hand?
I know you're just trying to find an example to make a point, but .... The right way to check for element in a list is:
if target in search:
// do something
else:
...
12:50 is
x = int(2 > 3)
too clever for python?
I'm surprised that you didn't talk about enumerate(lst)
Nice video Tim
This was awesome. I consider myself an advanced python programmer yet I found valuable information in this video. Thanks a lot👍🏾
Very util! Thanks!
Hey, Tim, hey!
Thank you very much for your videos and tutorials. You make very useful content. Please give advice on what books and resources to use to study Python. I want to learn how to create bots and applications on a python. I’d really appreciate your help
What’s difference in itertools chain and list extend ?
Thank You 😊 very much...