#  2018 iT 邦幫忙鐵人賽 0

## 概觀

• 定義`__bool__()`且回傳`False`
• 定義`__len__()`且回傳`0`

## 不成立名單

built-in objects

category what
constants None
False
numeric type 0
0.0
0j
Decimal(0)
Fraction(0, 1)
empty sequences and collections ''
()
[]
{}
set()
range(0)
``````from decimal import Decimal
from fractions import Fraction

def test_if_behavior(test_obj):
is_true = '{} is ture'
is_false = '{} is false'
if test_obj:
print(is_true.format(test_obj))
else:
print(is_false.format(test_obj))

def show_type(test_obj):
print('type of {} is {}'.format(test_obj, type(test_obj)))

constants = None, False
for c in constants:
show_type(c)
test_if_behavior(c)

# type of None is <class 'NoneType'>
# None is false
# type of False is <class 'bool'>
# False is false

numeric_type = 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
for n in numeric_type:
show_type(n)
test_if_behavior(n)

# type of 0 is <class 'int'>
# 0 is false
# type of 0.0 is <class 'float'>
# 0.0 is false
# type of 0j is <class 'complex'>
# 0j is false
# type of 0 is <class 'decimal.Decimal'>
# 0 is false
# type of 0 is <class 'fractions.Fraction'>
# 0 is false

empty_sequences_and_collections = '', (), [], {}, set(), range(0)
for esc in empty_sequences_and_collections:
print('len of {} is {}'.format(esc, len(esc)))
show_type(esc)
test_if_behavior(esc)

# len of  is 0
# type of  is <class 'str'>
#  is false
# len of () is 0
# type of () is <class 'tuple'>
# () is false
# len of [] is 0
# type of [] is <class 'list'>
# [] is false
# len of {} is 0
# type of {} is <class 'dict'>
# {} is false
# len of set() is 0
# type of set() is <class 'set'>
# set() is false
# len of range(0, 0) is 0
# type of range(0, 0) is <class 'range'>
# range(0, 0) is false
``````

• python 官方