93 lines
1.8 KiB
Python
93 lines
1.8 KiB
Python
"""
|
|
match_cities.py
|
|
"""
|
|
|
|
# tag::CITY[]
|
|
import typing
|
|
|
|
class City(typing.NamedTuple):
|
|
continent: str
|
|
name: str
|
|
country: str
|
|
|
|
|
|
cities = [
|
|
City('Asia', 'Tokyo', 'JP'),
|
|
City('Asia', 'Delhi', 'IN'),
|
|
City('North America', 'Mexico City', 'MX'),
|
|
City('North America', 'New York', 'US'),
|
|
City('South America', 'São Paulo', 'BR'),
|
|
]
|
|
# end::CITY[]
|
|
|
|
# tag::ASIA[]
|
|
def match_asian_cities():
|
|
results = []
|
|
for city in cities:
|
|
match city:
|
|
case City(continent='Asia'):
|
|
results.append(city)
|
|
return results
|
|
# end::ASIA[]
|
|
|
|
# tag::ASIA_POSITIONAL[]
|
|
def match_asian_cities_pos():
|
|
results = []
|
|
for city in cities:
|
|
match city:
|
|
case City('Asia'):
|
|
results.append(city)
|
|
return results
|
|
# end::ASIA_POSITIONAL[]
|
|
|
|
|
|
# tag::ASIA_COUNTRIES[]
|
|
def match_asian_countries():
|
|
results = []
|
|
for city in cities:
|
|
match city:
|
|
case City(continent='Asia', country=cc):
|
|
results.append(cc)
|
|
return results
|
|
# end::ASIA_COUNTRIES[]
|
|
|
|
# tag::ASIA_COUNTRIES_POSITIONAL[]
|
|
def match_asian_countries_pos():
|
|
results = []
|
|
for city in cities:
|
|
match city:
|
|
case City('Asia', _, country):
|
|
results.append(country)
|
|
return results
|
|
# end::ASIA_COUNTRIES_POSITIONAL[]
|
|
|
|
|
|
def match_india():
|
|
results = []
|
|
for city in cities:
|
|
match city:
|
|
case City(_, name, 'IN'):
|
|
results.append(name)
|
|
return results
|
|
|
|
|
|
def match_brazil():
|
|
results = []
|
|
for city in cities:
|
|
match city:
|
|
case City(country='BR', name=name):
|
|
results.append(name)
|
|
return results
|
|
|
|
|
|
|
|
def main():
|
|
tests = ((n, f) for n, f in globals().items() if n.startswith('match_'))
|
|
|
|
for name, func in tests:
|
|
print(f'{name:15}\t{func()}')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|