Skip to content

boppreh/replace_me

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

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

replace_me

Description

Modify your own source code with this piece of Python black magic.

When a piece of code calls replace_me(value), that line will be replaced with the given value. If you want to insert a comment and keep the line that inserted it, use insert_comment(value). There's also test(value), which becomes test(value, expected) to ensure that the result does not change in future iterations, and hardcode_me(value), which replaces only that part with the hardcoded result of the expression.

It's not true self-modification because the changes are not executed until the next run, but it still has its uses.

ATTENTION: Calling these functions will modify your source code. Keep backups.

Installation

pip install replace_me

or

download the single file

Why?

  • To document example values.
  • As a poor man's debugger, inserting a watched value as a comment.
  • To quickly fetch and check values, REPL-style.
  • To generate a piece of tricky code.
  • To hardcode short values that are tricky to compute, slow, or based on random sources.
  • To freeze the behavior of an expression (test(expression) becomes test(expression, hardcoded_result)).
  • https://imgur.com/r/wtf/OpFcp

Example

from replace_me import replace_me, insert_comment

# If you run this program, this source code will change.

# These two lines will become the same:
# Hello World
replace_me("Hello World", as_comment=True)

# Code generation. Creates a hard coded list of 100 numbers.
replace_me('numbers = ' + str(list(range(100))))

import random
# The next comment will be replaced with a random number.
insert_comment(random.randint(1, 10))
# ??

# Pseudo-quine, replaces the line with itself.
quine = 'replace_me(quine)'
replace_me(quine)

test(1+1)
# becomes
test(1+1, 2)
# which asserts the values are equal.

assert hardcode_me(1+1) == 2
# becomes
assert 2 == 2

About

Modify your own source code with this piece of Python black magic

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages