Functional Programming Streams ,Similar like Java, for writing concise functions
Project description
functional-streams
Writing concise functional code in python
#To Fetch from a list of users
# Get their firstname , if their salary greater than 80000 and gender is male
#Instead of writing like this
list(map(lambda user: user['first_name'],
filter(lambda user:user['salary'] > 80000,
filter(lambda product: product['gender'] == 'Male',
users))))
#Write this
from streams.Stream import Stream
(Stream
.create(users)
.filter(lambda user:user['salary'] > 80000)
.filter(lambda product: product['gender'] == 'Male')
.map(lambda user: user['first_name'])
.asList())
#A concise way to write lambdas,functional code in python
from streams.Stream import Stream
users = [
{
"id": 1,
"first_name": "Mandy",
"last_name": "Gowan",
"email": "mgowan0@aol.com",
"gender": "Female",
"loves": ['Soccer','Cricket','Golf'],
"salary": 119885
},
{
"id": 2,
"first_name": "Janessa",
"last_name": "Cotterell",
"email": "jcotterell1@aol.com",
"gender": "Female",
"loves": ['Cricket'],
"salary": 107629
},
{
"id": 6,
"first_name": "Jasen",
"last_name": "Franzini",
"email": "jfranzini5@aol.com",
"gender": "Male",
"loves": ['Soccer','Golf'],
"salary": 78373
}
]
#Using Map Filter
results = (Stream
.create(users)
.filter(lambda user:user['salary'] > 80000)
.map(lambda user: user['first_name'])
.asList())
#['Mandy', 'Janessa']
#Using flatMap Distinct
results = (Stream
.create(users)
.flatmap(lambda user:user['loves'] )
.distinct()
.asList())
#['Cricket', 'Golf', 'Soccer']
#Using skip take
results = (Stream
.create(users)
.skip(1)
.take(1)
.map(lambda user: user['first_name'])
.asList())
#['Janessa']
#Even you can peek results
results = (Stream
.create(users)
.peek(lambda data:print("User",data))
.map(lambda user: user['first_name'])
.asList())
#Will list out all users
Additional Information
Design
Most of the functions underneath uses the same functions available in python (map uses map , filter uses filter etc..). Only we have added wrapper to make the code concise
Abstractions
If you need to use abstractions to get reusable , try using stream method. as the generators used get corrupted by the very first expansion For Example
stream_of_users = (Stream
.create(users)
)
#The below code wont work , as the genrators expire once you aggregate it
total_users = (stream_of_users
.length())
firstname_of_users = (stream_of_users
.map(lambda user: user['first_name'])
.asList())
#The above code should be rewritten as
total_users = (stream_of_users
.stream()
.length())
firstname_of_users = (stream_of_users
.stream()
.map(lambda user: user['first_name'])
.asList())
# The stream will make use of copying the generators
Project details
Release history Release notifications | RSS feed
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
Close
Hashes for functional_streams-1.0.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86828d12569e06b5389a9b49087b6a39722d46f39b6a1d3d1db8749d180008e2 |
|
MD5 | 4451f340af8fdd6fa5dad724c8e3f2e1 |
|
BLAKE2b-256 | 80f5412d131d16492c85bc275eb47032d2d7e5bafebbb69f9e02a4a71ee0b1e7 |