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
users=[]
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 partial abstraction , 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
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
.length())
firstname_of_users = (stream_of_users
.stream()
.map(lambda user: user['first_name'])
.asList())
# The stream will make use of copying the items which has been expanded
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.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d71fb7ad008fd050ebccb3a8291c3d4ed6508ab91b9465581b9a66b96a8f32de |
|
MD5 | e435716b7ade6435c14871eb4efd1005 |
|
BLAKE2b-256 | 3d8a6c478adad0bbd56bcfeae955b1635588092ebb6474c44812717364b05c75 |