Duruma göre parantezi kullanırsınız, duruma göre kullanmazsınız.
Mesela aşağıdaki fonksiyona bakın.
def f(*args):
def g():
print(*args)
return g
print(f("hello", "world")
Bu kodları çalıştırırsanız alacağınız çıktı şöyle olacak:
<function f.<locals>.g at 0x7f9751e6f0d0>
Ama fonksiyonu şu şekilde yazarsanız farklı bir sonuç alacaksınız.
def f(*args):
def g():
print(*args)
return g()
print(f("hello", "world"))
Bu kodları çalıştırırsanız alacağınız çıktı şöyle olacak:
hello world
None
Yani her iki şekilde de kodlar “doğru” çalışıyor. Ancak aşağıdaki başlıkta belirttiğiniz gibi bir durum söz konusu olduğunda içerdeki fonksiyonu parantezsiz bir şekile kullanırsınız. Bir fonksiyonu parantezsiz kullanmak aslında fonksiyonu çağırmamak demektir. Parantezsiz kullanımda bir fonksiyonu sadece referans göstermiş olursunuz.
Yani şöyle:
>>> def f(): pass
>>> f
<function f at 0x7f42f3d259d8>
Bazı durumlarda, fonksiyonu referans göstermeniz gerekir, mesela bir Thread nesnesi oluştururken, thread’in hedef alacağı fonksiyon çağrılmaz, referans gösterilir. Aynı durum Tkinter’in command
parametresine yazılan fonksiyon için de geçerli.