Method chaining with funcy.
Project description
funcy-chain
Simple Python data processing using method-chaining style and the funcy library.
>>> users = [
... { 'first_name': 'barney', 'age': 36 },
... { 'first_name': 'fred', 'age': 40 },
... { 'first_name': 'pebbles', 'age': 1 }
... ]
>>> (Chain(users)
... .sort(key=itemgetter("age"))
... .map(itemgetter("first_name"))
... .thru(lambda names: names + ["wilma"])
... .map(str.capitalize)
... ).value
['Pebbles', 'Barney', 'Fred', 'Wilma']
Why?
- Method chaining can make some multi-stage data processing easier to read and write.
- Funcy is great, but doesn't support method chaining.
- Other method-chaining implementations have too much "magic", are overly complex, and support too many ways of doing one thing. (see: pydash, fluentpy)
- Being simple and straightforward is a great boon, making it easier to reason about code, debug, etc.
Key Features
- Useful out of the box, supporting built-in, stdlib and funcy functions (see below).
- Easy to compose with additional utilities (see
Chain.thru()). - Both "immediate" (list-based) and "lazy" (iterator-based) computations supported,
via parallel
ChainandIterChainclasses.
>>> from funcy_chain import Chain
>>> (Chain([1, 2, 3, 7, 6, 5, 4])
... .without(3)
... .filter(lambda x: x > 2)
... .remove(lambda x: x > 6)
... .sort(reverse=True)
... ).value
[6, 5, 4]
Supported Methods
built-in
Note: funcy's map and filter are used rather than the built-ins.
stdlib
- itertools.starmap
- itertools.zip_longest
- heapq.nlargest
- heapq.nsmallest
- random.choice
- random.choices
- random.sample
- random.shuffle
funcy
The following is a sub-set of the funcy
cheat sheet including only functions
supported as methods on Chain and IterChain objects.
Sequences
| Slice | drop take rest butlast takewhile dropwhile split_at split_by |
| Transform | map mapcat keep pluck pluck_attr invoke |
| Filter | filter remove keep distinct where without |
| Join | concat flatten mapcat interleave interpose |
| Partition | chunks partition partition_by split_at split_by |
| Group | split count_by count_reps group_by group_by_keys group_values |
| Aggregate | with_prev with_next accumulate reductions sums |
| Iterate | pairwise with_prev with_next zip_values zip_dicts |
Collections
| Join | join join_with |
| Transform | walk walk_keys walk_values |
| Filter | select select_keys select_values compact |
| Dicts | flip pluck where project zip_values zip_dicts |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
funcy_chain-0.3.1.tar.gz
(15.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file funcy_chain-0.3.1.tar.gz.
File metadata
- Download URL: funcy_chain-0.3.1.tar.gz
- Upload date:
- Size: 15.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b263356feb25206c21589741347b20304c54cd4eaaddfda21624f1fd996540e6
|
|
| MD5 |
0f5e62d80bd844f49f4c41c6651e6b05
|
|
| BLAKE2b-256 |
ecf456d3ae9f174940a3d33f5761740b4613135134922f11b4555f1c3b7d9503
|
File details
Details for the file funcy_chain-0.3.1-py3-none-any.whl.
File metadata
- Download URL: funcy_chain-0.3.1-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b016104e2faa81deacab4e3924d960a068b980e008fe6d8ba2969f56060e9651
|
|
| MD5 |
57fb0a4ba98066152983698ba982964f
|
|
| BLAKE2b-256 |
448b74fe7596e8b8f69a8c791f33237563e0115b32aa787e0672f15482222cbd
|