Skip to content

jldupont/pyfnc

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Overview

Functional style 'list' and 'dict' classes & decorators for pattern matching function dispatch.

For more information, visit http://www.systemical.com/doc/opensource/pyfnc

Examples

Dictionary class 'dic' with 'return self' functionality:

    >>> d=dic({"k2":"v2"})
    >>> dr=d.update({"k1":"v1"})
    >>> self.assertEqual(d, dr)

List class 'liste' with 'return self' functionality and integrated 'map', 'reduce' and 'filter' functions:

    >>> l=liste()
    >>> lr=l.extend([1,2,3])
    >>> self.assertEqual(len(l), 3)
    >>> self.assertEqual(l, lr)
    
    >>> f=lambda x:x+10
    
    >>> lm=l.map(f)
    >>> self.assertEqual(lm, [11, 12, 13])
    >>> self.assertEqual(l, [11, 12, 13])

Erlang style function dispatch:

>>> @pattern('male', str)
... def greet_male(p1, p2):
... 	return "Hello M. %s!" % p2

>>> @pattern('female', str)
... def greet_female(p1, p2):
...		return "Hello Mrs. %s!" % p2

>>> @patterned
... def greet(p1, p2):
...	pass

>>> print greet("male", "Dupont")
"Hello M. Dupont!"

>>> print greet("female", "Corriveau")
"Hello Mrs. Corriveau!"

Clean looking reducers:

@pattern(False, any)
def comp_reducer_FA(p1, p2):
    return False

@pattern(str, str)
def comp_reducer_SS(p1, p2):
    if p1==p2:
        return p1
    return False

@patterned
def comp_reducer(p1, p2):
    """
    Reducer
    
    Check if all strings are equal
    """


def strings_comparator(l):
    """
    Returns the common string if all elements of 'l' are equal
    else returns False 
    """
    if len(l)<2:
        return False
    
    return reduce(comp_reducer, l)

Tests

Tests can be performed using nosetests in the root directory.

Installation

A source package is provided through the CheeseShop on http://pypi.python.org/ .

History

0.1.2 : support for function names with multiple '_'

0.1.0 : initial release

About

Python decorators for pattern matching function dispatch

Resources

Stars

Watchers

Forks

Packages

No packages published