Title
Python Does What?!?
Go Home
Category
Description
Address
Phone Number
+1 609-831-2326 (US) | Message me
Site Icon
Python Does What?!?
Tags
Page Views
0
Share
Update Time
2022-05-02 09:46:21

"I love Python Does What?!?"

www.pythondoeswhat.com VS www.gqak.com

2022-05-02 09:46:21

Python Does What?!?Kind of like "hey guys, check it out you can just duct tape down the dead-man's switch on this power tool and use it one handed". In Python. Sunday, January 16, 2022 Are they equal?>>> a = []; a.append(a); a[[...]]>>> b = []; b.append(b); b[[...]]>>> a == bTraceback (most recent call last): File "", line 1, in RecursionError: maximum recursion depth exceeded in comparisonPosted byKurt Roseat12:34 AM5 comments: Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest Thursday, September 3, 2020 Not counting zerosWe all have our favorite way of intentionally raising an exception in Python. Some like referencing an undefined variable to get a simple NameError, others might import a module that doesn't exist for a bold ImportError.But the tasteful exceptioneer knows to reach for that classic computer-confounding conundrum: 1/0 for a satisfyingly descriptive DivisionByZero.So, when does dividing by 0 not raise DivisionByZero? Why, when you divide 0 by a Decimal(0), of course!>>> from decimal import Decimal>>> Decimal(0) / Decimal(0)Traceback (most recent call last): File "", line 1, in decimal.InvalidOperation: []>>> Decimal(1) / Decimal(0)Traceback (most recent call last): File "", line 1, in decimal.DivisionByZero: []The numerator type doesn't seem to matter either:>>> 0 / Decimal(0)Traceback (most recent call last): File "", line 1, in decimal.InvalidOperation: []"InvalidOperation" just doesn't quite have the same ring to it! Well, they can't all be heroes. :)Posted byMahmoud Hashemiat5:15 PM56 comments: Email ThisBlogThis!Share to TwitterShare to FacebookShare to PinterestLabels:decimal,exceptions,int Thursday, September 12, 2019 Welcome to the float zone...Consider a REPL with two tuples, a and b.>>> type(a), type(b)(, )>>> a == bTrueSo far, so good. But let's dig deeper...>>> a[0] == b[0]FalseThe tuples are equal, but their contents is not. >>> a is bTrueIn fact, there was only ever one tuple.What is this madness?>>> a(nan,)Welcome to the float zone.Many parts of python assume that a is b implies a == b, but floats break this assumption. They also break the assumption that hash(a) == hash(b) implies a == b.>>> hash(float('nan')) == hash(float('nan'))TrueDicts handle this pretty elegantly:>>> n = float('nan')>>> {n: 1}[n]1>>> a = {float('nan'): 1, float('nan'): 2}>>> a{nan: 1, nan: 2}Posted byKurt Roseat10:45 AM27 comments: Email ThisBlogThis!Share to TwitterShare to FacebookShare to PinterestLabels:float Monday, June 3, 2019 They say a python tuple can't contain itself...... but here at PDW we abhor that kind of defeatism!>>> import ctypes>>> tup = (None,)>>> ctypes.pythonapi.PyTuple_SetItem.argtypes = ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p>>> ctypes.pythonapi.PyTuple_SetItem(id(tup), 0, id(tup))0Showing the tuple itself is a little problematic>>> tup# ... hundreds of lines of parens ... (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Segmentation faultPosted byKurt Roseat5:12 PM30 comments: Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest Wednesday, January 23, 2019 So a list and a tuple walk into a sum()As a direct side effect of glom's 19.1.0 release, the authors here at PDW got to re-experience one of the more surprising behaviors of three of Python's most basic constructs:list()tuple()sum()Most experienced developers know the quickest way to combine a short list of short lists:list_of_lists = [[1], [2], [3, 4]]sum(list_of_lists, [])# [1, 2, 3, 4]Ah, nice and flat, much better.But what happens when we throw a tuple into the mix:list_of_seqs = [[1], [2], (3, 4)]sum(list_of_seqs, []) # TypeError: can only concatenate list (not "tuple") to listThis is kind of surprising! Especially when you consider this:seq = [1, 2]seq += (3, 4)# [1, 2, 3, 4]Why should sum() fail when addition succeeds?! We'll get to that. new_list = [1, 2] + (3, 4)# TypeError: can only concatenate list (not "tuple") to list There's that error again!The trick here is that Python has two addition operators. The simple "+" or "add" operator, used by sum(), and the more nuanced "+=" or "iadd" operator, add's inplace variant.But why is ok for one addition to error and the other to succeed?Symmetry. And maybe commutativity if you remember that math class."+" in Python is symmetric: A + B and B + A should always yield the same result. To do otherwise would be more surprising than any of the surprises above. list and tuple cannot be added with this operator because in a mixed-type situation, the return type would change based on ordering.Meanwhile, "+=" is asymmetric. The left side of the statement determines the type of the return completely. A += B keeps A's type. A straightforward, Pythonic reason if there ever was one.Going back to the start of our story, by building on operator.iadd, glom's new flatten() function avoids sum()'s error-raising behavior and works wonders on all manner of nesting iterable.Posted byMahmoud Hashemiat9:00 AM385 comments: Email ThisBlogThis!Share to TwitterShare to FacebookShare to PinterestLabels:glom,lists,operators,python,tuples Friday, September 14, 2018 kids these days think data structures grow on treesArgs and kwargs are great features of Python. There is a measurable (though highly variable) cost of them however:>>> timeit.timeit(lambda: (lambda a, b: None)(1, b=2))0.16460260000000204>>> timeit.timeit(lambda: (lambda *a, **kw: None)(1, b=2))0.21245309999999762>>> timeit.timeit(lambda: (lambda *a, **kw: None)(1, b=2)) - timeit.timeit(lambda: (lambda a, b: None)(1, b=2))0.14699769999992895Constructing that dict and tuple doesn't happen for free:>>> timeit.timeit(lambda: ((1,), {'b': 2})) - timeit.timeit(lambda: None)0.16881599999999253Specifically, it takes about 1/5,000,000th of a second.Posted byKurt Roseat10:21 AM164 comments: Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest Friday, August 10, 2018 python needs a frozenlist>>> set() == frozenset()True>>> [] == ()FalsePosted byKurt Roseat12:53 PM92 comments: Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest Older PostsHomeSubscribe to:Posts (Atom)Questions? PDWs?ContributorsKurt RoseMahmoud HashemiBlog Archive ▼  2022(1) ▼  January(1)Are they equal? ►  2020(1) ►  September(1) ►  2019(3) ►  September(1) ►  June(1) ►  January(1) ►  2018(8) ►  September(1) ►  August(1) ►  June(1) ►  May(2) ►  April(1) ►  March(1) ►  January(1) ►  2017(8) ►  November(3) ►  August(1) ►  April(2) ►  March(2) ►  2016(8) ►  November(1) ►  June(1) ►  May(1) ►  April(1) ►  March(2) ►  February(2) ►  2015(6) ►  October(1) ►  September(1) ►  July(1) ►  May(1) ►  April(1) ►  March(1) ►  2014(9) ►  December(2) ►  November(5) ►  May(1) ►  January(1) ►  2013(11) ►  December(1) ►  October(6) ►  September(3) ►  April(1) ►  2012(6) ►  November(5) ►  January(1) ►  2011(30) ►  December(3) ►  November(1) ►  October(3) ►  September(4) ►  August(5) ►  July(1) ►  June(2) ►  May(4) ►  April(1) ►  March(3) ►  February(1) ►  January(2) ►  2010(20) ►  December(20)FollowersSimple theme. Powered by Blogger.