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
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
|