No video

Transforming Code into Beautiful, Idiomatic Python

  Рет қаралды 1,063,243

Next Day Video

Next Day Video

Күн бұрын

Пікірлер: 661
@rafehqazi8539
@rafehqazi8539 8 жыл бұрын
Note to Python 3 Users: - izip is just zip - d.iteritems() is just d.items() - To use defaultdict: You have to do the following --> from collections import defaultdict
@suburbanmoscow9067
@suburbanmoscow9067 7 жыл бұрын
Rafeh Qazi thx for the additional info
@CleverProgrammer
@CleverProgrammer 7 жыл бұрын
Woah, did not notice my comment was sitting at 65 likes haha. I now have my own computer programming KZbin channel! Thanks for commenting Suburban and making me see this!
@suburbanmoscow9067
@suburbanmoscow9067 7 жыл бұрын
You are welcome. I will check out your channel as well! Cheers
@javierRC82857
@javierRC82857 7 жыл бұрын
Rafeh Qazi but in Python 2.7 zip is an iterator? izip,zip or range,xrange why not use iterator for everything and let the programmer choose if he want expand the list?
@nmertsch8725
@nmertsch8725 7 жыл бұрын
Javier I'm not sure if this is what you asked for, but you can use "list(range(x))" or "list(zip(x,y))", if you really want to have a list instead of an iterable object.
@juliushinze5177
@juliushinze5177 7 жыл бұрын
10:20 Beautiful syntax highlighting
@jonty3551
@jonty3551 4 жыл бұрын
Lol
@nickbarss1693
@nickbarss1693 4 жыл бұрын
I remember my prof for C++ and OOP had every other word/letter in his notes/code highlighted with no common theme whatsoever.
@qg4091
@qg4091 8 жыл бұрын
This guy is seriously amazing, love his style of teaching
@johncherry108
@johncherry108 5 жыл бұрын
Pity his ego needs to be continuously stroked with applause.
@Pulsar77
@Pulsar77 5 жыл бұрын
John Cherry Oh FFS, it's a joke. First rule of becoming a Python programmer: have a sense of humor.
@heinzguderian9980
@heinzguderian9980 5 жыл бұрын
He reminds me a bit too much of a pastor for me to be completely comfortable, (like from a Pentecostal church or something). Or an unctuous salesman telling us about his schemes. Material was great, though.
@DimitrisK5
@DimitrisK5 5 жыл бұрын
@@johncherry108 It's one of his techniques to keep the audience engaged. He is an excellent speaker and he obviously does that on purpose. You might also notice that he asks the audience all the time if they learnt something new, or how many knew that, or what's the problem with this piece of code, etc.. On top of that, he makes me (and I assume other people, too) feel like we are part of the Python family; the core team seems close and approachable and I get a feeling of belonging to this line of developers who transformed the way we think about human programming forever.
@KurzedMetal
@KurzedMetal 4 жыл бұрын
No wonder why Python is awesome, they have awesome devs :)
@Achrononmaster
@Achrononmaster 5 жыл бұрын
The ignored() idiom exists in Python 3.4+ but is called suppress(): # NEW WAY in Python 3.4+: from contextlib import suppress with suppress(OSError): os.remove('foo.txt')
@locanix
@locanix 4 жыл бұрын
Thanks! I was wondering why I couldn't find it
@rusca8
@rusca8 3 жыл бұрын
+
@gromilla1990
@gromilla1990 7 жыл бұрын
"If you are mutating something while you are iterating over it, you are living in a state of sin and you deserve whatever happens to you" :D loled so hard on this one! 20:20
@Michael-jq1hl
@Michael-jq1hl 4 жыл бұрын
Hi I have recently started studying python, what is that arrow in print i,'-->',color?
@burakozdamar
@burakozdamar 4 жыл бұрын
​@@Michael-jq1hl it's not a special character or something. he just wanted to print an arrow, that's it. the characters in single or double quotation marks are interpreted as string. so this statement prints 1 --> greens for example.
@Michael-jq1hl
@Michael-jq1hl 4 жыл бұрын
@@burakozdamar I see, many thanks, I never found the answer to that and now that I see the quotes makes more sense :)
@godfather7339
@godfather7339 3 жыл бұрын
@@Michael-jq1hl it's been a year, hope you are doing with python.
@Michael-jq1hl
@Michael-jq1hl 3 жыл бұрын
@@godfather7339 hey, kind of. I decided that instead of developing I could recruit Python Devs, so that is how I am using the little skill I have acquired. Unfortunately, most Devs think I am like any other recruiter and ignore me xD
@PedroTeixeira
@PedroTeixeira 5 жыл бұрын
I’ve been using Python for over a decade (informally trained) and haven’t learned so many great tidbits so quickly in a long time. Awesome talk!
@merlin2600
@merlin2600 5 жыл бұрын
At 44:00, The `with ignored(OSError)` has been renamed to `with suppress(OSError)` and is from the contextlib package.
@brotherlui5956
@brotherlui5956 5 жыл бұрын
6 years old but still good advice. Raymond is a great teacher.
@GroundZero_US
@GroundZero_US Жыл бұрын
@@cirogarcia8958 10 years old, your statement of his statement still stands.
@stijnvandensande3579
@stijnvandensande3579 8 ай бұрын
@@GroundZero_US almost 11 now
@GroundZero_US
@GroundZero_US 7 ай бұрын
@@stijnvandensande3579 • and still holds up
@jeffkirchoff14
@jeffkirchoff14 3 жыл бұрын
Man YT recommended it after 8 yrs In search of gold I found diamond
@kumarc634
@kumarc634 8 жыл бұрын
at 7:22 it should not for i, color in enumerate(colors): print i,'--->',color[i] but for i, color in enumerate(colors): print i,'--->',color may be printing mistake
@mByyurt
@mByyurt 7 жыл бұрын
I was here to write that. Nice catch.
@a8lg6p
@a8lg6p 7 жыл бұрын
I was about to make that comment. Either way works the same, but it's exactly what he's been telling us not to do, so clearly a mistake.
@adelkhafizova
@adelkhafizova 7 жыл бұрын
Also stopped the video to see if someone has pointed this out already)
@aikimark1955
@aikimark1955 7 жыл бұрын
Do you think that Raymond is reading these comments?
@EyeIn_The_Sky
@EyeIn_The_Sky 6 жыл бұрын
I think you do have to have the: print(i,'-->', color [i]) otherwise you will just get all the colours beside each index in a row repeated 4 times. Unless this is just in Python 3?
@Decessus117
@Decessus117 9 жыл бұрын
"There's two kinds of people in the world: people who've mastered dictionaries and total goobers." - Raymond Hettinger
@dontbetoxic4387
@dontbetoxic4387 3 жыл бұрын
Isn’t there are correct?
@sandeshgowdru8869
@sandeshgowdru8869 Жыл бұрын
10 years old video, and it is gold.
@chrstfer2452
@chrstfer2452 Жыл бұрын
Some minor differences, izip is just zip now i guess
@thatguy1000001
@thatguy1000001 10 жыл бұрын
I literally just watched this a second time for the entertainment value! Raymond Hettinger is hilarious! Not only was watching this a lot of fun, but super-informative and efficient. I'm going to go check out some of his other talks. If I'm gonna learn python, it might as well be from this dude!
@tdao9741
@tdao9741 3 жыл бұрын
And how’s yours python 7 years later?
@manojbisht7018
@manojbisht7018 8 жыл бұрын
Documented version gist.github.com/JeffPaine/6213790
@blabnfriends
@blabnfriends 7 жыл бұрын
gratzi
@ciscohdz
@ciscohdz 7 жыл бұрын
hero, that is you
@MrTigerstyle80
@MrTigerstyle80 6 жыл бұрын
Dude’s kind of a colossal badass. Not even mad at the Casey Kasem vibe at all. He’s a beast.
@guhkunpatata3150
@guhkunpatata3150 2 жыл бұрын
Where have I been All this time only to find this GEM right now ??? This video is very great and a MUST WATCH for any pythonista
@MrTigerstyle80
@MrTigerstyle80 9 жыл бұрын
This dude is off the hook smart.
@jnuxadrian
@jnuxadrian 9 жыл бұрын
I think that 'return newfunc(*args)' on line 6 must be replaced by 'return saved[args]' at 41:12
@lucasfcnunes
@lucasfcnunes 5 жыл бұрын
yep. infinite loop
@DanielCallejasSevilla
@DanielCallejasSevilla 4 жыл бұрын
@@lucasfcnunes Stack overflow ;-)
@toomuchtruth
@toomuchtruth 6 жыл бұрын
"Start open source contributions to project by going in and placing doc strings". This is a brilliant idea! I've wanted to start contributing for so long but didn't feel I have the skills, I'm gonna do this!!!
@bonbonpony
@bonbonpony 5 жыл бұрын
Yes, do it. There's a lot of extremely crappy documentation for Python modules :q
@orkoxy
@orkoxy 10 жыл бұрын
At 7:26, it should be for i, color in enumerate(colors): print i, '-->', color
@Michael-jq1hl
@Michael-jq1hl 4 жыл бұрын
Hi I have recently started studying python, what is that arrow in print i,'-->',color?
@2adamast
@2adamast 4 жыл бұрын
Michael the arrow is a string
@uthoshantm
@uthoshantm 5 жыл бұрын
Note that these functional constructs are now in every mainstream language such as C# and Java. So, it's not that Python has a specific capability, but experienced Python programmers do encourage the use functional constructs. This video is an example.
@JamesSKim
@JamesSKim 11 жыл бұрын
This lecture is very nice to learn advanced Python programming. After I watched this video, I realize that I have used Python almost like using C. I have used C and C++ as well as Matlab. Hence, I thought that many approaches in Python will be not much different from the conventional languages except specialized keywords. However, I realize that grammars in Python can be different from that in C.
@snowblindu
@snowblindu 9 жыл бұрын
I wish this guy was my teacher
@hdggoyo7423
@hdggoyo7423 8 жыл бұрын
+snowblindu he's cocky and not interesting at all
@PhilGerb93
@PhilGerb93 8 жыл бұрын
+hd ggoyo pffft, hater. I wish he was my teacher too!
@jfolz
@jfolz 8 жыл бұрын
+hd ggoyo He added a lot of the cool stuff to Python so he gets to be cocky.
@hdggoyo7423
@hdggoyo7423 8 жыл бұрын
+riDDimann i was just joking, he looks like a cool dude, chill guys
@AlfredEssa
@AlfredEssa 6 жыл бұрын
He is cocky, but he knows his shit. If you are going to be a hater, prove your chops.
@Achrononmaster
@Achrononmaster 5 жыл бұрын
izip() in Python2 is zip() in Python3. Also, you can loop over the longer of the lists. So, import itertools colors = ['red','green,'blue','purple']; shapes =['circle,'triangle','square'] for col, shp in zip_longest(colors,shapes): print( col, '--->', shp) >>> red ---> circle green ---> triangle blue ---> square
@77aHeB
@77aHeB 2 жыл бұрын
First - this is an awesome piece, I didn't knew Raymond Hettinger was to be blamed for so many iterators in python, and I truthfully love this guy now that I know what he did for most of my days! :) There is a small bug in 15:58 onwards due to the missing tgt variable, but the more important thing is that it can get even more beautiful (IMHO) from: def find(seq, target): for i, value in enumerate(seq): if value == target: break else: return -1 return i to this: def find(seq, target): for i, value in enumerate(seq): if value == target: return i return -1 not that the for/else is not nice in some other cases, this was probably just not the right example for it.
@RichardGrigonis
@RichardGrigonis 2 жыл бұрын
I'm so glad that he said we should rename For as ForEach. I suggested that online some years ago, and boy did I get lambasted by everybody!
@shushens
@shushens 10 жыл бұрын
Love this guy. I was quite disappointed when it ended. I was so expecting a much much longer video :D
@ceestimmerman9785
@ceestimmerman9785 7 жыл бұрын
You could read the "What's New" articles instead: docs.python.org/3/whatsnew/index.html
@jacobschmidt
@jacobschmidt 4 жыл бұрын
@@ceestimmerman9785 it's not quite the same!
@martinborus9531
@martinborus9531 8 ай бұрын
This talk is great even after 10 years. Some of the syntax has changed, for example in 2023: at 44:05 the "with ignored" is now from contextlib import suppress with suppress(OSERROR): and the "izip" command is gone, zip now creates a generator.
@DmitriiGlandarius
@DmitriiGlandarius 7 жыл бұрын
Very nice. In just 50 minutes I learned moe then in the last month.
@darkopz
@darkopz 5 жыл бұрын
Initially I refuse to believe any developer wouldn’t know what “in” semantically means, but then I’m reminded of all the code I’ve seen.
@bonbonpony
@bonbonpony 5 жыл бұрын
Most programmers nowadays have just learnt to parrot other people's code without any actual in-depth understanding of what it does or why is its syntax the way it is. Mostly "thanks to" online tutorials, like those on Udemy or alike where blind lead the blind :q I still have people giving me weird looks when I write C++ code like this: if (a == b) do_something(); else do_something_else(); instead of wrapping the functions into braces, because they think that those braces are part of the syntaxt and have to be there. Or if I write something like this: cout
@Krazness
@Krazness 7 жыл бұрын
this may be the best python video I've seen online
@bonbonpony
@bonbonpony 5 жыл бұрын
Yeah, there should be a video like this one for every language out there. One can learn much more about how to write clean code from such videos than from any crappy tutorial.
@matthewwatts9693
@matthewwatts9693 10 жыл бұрын
This is a must see video for an python developer. Fantastic!
@BillTubbs
@BillTubbs 8 жыл бұрын
There's an error on the slide at 7:13 titled 'Looping over a collection and indices'. Last line should be: print i, '-->', color
@vanshdeep91
@vanshdeep91 7 жыл бұрын
Bill Tubbs both have the same meaning brother be it color or colors [i]
@BillTubbs
@BillTubbs 7 жыл бұрын
Both have the same result but using the color iterator that enumerate creates is 'faster and beautiful' as he points out.
@jakykong
@jakykong 4 жыл бұрын
He even said I would fight him on this, but haha, oh man, the comparison functions are something I absolutely *miss*, even if I really agree with almost everything else he said and have been writing idiomatic Python for ages. I ran into a real problem the other day where comparisons were a much cleaner solution than the less obvious and potentially much slower multi-pass sorting: Sorting on multiple keys with independent ascending or descending orders. You can sort a plain tuple without any fuss if you don't mind that every key is ascending or every key is descending. But if you want to mix those, you have to do it in multiple passes, starting from the least significant key to the most significant key, and rely on timsort's stability to get the job done -- or, IMO, cleaner -- if this were Python 2, I could have expressed the comparison function with appropriate ascending/descending signs in a simple if/elif/else return 0 chain, and rapidly expressed both the intent and the functional result quickly. Python 3 even provides a conversion utility that creates wrapper objects on the fly to facilitate this need, which is a bizarrely convoluted way to accomplish what simply allowing either key function or comparison function would have.
@mingosutu
@mingosutu 4 жыл бұрын
In python you make your video with audience, clapping, laughing and commenting. Python is fantastic.
@torgeirlaurvik8195
@torgeirlaurvik8195 3 жыл бұрын
This video was the video that got me interested in writing ideomatic Python and iterators. I've revisited it now and then ever since 1. year at uni. Amazing lecturer.
@DeMurker
@DeMurker 8 жыл бұрын
Great explanations. And even 3 years late still very useful. One thing though, he says that generator expressions make things faster but when I timeit I get this: ~$ python -m timeit "sum(i**2 for i in xrange(10))" 100000 loops, best of 3: 1.74 usec per loop ~$ python -m timeit "sum([i**2 for i in xrange(10)])" 1000000 loops, best of 3: 1.39 usec per loop
@benburrill
@benburrill 8 жыл бұрын
+DeMurker Not reproducible: I got 2.57 for generator and 2.77 for list. But in any case, as you go beyond a 10 element list, you are going to get increasingly large memory and speed problems.
@Shaddycls
@Shaddycls 8 жыл бұрын
The reason beyond containers over generators affects only at memory level: using zip(iterator1, iterator2) produces a single big object which contains the sum of both containers, since when you use a generator, it only produces an element on each iteration, so you will never have the entire sum of both containers in memory, which is an optimization and faster.
@deidyomega
@deidyomega 7 жыл бұрын
Do it again, but xrange(1000000) ;-)
@MrWorshipMe
@MrWorshipMe 5 жыл бұрын
Whenever you have a break in the for loop, just wrap that loop inside a function and return instead of break. If you want to return something else in case the for loop didn't break, just return after that loop. No need for else on the for. A for loop with a break and an else is not as readable as a function which just returns from the loop and after it.
@bonbonpony
@bonbonpony 5 жыл бұрын
Agreed. However it's not always that easy. For example, if you rely on a lot of state variables inside a complex loop: although factoring it into a function would seem as a great thing to have, it would also mean that you would have to find some way to carry on all that complicated context along with it :q
@MrWorshipMe
@MrWorshipMe 5 жыл бұрын
@@bonbonpony This is exactly what classes are for. Encapsulate all that context inside one class, and have that for loop as a private function. Or if that context is shared, have it inside a named tuple and pass it to the function.
@bonbonpony
@bonbonpony 5 жыл бұрын
But that's the problem: then you have to PASS it around all the time. And it's not that _all_ of that context is needed _all_ the time. Suppose the loop uses only 50% of it. Then you have to pass the other unneeded 50% of the clutter too. And it will be a mess. (Inb4 you say passing objects is cheap by reference: but it's still a mess.) Classes? No, that's not what classes are for. Classes are not just "big ol' bags for data and functions" (unfortunately, many people think of them that way.) They are means to model real-life objects as new data types, by defining their interfaces. What you meant is more like a _namespace_ or _module_ , but still it doesn't solve the problem - it just moves it somewhere else. Because all that state will now have to be shared between several functions and, as I said, not _every_ function requires _every_ piece of that state at the same time.
@caballerofelipe00
@caballerofelipe00 4 жыл бұрын
I didn't read all comments but I fount that in 29:12 there is an error, 'namespace = parser.parse_args([])' should not contain an empty array as argument, that way it doesn't take into consideration CLI arguments.
@borgonzalezusach9263
@borgonzalezusach9263 10 жыл бұрын
This man is technically brilliant and hilarious. Not something you see everyday. Thanks for the nice speech!!
@miguelvasquez9849
@miguelvasquez9849 Жыл бұрын
this is why i love python, the ways to write clean code.
@RomanDryndik
@RomanDryndik 6 жыл бұрын
At 41:09 when he explains self-defined defined decorator for LRU cache it has an error. His implementation leads to infinite recursion. Instead of this: def cache(func): saved = {} def newfunc(*args): if args in saved: return newfunc(*args) result = func(*args) saved[args] = result return result return newfunc It should've been: def cache(func): saved = {} def newfunc(*args): if args in saved: return saved[args] result = func(*args) saved[args] = result return result return newfunc
@TheAnimystro
@TheAnimystro 5 жыл бұрын
Thanks, I was staring at the code confused as to how that could possibly work, because I assumed he was right and I was missing something!
@mikhaill244
@mikhaill244 2 жыл бұрын
Also pointed out that something wrong with the code. Ran it, and yes, infinite recursion.
@stasbovanenko
@stasbovanenko 4 жыл бұрын
Amazing talk ! Probably best I've heard in all 26 year I'm coding. A handful of smiles and headful of HQ knowledge. Thank you, Raymond !
@blenderpanzi
@blenderpanzi 9 жыл бұрын
27:50 I think doing this is so common, there should be a group_by(sequence, keyfunc). You could then call it with group_by(names, len). There should also be an index_by(sequence, keyfunc). These functions would be trivial to implement, but nevertheless they are common and useful enough to be put in some standard lib (collections?).
@purplecrayon7281
@purplecrayon7281 2 жыл бұрын
I love this man! He should write a book on clean Python code, if he hasn't already.
@krzysiekstawarz8584
@krzysiekstawarz8584 Жыл бұрын
in enumerste slide, insted of colors[i] use color, thats why we use enumerate for!
@isilanes
@isilanes 10 жыл бұрын
24:20, about the use of get() when counting appearances of color within a list. I am probably not saying anything new, but I did some tests and actually using get() is slower than the naïve "if color not in d". More concise, sure, but more efficient... it doesn't seem so. The defaultdict he mentions later is actually quite faster, even including the time to convert the defaultdict back into a regular dict. Of the alternative ways of doing the counting, I sometimes use a fourth one he doesn't mention, and is almost as fast as the defaultdict. The code would go like this: d = {} for color in colors: try: d[color] += 1 except: d[color] = 1 Of course the relative speed of different methods depends on how many different "color" items we have within the list "colors". The try/except method is more efficient the less distinct colors there are (so less except blocks executed).
@MrCoolnamehuh
@MrCoolnamehuh 11 жыл бұрын
Found this to be one of the most useful python talks thus yet on youtube.
@anubhav9476
@anubhav9476 3 жыл бұрын
Man even though this is not quite as relevant to me today, I really love his presentation style
@richieKostenko
@richieKostenko 9 жыл бұрын
This is probably the best presented programming video I've ever seen. Thanks!
@cygil1
@cygil1 4 жыл бұрын
@14:21 lambda: f.read(32) is a lot clearer to me than "partial(f.read, 32)" since all we're actually doing is suppressing evaluation of f.read until it's called by iter, the equivalent of quoting in lisp. It threw me for a loop because I think of partial as being used for partial evaluation, something to do with the name I think.
@TheGIXL
@TheGIXL 5 жыл бұрын
41:16 it should be "return saved[args]" instead of "return newfunc(*args)"
@anAlokDubey
@anAlokDubey 3 жыл бұрын
I m watching 7 years old video and leaning lots of amazing things.... :-) you are really great.
@yuli3873
@yuli3873 2 жыл бұрын
So this man made enumerate()? I love him from now on!
@rdoetjes
@rdoetjes 10 жыл бұрын
I learned a lot! Then again I don't use Py3 because I use Jython which only 2.7 is stable and a compositing suite that has 2.7 also. The problem with functional programming is (and this video proves it) is that you need to know the function names and what to look for. This means actually bothering to read lots of papers and documentation and then you need to remember them. People aren't very good in remembering things especially non-descriptive. So only people who really dedicated in a language will know these things but Python is an awesome language but it's not a core programming language for most. Which is Java, C# or C++ and there you don't have a lot of functional functions. I love C because it has very few keywords, STL is great but I ALWAYS need to to reread who it works. Functionally very powerful but it's even less descriptive than these functions. So now that I know these situations explained by Raymond I will look them back here and read the docs apply them several times and probably by the 7th or 9th time I will remember it. That is until I don't use Python for 2 years again and forgotten all about them :D
@palpytine
@palpytine 6 жыл бұрын
Many (if not most) FP languages offer some sort of modules or namespaces to handle this exact problem of discovery, it's definitely not an issue with the paradigm in general.
@mountainhobo
@mountainhobo 10 жыл бұрын
Love Raymond's presentation style.
@michaelfresco2769
@michaelfresco2769 7 жыл бұрын
Yes! It's very entertaining.
@VladimirSanchez
@VladimirSanchez 10 жыл бұрын
I can listen to Mr Hettinger all the time!!! Thanks for the presentation and your contributions.
@movax20h
@movax20h 4 жыл бұрын
"with ignored(OSError)". So cool. TIL. In Python 3, it is called "with suppress(...)". You can list multiple exception types too.
@joedempseysr.3376
@joedempseysr.3376 6 жыл бұрын
I thoroughly enjoyed your presentation! Take the old-fashioned, ugly, slow way of doing things and instead do the new-fangled, beautiful, fast way. I love it!
@eskays9840
@eskays9840 7 жыл бұрын
very much required for a beginner like and why would someone dislike this ....
@bonbonpony
@bonbonpony 5 жыл бұрын
Maybe they code in C ;)
@d.in.c9343
@d.in.c9343 3 жыл бұрын
The "for i, color in enumarte(colors): print(i, '-->', colors[i])" could be done more beautiful by replacing the colors[i] with color.
@TheVoitel
@TheVoitel 4 жыл бұрын
7:18 for i, color in enumerate(colors): print i, '-->', colors[i] is an example of the dangers of copy and paste, just saying ...
@happygimp0
@happygimp0 4 жыл бұрын
Not his only error, he also used target and then tgt. He didn't test his code, which is a bad sign.
@TheVoitel
@TheVoitel 4 жыл бұрын
@@happygimp0 Yes, but that’s typo you will notice when testing. The other one you will not notice, but he is doing the same thing again, when he wanted to do a more elegant solution. So the mistake lies in the very thing he wants to showcase.
@Avandale0
@Avandale0 4 жыл бұрын
nicely spotted
@deViant14
@deViant14 3 жыл бұрын
@@happygimp0 bad sign? It appears he wrote roughly half of what was new in Python 3.
@anonvigil628
@anonvigil628 4 жыл бұрын
This needs updated for Python 3 - I have to go hunting for which of his recommendations are still valid. The video could at least have footnotes that say which still applies in Py3.
@Algoritmik
@Algoritmik Жыл бұрын
At 07:30, the 2nd line of the 2nd for loop should be: print i, '->', color # not colors[i] !
@johnyelasto
@johnyelasto 11 ай бұрын
nope
@gibbostooth
@gibbostooth 5 жыл бұрын
43:47 "ignored" is now called "suppress" and it's part of "contextlib" library.
@blenderpanzi
@blenderpanzi 9 жыл бұрын
Also I would simplify the code at 13:00 to this (one liner!): blocks = list(iter(partial(f.read, 32), ''))
@heraldo623
@heraldo623 4 жыл бұрын
Functional programming
@CraigPerry
@CraigPerry 10 жыл бұрын
Raymond's an entertaining, engaging presenter. Good mix of material here, definitely came away richer for the experience.
@hoanghaipham4318
@hoanghaipham4318 3 жыл бұрын
What amazing techniques! Why I haven't seen this sooner. Thank you a lots
@mattralston4969
@mattralston4969 4 жыл бұрын
Thank you for the lecture, sir. I appreciate the review of some critical "dos and don'ts" for beginners.
@mpgovinda
@mpgovinda 4 жыл бұрын
Just one video and learned more things worth years... great tips!
@toms169
@toms169 Жыл бұрын
07:25 Replace colors[i] by color in the lowest line! I am sure that‘s what he meant to write.
@eduardoherrera3696
@eduardoherrera3696 5 жыл бұрын
Thank you so much for this wonderful lecture. I think this insight might be helpful . As a Novice programer I had a few issues understanding how some of core functions in Python worked and what was because the people who taught me where using derived language examples. Phrases like "if you've code an another language....". But I haven't well time passed I learned the hard way later got to this video and inevitably think that things would been a lot easier for me if this lecture was around.
@VibeWithSingh
@VibeWithSingh 8 жыл бұрын
This presentation is simply awesome !! hands down !!
@matiasherranz86
@matiasherranz86 3 жыл бұрын
After over 10 years as a working professionally with Python, Hettinger can still blow my mind and renew my passion towards the language. Anyone knows if the deck of slides is still available anywhere?
@youliyav
@youliyav 3 жыл бұрын
Slides: speakerdeck.com/pyconslides/transforming-code-into-beautiful-idiomatic-python-by-raymond-hettinger-1
@matiasherranz86
@matiasherranz86 3 жыл бұрын
@@youliyav Nice!! Thanks!
@ShagitZiganshin
@ShagitZiganshin 7 жыл бұрын
Video uploaded in 2013. C++11 already was in production and range-based loops implemented there.
@bonbonpony
@bonbonpony 5 жыл бұрын
2018 and I still don't see much of it in real life code written by people :q
@joseville
@joseville 3 жыл бұрын
17:00 Let A = "the loop ran over a non-empty iterable and there was A break" Let B = "the loop ran over a non-empty iterable and there was NO break" Let C = "the loop ran over an empty iterable" (i.e. there were no iterations) The `else` in `for... else` runs in cases B and C. I need something that runs only in case C. I don't think there is such a thing. If there were, maybe it could be called `emptyloop` or `empty`. A bit of a contrived example: ``` # `node` is a BST node for child in (node.left, node.right): process(child) empty: print(f"{node} is a leaf node") ```
@wenflybywind572
@wenflybywind572 10 жыл бұрын
I think in cache decorator, `if args in saved`, there should return `saved[args]`
@BrianZhangOfficial
@BrianZhangOfficial 8 жыл бұрын
+Wen Flybywind thanks, thought I was going crazy for a second
@worldwidetraveler3730
@worldwidetraveler3730 5 жыл бұрын
Thanks - I am totally new to Python and was certain I would never spot an error - but looks like Idid
@zza7217
@zza7217 4 жыл бұрын
15:59 *if value == tgt* is undefined, maybe "target"?
@TomLeg
@TomLeg 2 жыл бұрын
@16:08 => Your parameter is 'target' but then you compare value to 'tgt'
@tetianakhotiaintseva562
@tetianakhotiaintseva562 7 жыл бұрын
In python 3.5 you can chain dictionaries with {**d1, **d2, **d3} instead of ChainMap(d1, d2, d3)
@AssemblyWizard
@AssemblyWizard 7 жыл бұрын
Tetiana Khotiaintseva That copies the data, not chains. Update the original dictionaries and see if the chained also gets updated
@adelkhafizova
@adelkhafizova 7 жыл бұрын
Still beautiful syntax, thanks)
@BRO-sr1vj
@BRO-sr1vj 2 жыл бұрын
Looping backwards: for _ in colors[::1]: print(_) This solution is much faster
@snooks5607
@snooks5607 4 жыл бұрын
18:18 it's actually easy to read that as an indentation error. someone might "fix" the code by indenting the else inside the for :|
@diegomastro5681
@diegomastro5681 4 жыл бұрын
Holy shit do you work with monkeys? :(
@SvenSiegmund
@SvenSiegmund 10 жыл бұрын
I love the people who make Python! Thanks for this most enlightening talk.
@wasikhan7741
@wasikhan7741 Жыл бұрын
are you a python ninja by now?
@SvenSiegmund
@SvenSiegmund Жыл бұрын
@@wasikhan7741 I sure am 😏
@espeon91
@espeon91 9 жыл бұрын
Really insightful video. Didn't even notice the time fly by. Already feel better as a Python programmer.
@vs4vijay
@vs4vijay 5 жыл бұрын
Most of the things which you described, comes from Functional Programming world. like zip, map, pure-impure functions etc etc...
@derekeden1163
@derekeden1163 5 жыл бұрын
probably best python video ive ever seen
@PramodL
@PramodL 10 жыл бұрын
Can't recommend this talk enough. Must watch to take your python chops to the next level.
@MacroAggressor
@MacroAggressor 4 жыл бұрын
This is great! I have a *much* better understanding of iterators and their purpose now. Thanks, Mr. Hettinger. edit: How did I not know about dictionary comprehensions?!? (21:05) That is AWESOME!!
@dgh25
@dgh25 Жыл бұрын
idk, kinda standard stuff in CS
@franciscoicarocs
@franciscoicarocs 5 жыл бұрын
21:00 mutating these dictionaries in a loop: for k in list(d): if k.startswith("r"): del d[k] and d = {k: d[k] for k in d if not k.startswith('r')}
@ireallyhatemakingupnamesfo1758
@ireallyhatemakingupnamesfo1758 3 жыл бұрын
Sophomore CS student here, spent a year in Java and C and been trying to learn python. Currently, my brain is melting
@dwightk.schrute8696
@dwightk.schrute8696 5 жыл бұрын
17:00 What an example of a solution in search of a problem. Just use 'return' more eagerly: def find(seq, target): for i, value in enumerate(seq): if value == target: return i return -1 And if you try to tell me that in some particular scenario you cannot return that early just refactor your code.
@edauardo3vela
@edauardo3vela 5 жыл бұрын
yeah, and what about using seq.index(target)?
@dwightk.schrute8696
@dwightk.schrute8696 5 жыл бұрын
@@edauardo3vela That requires prior check for `target in seq` otherwise you need try/except around that. Also it assumes seq being a list.
@edauardo3vela
@edauardo3vela 5 жыл бұрын
@@dwightk.schrute8696 I see, so the find() can actually be applied to other types of iterables
@dwightk.schrute8696
@dwightk.schrute8696 5 жыл бұрын
@@edauardo3vela Yup, that's right, the main point, though, is that the concept of eager returns can nicely simplify code without using obscure for-else constructs.
@edauardo3vela
@edauardo3vela 5 жыл бұрын
@@dwightk.schrute8696 I don't see the point then why he presents such an example which can be solved more elegantly using your example
@StevenAkinyemi
@StevenAkinyemi 2 жыл бұрын
I come back to this every few years. 😅
@zachariaskoutsokostas7613
@zachariaskoutsokostas7613 3 жыл бұрын
15:50, can we argue that is no surprising the [for..else ] loop to be shocking for devs who see it for the first time? It might have even made sense to be the other way around? That is "for x in z" (translated to I am going to iterate over all these elements) or "else" (execute smth if unable to do so). That would be an "else" line tight to the "for" line. Furthermore, we might never have a conditional exit inside the body of the "for", and expect to finish the loop. Then else to what?
@lordtejas9659
@lordtejas9659 4 жыл бұрын
40:26 that one guy is really enjoying it:)
@jeddak
@jeddak 3 жыл бұрын
13:45 realizing this was a milestone in my Python journey
@EmperorOfCan
@EmperorOfCan 11 жыл бұрын
Yes at a bit after 7 the output would be: 0-->r 1-->r 2-->u 3-->l and not the: 0-->red 1-->green 2-->blue 3-->yellow he probably intended.
@MrHatoi
@MrHatoi 5 жыл бұрын
7:30 Shouldn't you be using "color" instead of "colors[i]" in the second one?
@xybersurfer
@xybersurfer 4 жыл бұрын
i do .NET, but this was a nice glimpse of Python. there are a lot of similarities. i enjoyed the humor too
@kelbiekelbie909
@kelbiekelbie909 7 жыл бұрын
7:11 Shouldnt it be for i, color in colors: print(i, color)
@andik70
@andik70 7 жыл бұрын
7:13 isnt the enumerate example 'wrong'. Shouldnt colors[i] be replaced by color?
Stop Writing Classes
27:29
Next Day Video
Рет қаралды 934 М.
Python's Class Development Toolkit
45:56
Next Day Video
Рет қаралды 238 М.
This Dumbbell Is Impossible To Lift!
01:00
Stokes Twins
Рет қаралды 42 МЛН
АЗАРТНИК 4 |СЕЗОН 2 Серия
31:45
Inter Production
Рет қаралды 565 М.
3 PYTHON AUTOMATION PROJECTS FOR BEGINNERS
17:00
Internet Made Coder
Рет қаралды 1,6 МЛН
Stop Recommending Clean Code
27:05
ThePrimeTime
Рет қаралды 480 М.
When Python Practices Go Wrong - Brandon Rhodes - code::dive 2019
1:00:51
code::dive conference
Рет қаралды 96 М.
Loop like a native: while, for, iterators, generators
29:15
Next Day Video
Рет қаралды 117 М.
Python 101: Learn the 5 Must-Know Concepts
20:00
Tech With Tim
Рет қаралды 1,1 МЛН
The Mental Game of Python - Raymond Hettinger
1:10:00
SF Python
Рет қаралды 123 М.
25 nooby Python habits you need to ditch
9:12
mCoding
Рет қаралды 1,7 МЛН
Python 3 Metaprogramming
3:00:24
Next Day Video
Рет қаралды 244 М.
I Feel Bad For New Programmers
19:12
ThePrimeTime
Рет қаралды 437 М.
This Dumbbell Is Impossible To Lift!
01:00
Stokes Twins
Рет қаралды 42 МЛН