diff --git a/pythonetc/README.md b/pythonetc/README.md
index 27ffb30..45d7ac0 100644
--- a/pythonetc/README.md
+++ b/pythonetc/README.md
@@ -54,3 +54,4 @@ More:
1. ./dynamic-class-attribute.md (08 October 2020, 18:00)
1. ./zipapp.md (13 October 2020, 18:00)
1. ./new-init.md (15 October 2020, 18:00)
+1. ./sentinel.md (20 October 2020, 18:00)
diff --git a/pythonetc/sentinel.md b/pythonetc/sentinel.md
new file mode 100644
index 0000000..35f7f79
--- /dev/null
+++ b/pythonetc/sentinel.md
@@ -0,0 +1,23 @@
+Some functions can accept as an argument value of any type or no value at all. If you set the default value to `None` you can't say if `None` was explicitly passed or not. For example, the [default value](https://docs.python.org/3/library/argparse.html#default) for [argparse.ArgumentParser.add_argument](https://docs.python.org/3/library/argparse.html#the-add-argument-method). For this purpose, you can create a new object and then use `is` check:
+
+```python
+DEFAULT = object()
+
+def f(arg=DEFAULT):
+ if arg is DEFAULT:
+ return 'no value passed'
+ return f'passed {arg}'
+
+f() # 'no value passed'
+f(None) # 'passed None'
+f(1) # 'passed 1'
+f(object()) # 'passed