Python’da listeleri, demetleri ve sözlükleri fonksiyon argümanları olarak genişletme ve iletme

Python’da listeler (diziler), demetler ve sözlükler genişletilebilir (paketlenmemiş) ve bunların ilgili öğeleri fonksiyon argümanları olarak birlikte iletilebilir.

Bir işlevi çağırırken, bağımsız değişkeni listeler ve demetler için * ve sözlükler için ** ile belirtin. Yıldız sayısını not edin *.

Aşağıdaki ayrıntılar burada açıklanmıştır.

  • * (bir yıldız) ile bir listeyi veya demeti genişletin (paketini açın)
    • Varsayılan bağımsız değişkenlere sahip işlevler için
    • Değişken uzunluklu bağımsız değişkenlere sahip işlevler için
  • Sözlüğü ** (iki yıldız) ile genişletin (paketini açın)
    • Varsayılan bağımsız değişkenlere sahip işlevler için
    • Değişken uzunluklu bağımsız değişkenlere sahip işlevler için

İşlevleri tanımlarken Python işlevlerinin temel kullanımı, varsayılan bağımsız değişkenler ve *,** ile değişken uzunluklu bağımsız değişkenler için aşağıdaki makaleye bakın.

* (bir yıldız) ile bir listeyi veya demeti genişletin (paketini açın)

Bir liste veya demet * ile argüman olarak belirtildiğinde, genişletilir ve her eleman ayrı bir argüman olarak iletilir.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

l = ['one', 'two', 'three']

func(*l)
# arg1 = one
# arg2 = two
# arg3 = three

func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three

t = ('one', 'two', 'three')

func(*t)
# arg1 = one
# arg2 = two
# arg3 = three

func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three

Aşağıdaki açıklama bir liste içindir, ancak aynısı bir demet için de geçerlidir.

Öğe sayısı, bağımsız değişken sayısıyla eşleşmezse, bir TypeError hatası oluşur.

# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given

Varsayılan bağımsız değişkenlere sahip işlevler için

Varsayılan bir bağımsız değişken ayarlanırsa, öğe sayısı yetersizse varsayılan bağımsız değişken kullanılır. Eleman sayısı çok fazlaysa TypeError hatası oluşur.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3

func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3

# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given

Değişken uzunluklu bağımsız değişkenlere sahip işlevler için

Değişken uzunluklu bir bağımsız değişken ayarlanırsa, konumsal bağımsız değişkenin öğesinden sonraki tüm öğeler, değişken uzunluklu bağımsız değişkene iletilir.

def func_args(arg1, *args):
    print('arg1 =', arg1)
    print('args =', args)

func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)

func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')

func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')

Sözlüğü ** (iki yıldız) ile genişletin (paketini açın)

Bir sözlük diktesi ** ile bir bağımsız değişken olarak belirtildiğinde, öğe anahtarları bağımsız değişken adları olarak ve değerler bağımsız değişken değerleri olarak genişletilir ve her biri ayrı bir bağımsız değişken olarak iletilir.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}

func(**d)
# arg1 = one
# arg2 = two
# arg3 = three

func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three

Bağımsız değişken adıyla eşleşen bir anahtar yoksa veya eşleşmeyen bir anahtar varsa, TypeError hatası oluşur.

# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'

Varsayılan bağımsız değişkenlere sahip işlevler için

Yalnızca sözlükteki tuşlarla eşleşen bağımsız değişken adlarının değerlerinin güncellendiği resim.

Bağımsız değişken adıyla eşleşmeyen bir anahtar, TypeError hatasına neden olur.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3

func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three

# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'

Değişken uzunluklu bağımsız değişkenlere sahip işlevler için

Değişken uzunluklu bağımsız değişkenler ayarlanırsa, bağımsız değişken olarak belirtilen bağımsız değişken adından başka bir anahtara sahip herhangi bir öğe, değişken uzunluklu bağımsız değişkene iletilir.

def func_kwargs(arg1, **kwargs):
    print('arg1 =', arg1)
    print('kwargs =', kwargs)

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}

func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}
Copied title and URL