Difference between Python and IronPython

From WikiOD

Using .Net assemblies from Python code[edit | edit source]

With IronPython you can access any .net assembly which is compiled using the same or a lower version than the IronPython core.

Example: Importing a a .net assembly and class

from System import Math

Example: Using an imported class:

from System import Math
print Math.Abs(-123)

You can also load additional assemblies by using the builtin clr module.

import clr
clr.AddReference('Sample') # Sample.dll inside of the working directory.

Than just use it as any other .net or python library.

IronPython is written in pure c#[edit | edit source]

IronPython is completly written using managed .net (c#) code. So all builtin python methods and libraries (such as next(), int(), etc.) are writtin in .net.

This example shows the implementation of len() for a list of different types (only a few):


public static int len([NotNull]List/*!*/ list) {
    return list.__len__();

public static int len([NotNull]PythonTuple/*!*/ tuple) {
    return tuple.__len__();

public static int len([NotNull]PythonDictionary/*!*/ dict) {
    return dict.__len__();


If we would need some other type to count the length off, just add them in Builtin.cs and it will be available automatically.

Using generics within IronPython[edit | edit source]

IronPython enables to use generic classes and methods from the .net framework. Generics can be used with the same syntax as accessing an index. For passing more than one type-parameter, they must be separated with a comma:

l = Dictionary[int, str]()

That way we create a dictionary where keys only accepts integers and the values must be a string.

A sample usage could look like this

from System.Collections.Generic import List
lst = List[str]()
for l in lst:




When adding new items, type checking will also be performed:

lst = List[str]()

Traceback (most recent call last):

File "<stdin>", line 1, in

TypeError: expected str, got int