関数の中の関数

Pythonは非常に柔軟な言語であり、コード内のほぼどこにでも関数を作成することができます。ifブロックやforループ、また他の関数の中で新しい関数を定義することもできます:
def process(name1, name2, name3):
    def greet(name):
        if len(name) < 5:
            print(f'Hi, {name}')
        else:
            print('The name is too long')
    greet(name1)
    greet(name2)
    greet(name3)

process('Anna', 'Bob', 'Daniel')
# Hi, Anna
# Hi, Bob
# The name is too long
ここでは、新しい関数greet()を定義して、process()関数内で3つの名前すべてに対して同じif文とelse文を繰り返さないようにしています。
内側の関数は、それより上で定義されたすべての変数にアクセスできることに注意してください。つまり、この例では、関数greet()name1name2name3にアクセスできます。

チャレンジ

関数を修正して、渡された数のすべての約数のリストを返すようにしてください。1つの数の約数のリストを返す内側の関数を追加しましょう。
def divisors(*numbers):
    ...

print(divisors(4, 5))         # [1, 2, 4, 1, 5]
print(divisors(3))            # [1, 3]
print(divisors(6, 8))         # [1, 2, 3, 6, 1, 2, 4, 8]
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue