Жагсаалт, толь бичиг, толь бичгүүдийг Python дээр функцын аргумент болгон өргөжүүлэх, дамжуулах

Бизнес эрхэлдэг

Python-д жагсаалтууд (массив), залгуурууд болон толь бичгүүдийг өргөтгөх ( задлах) ба тэдгээрийн тус тусын элементүүдийг функцийн аргумент болгон дамжуулах боломжтой.

Функцийг дуудахдаа аргументыг жагсаалт, залгуурын хувьд *, толь бичигт ** тэмдэгтээр зааж өгнө үү. * одны тоог анхаарна уу.

Дараах дэлгэрэнгүй мэдээллийг энд тайлбарласан болно.

  • Жагсаалт эсвэл багцыг * (нэг одтой) дэлгэх ( задлах)
    • Өгөгдмөл аргументтай функцүүдийн хувьд
    • Хувьсах урттай аргументтай функцүүдийн хувьд
  • ** (хоёр одтой) толь бичгийг дэлгэх ( задлах)
    • Өгөгдмөл аргументтай функцүүдийн хувьд
    • Хувьсах урттай аргументтай функцүүдийн хувьд

Функцийг тодорхойлохдоо Python функцуудын үндсэн хэрэглээ, өгөгдмөл аргументууд болон *,** бүхий хувьсах уртын аргументуудыг дараах нийтлэлээс үзнэ үү.

Жагсаалт эсвэл багцыг * (нэг одтой) дэлгэх ( задлах)

Жагсаалт эсвэл залгуурыг *-тэй аргумент болгон зааж өгөхөд үүнийг өргөтгөж, элемент бүрийг тусдаа аргумент болгон дамжуулдаг.

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

Дараах тайлбар нь жагсаалтад зориулагдсан боловч tuple-д мөн адил хамаарна.

Хэрэв элементийн тоо аргументуудын тоотой таарахгүй байвал TypeError алдаа гарна.

# 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

Өгөгдмөл аргументтай функцүүдийн хувьд

Хэрэв өгөгдмөл аргументыг тохируулсан бол элементийн тоо хангалтгүй бол өгөгдмөл аргументыг ашиглана. Хэрэв элементийн тоо хэт их байвал TypeError алдаа гарна.

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

Хувьсах урттай аргументтай функцүүдийн хувьд

Хэрэв хувьсагчийн урттай аргументыг тохируулсан бол байрлалын аргументийн элементийн дараах бүх элементүүдийг хувьсагчийн урттай аргумент руу шилжүүлнэ.

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')

** (хоёр одтой) толь бичгийг дэлгэх ( задлах)

Толь бичгийн dict-ийг **-тай аргумент болгон зааж өгөх үед элементийн товчлууруудыг аргументын нэрээр, утгыг аргументийн утга болгон өргөжүүлж, тус бүрийг тус тусад нь аргумент болгон дамжуулдаг.

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

Хэрэв аргументын нэрэнд тохирох түлхүүр байхгүй эсвэл тохирохгүй түлхүүр байвал TypeError алдаа гарна.

# 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'

Өгөгдмөл аргументтай функцүүдийн хувьд

Зөвхөн толь бичгийн товчлууруудтай тохирох аргументуудын нэрсийн утгууд шинэчлэгдсэн зураг.

Аргументын нэртэй таарахгүй байгаа түлхүүр нь TypeError алдаа гаргахад хүргэдэг.

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'

Хувьсах урттай аргументтай функцүүдийн хувьд

Хэрэв хувьсагчийн урттай аргументуудыг тохируулсан бол аргумент болгон заасан аргументийн нэрээс өөр түлхүүр бүхий дурын элементийг хувьсагчийн урттай аргумент руу шилжүүлнэ.

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