Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I find the location of the source code of a built-in Python method?

Tags:

python

There are many built-in Python methods that I would like to study the source code of to understand. How can I find their location on my computer? Is there some simple command that I could run either in a Python script or in my terminal on my Linux that I could use to locate a built-in method's source file?

like image 461
Rohan Avatar asked Dec 19 '15 23:12

Rohan


People also ask

Where is Python source code stored?

Python code is not compiled into machine-code. It is compiled into a special low-level intermediary language called bytecode that only CPython understands. This code is stored in . pyc files in a hidden directory and cached for execution.

Where are Python built-in functions stored?

Python stores object in heap memory and reference of object in stack. Variables, functions stored in stack and object is stored in heap.

How do I open the source code in Python?

Double-clicking a . py script will execute the script (and may not send any useful results to the screen). To view the source you can open a . py file with IDLE (which comes with Python) or even Notepad although a more advanced text editor or IDE is recommended.


2 Answers

You can usually find the source files for core python modules in the python installation folder itself. For instance, on linux, I can find the source code for os module which is a quite popular python module in this location:

/usr/lib/python2.7/os.py

If you are on windows, this is generally C:\python27\lib, but you can verify it for yourself by running which python in case of linux and where python in case of windows.

like image 50
Prahlad Yeri Avatar answered Sep 21 '22 03:09

Prahlad Yeri


To get the file location of Python from the terminal:

$ which python

But you can see the source code of a function simply by appending it with ?? (note that some functions are C compiled and not written in Python).

For example:

# Example 1:  Built in compiled function.
>>> open??
Docstring:
open(name[, mode[, buffering]]) -> file object

Open a file using the file() type, returns a file object.  This is the
preferred way to open a file.  See file.__doc__ for further information.
Type:      builtin_function_or_method

# Example 2:  Pandas function written in Python.
import pandas as pd
>>> pd.DataFrame??

Init signature: pd.DataFrame(self, data=None, index=None, columns=None, dtype=None, copy=False)
Source:
class DataFrame(NDFrame):

    """ Two-dimensional size-mutable, potentially heterogeneous tabular data
    structure with labeled axes (rows and columns). Arithmetic operations
    align on both row and column labels. Can be thought of as a dict-like
    container for Series objects. The primary pandas data structure

    Parameters
    ----------
    data : numpy ndarray (structured or homogeneous), dict, or DataFrame
        Dict can contain Series, arrays, constants, or list-like objects
    index : Index or array-like
        Index to use for resulting frame. Will default to np.arange(n) if
        no indexing information part of input data and no index provided
    columns : Index or array-like
        Column labels to use for resulting frame. Will default to
        np.arange(n) if no column labels are provided
    dtype : dtype, default None
        Data type to force, otherwise infer
    copy : boolean, default False
        Copy data from inputs. Only affects DataFrame / 2d ndarray input

    Examples
    --------
    >>> d = {'col1': ts1, 'col2': ts2}
    >>> df = DataFrame(data=d, index=index)
    >>> df2 = DataFrame(np.random.randn(10, 5))
    >>> df3 = DataFrame(np.random.randn(10, 5),
    ...                 columns=['a', 'b', 'c', 'd', 'e'])

    See also
    --------
    DataFrame.from_records : constructor from tuples, also record arrays
    DataFrame.from_dict : from dicts of Series, arrays, or dicts
    DataFrame.from_items : from sequence of (key, value) pairs
    pandas.read_csv, pandas.read_table, pandas.read_clipboard
    """

    @property
    def _constructor(self):
        return DataFrame

    _constructor_sliced = Series

    @property
    def _constructor_expanddim(self):
        from pandas.core.panel import Panel
        return Panel

    ...
like image 44
Alexander Avatar answered Sep 19 '22 03:09

Alexander