8 ms·
Python 3.4 Beta 1 Released
- taylorfausak 13y agoWow, I haven't heard of pathlib [1] before now, but it looks awesome! In particular, using the slash operator to join paths is brilliant. >>> p = PurePath('/etc') >>> p / 'init.d' / 'apache2' PurePosixPath('/etc/init.d/apache2') [1]: http://docs.python.org/3.4/library/pathlib.html http://docs.python.org/3.4/library/pathlib.html
- bodyfour 13y agoFWIW, the boost::filesystem C++ package uses the / operator in the same way
- yareally 13y agoScala does something similarly neat with using #| for piping system commands. Slash for Scala is not used by default though for path joining, but it can be by adding an implicit function: implicit def slash(str: String) = new { def /(joinStr: String) = str + java.io.File.separatorChar + joinStr} val joinedStr = "abc"/"def"/"ghi" > joinedStr : java.lang.String = abc/def/ghi Shell friendly syntax can be used for stdin/stdout in Scala as well (already in the stdlib with no implicits required): #< Redirect STDIN #> Redirect STDOUT #>> Append to STDOUT #&& Create an AND list #!! Create an OR list http://stackoverflow.com/questions/12772605/scala-shell-commands-with-pipe/12772628 http://stackoverflow.com/questions/12772605/scala-shell-comm... http://alvinalexander.com/scala/scala-execute-exec-external-system-commands-in-scala http://alvinalexander.com/scala/scala-execute-exec-external-...
- d0mine 13y agoThere are Plumbum shell combinators in Python http://plumbum.readthedocs.org/en/latest/ http://plumbum.readthedocs.org/en/latest/
- voltagex_ 13y agoThere are a couple of modules that do this kind of thing but Plumbum looks interesting, particularly http://plumbum.readthedocs.org/en/latest/local_commands.html#import-hack http://plumbum.readthedocs.org/en/latest/local_commands.html... >from plumbum.cmd import cat >>cat('tmp.txt') #invokes cat tmp.txt on the system
- yen223 13y agoOne of the many things I like about Python is their pragmatic approach to operator overloading. Well, their pragmatic approach to everything, really.
- avdd_ 13y agoNo one objected to using "pure" instead of the more common "abstract" (which is the actual antonym of "concrete") ?? Why do people do this?
- CUViper 13y agoConcrete paths inherit from pure paths - this would be quite strange using antonyms. This isn't like an "abstract" base class. It's a full class on its own, which is extended by another. Anyway, I think it's meant to be "pure" like pure functions, generally having no side effects or external inputs. https://en.wikipedia.org/wiki/Pure_function https://en.wikipedia.org/wiki/Pure_function
- quesebifurcan 13y agoi think so too. like it says in the docs: "Regardless of the system you’re running on, you can instantiate all of these classes, since they don’t provide any operation that does system calls." http://docs.python.org/3.4/library/pathlib.html#pure-paths http://docs.python.org/3.4/library/pathlib.html#pure-paths
- reinhardt 13y agoThe precursor path library [1] by J. Orendorff had the slash operator overloading trick a decade (or more) ago. [1] https://pypi.python.org/pypi/path.py/1.2 https://pypi.python.org/pypi/path.py/1.2
- thristian 13y agoI hadn't heard of it either, although I have played with Twisted's FilePath[1] class previously. I didn't really understand the attraction of an OO filesystem API until I actually used it in anger and realised how handy it was that all the relevant functions were on the object I was messing with, instead of arbitrarily divided between the "os" and "os.path" modules. Some (hopefully constructive) suggestions for the pathlib API: - Python 3 dicts ditched .iterkeys(), .itervalues() and .iteritems(); why does pathlib use the clumsy .iterdir() when it could just be called .children? - Like many Python programmers (I assume), I'm more familiar with POSIX command-line tools than I am with POSIX APIs. Command-line tools generally have an option to control whether they dereference symlinks (cp -L, find -L, etc) rather than having a separate. parallel tool that does the same thing. I think it would be neater if .lstat() and .lchmod() were removed in favour of a "follow_symlinks" parameter to .stat() and .chmod() (and .is_dir() and .touch() and .owner(), and, and, and..) - If you're going to have convenience functions that pick out interesting bits from the .stat() return value, I would find .size() far more practical than .is_socket() [1]: http://twistedmatrix.com/documents/current/api/twisted.python.filepath.FilePath.html http://twistedmatrix.com/documents/current/api/twisted.pytho...
- Flimm 13y agoI thought operator overloading like that was considered bad practise. It seems to me that the + operator should have been overloaded, not the / operator.
- makmanalp 13y ago> a new C API for implementing custom memory allocators Wow. This'll lead to some interesting hacks, I think.
- amirouche 13y agoFinally all the hacks done internaly by some big Python company is released in the wild and not by them. Check out the presentation by the creator (in french) https://github.com/haypo/conf/blob/master/2013-PyconFR-Strasbourg/tracemalloc.pdf https://github.com/haypo/conf/blob/master/2013-PyconFR-Stras...
- haypo 13y agoI started the development of tracemalloc at Wyplay, but I rewrote all the code for the version included in Python 3.4: complelty different API, you get different data, new implementation, etc. The old code: https://github.com/wyplay/pytracemalloc/ https://github.com/wyplay/pytracemalloc/ The PEP 445 (malloc API) also allows to plug hooks on memory allocators at runtime, instead of having to recompile Python for that.
- haypo 13y agotracemalloc is the first user of the PEP 445 (malloc API), but I wrote another toy: https://bitbucket.org/haypo/pyfailmalloc https://bitbucket.org/haypo/pyfailmalloc "Debug tool for Python injecting memory allocation faults to simulate a low memory system to test how your application handles MemoryError exceptions."
- computerhead 13y agoBeen using python for 7+ years now. Does everyone really think people are willing to adopt 3.x anything...? The reality of it is every place I have worked (and currently working at). Is bound by 3rd party tools and what ever interpreter they built against. Mostly that 2.6,2.7 right now. And it does not look like anyone will be switching anytime soon. Features look great, cant wait to "play" with them. But that;s about all. Play.
- spamizbad 13y agoI've done some internal work written entirely in Python 3.3. We largely did it as a "proof of concept" to try out the new language. And yeah, we did indeed have dependencies. No complaints. Going back to 2 is kind of a bummer when you add up all the little niceties you get with 3(.3): unicode native strings, smarter import system, yield from, keyword-only arguments... at least those were the features I used. It has some other stuff that I never got around to touching.
- e1ven 13y agoI certainly can't speak to big enterprise companies, but we've used Py3 in production at the last 2 startups I've worked at, and I use it extensively in my own side projects. I certainly understand it can be somewhat tedious to convert legacy projects -- I've had to do it a few times myself -- but for any new dev, I'd highly recommend using Python3. It's come to the point that Python3 is the assumed default for any new project - If someone wants to use Py2 for a project, they better have a compelling reason.. Almost every library we'd want uses Py3, or there's an alternative that does (such as PIL->Pillow). I find it rather annoying when I go back to a Python2 project and have to constantly jump through hoops to avoid what I know are solved problems :/ Admittedly, my experiences (like yours) are anecdotal - But to answer your question, from what I've seen, Python3 is used in production quite a bit.
- MBlume 13y agoEveryone is aware of this reality. Everyone was aware of this reality when the transition was planned. It's been years now and we're still maybe halfway through the transition and that's ok.
- 13y ago
- the1 13y agoisn't 2.7 the best python still because twisted?
- simonw 13y agoThe most exciting feature in 3.4 (at least in my opinion) is the addition of asyncio to the standard library, which aims to provide a standard event loop which libraries like Twisted can then use to make themselves interoperable with other async Python solutions: http://www.python.org/dev/peps/pep-3156/ http://www.python.org/dev/peps/pep-3156/ "The event loop is the place where most interoperability occurs. It should be easy for (Python 3.3 ports of) frameworks like Twisted, Tornado, or even gevents to either adapt the default event loop implementation to their needs using a lightweight adapter or proxy, or to replace the default event loop implementation with an adaptation of their own event loop implementation. (Some frameworks, like Twisted, have multiple event loop implementations. This should not be a problem since these all have the same interface.)"