Cum se transmite un număr variabil de argumente unei funcții?

Exersarea întrebărilor de interviu de programare în Python

Kirill Smirnov

Data Science Consultant, Altran

Tipuri de argumente

Există două tipuri de argumente:

 

Exersarea întrebărilor de interviu de programare în Python

Tipuri de argumente

Există două tipuri de argumente:

  • argumente poziționale

 

Exersarea întrebărilor de interviu de programare în Python

Tipuri de argumente

Există două tipuri de argumente:

  • argumente poziționale
  • argumente cuvânt-cheie

 

Exersarea întrebărilor de interviu de programare în Python

Tipuri de argumente

Există două tipuri de argumente:

  • argumente poziționale
  • argumente cuvânt-cheie

 

Exersarea întrebărilor de interviu de programare în Python

Argumente poziționale

def func_with_pos_args(arg1, arg2):

    pass
def multiply(x, y):
    return x * y
multiply(2, 3)
6
Exersarea întrebărilor de interviu de programare în Python

*args

def func_with_var_pos_args(*args):

    pass
func_with_var_pos_args(1, 2, 'hello')
Exersarea întrebărilor de interviu de programare în Python

*args

def func_with_var_pos_args(*args):

    print(args)
func_with_var_pos_args(1, 2, 'hello')
(1, 2, 'hello')
Exersarea întrebărilor de interviu de programare în Python

*args

def func_with_var_pos_args(*args):
    for arg in args:
        print(arg)
func_with_var_pos_args(1, 2, 'hello')
1
2
'hello'
Exersarea întrebărilor de interviu de programare în Python

Redefinirea multiply()

def multiply(*args):
    result = 1
    for arg in args:
        result = result * arg
    return result
multiply(1, 2, 3):
6
multiply(1, 2, 3, 4)
24
Exersarea întrebărilor de interviu de programare în Python

Redefinirea multiply()

def multiply(*nums):
    result = 1
    for num in nums:
        result = result * num
    return result
multiply(1, 2, 3):
6
multiply(1, 2, 3, 4)
24
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a asteriscului simplu *

def multiply(num1, num2, num3):
    return num1 * num2 * num3
multiply(1, 2, 3)
6
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a asteriscului simplu *

def multiply(num1, num2, num3):
    return num1 * num2 * num3
nums = (2, 3, 4)
multiply(*nums)
24
nums = [2, 3]
multiply(*nums, 4)
24
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a asteriscului simplu *

def multiply(*args):
    result = 1
    for arg in args:
        result = result * arg
    return result
nums = (2, 3, 4, 5)
multiply(*nums)
120
Exersarea întrebărilor de interviu de programare în Python

Tipuri de argumente

Există două tipuri de argumente:

  • argumente poziționale
  • argumente cuvânt-cheie

 

Exersarea întrebărilor de interviu de programare în Python

Argumente cuvânt-cheie

def func_with_kwargs(arg1=1, arg2=2):
def multiply(x=1, y=2):
    print(str(x) + ' : ' + str(y))
multiply(2, 3)
2 : 3
multiply()
1 : 2
Exersarea întrebărilor de interviu de programare în Python

Argumente cuvânt-cheie

def func_with_kwargs(arg1=1, arg2=2):
def multiply(x=1, y=2):
    print(str(x) + " : " + str(y))
multiply(y=5, x=3)
3 : 5
Exersarea întrebărilor de interviu de programare în Python

**kwargs

kwargs - argumente cuvânt-cheie

def func_with_var_kwargs(**kwargs):
    print(kwargs)
func_with_var_kwargs(arg1=1, arg2=2, arg3=3)
{arg1: 1, arg2: 2, arg3: 3}
func_with_var_kwargs(1, arg2=2, arg3=3)
TypeError
Exersarea întrebărilor de interviu de programare în Python

Redefinirea multiply()

def multiply_kwargs(**kwargs):
    result = 1
    for (key, value) in kwargs.items():
        print(key + ' = ' + str(value))
        result = result * value
    return result
def multiply(*args):
    result = 1
    for arg in args:
        result = result * arg
    return result
Exersarea întrebărilor de interviu de programare în Python

Apelarea multiply_kwargs()

multiply_kwargs(num1=1, num2=2, num3=3, num4=4)
num1 = 1
num2 = 2
num3 = 3
num4 = 4
24
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a dublului asterisc **

def multiply(num1=1, num2=2, num3=3):
    print('num1 = ' + str(num1))
    print('num2 = ' + str(num2))
    print('num3 = ' + str(num3))
    return num1 * num2 * num3
multiply()
num1 = 1
num2 = 2
num3 = 3
6
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a dublului asterisc **

def multiply(num1=1, num2=2, num3=3):
    print('num1 = ' + str(num1))
    print('num2 = ' + str(num2))
    print('num3 = ' + str(num3))
    return num1 * num2 * num3
nums = {'num1': 10, 'num2': 20, 'num3': 30}
multiply(**nums)
num1 = 10
num2 = 20
num3 = 30
6000
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a dublului asterisc **

def multiply(num1=1, num2=2, num3=3):
    print('num1 = ' + str(num1))
    print('num2 = ' + str(num2))
    print('num3 = ' + str(num3))
    return num1 * num2 * num3
nums = {'num1': 10, 'num3': 30}
multiply(**nums)
num1 = 10
num2 = 2
num3 = 30
600
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a dublului asterisc **

def multiply(num1=1, num2=2, num3=3):
    print('num1 = ' + str(num1))
    print('num2 = ' + str(num2))
    print('num3 = ' + str(num3))
    return num1 * num2 * num3
nums = {'NUM10': 1, 'num2': 2, 'num3': 3}
multiply(**nums)
TypeError
Exersarea întrebărilor de interviu de programare în Python

Alt mod de utilizare a dublului asterisc **

def multiply_kwargs(**kwargs):
    result = 1
    for (key, value) in kwargs.items():
        print(key + ' = ' + str(value))
        result = result * value
    return result
nums = {
    'num1': 2, 'num2': 3,
    'num3': 4, 'num4': 5
}
multiply_kwargs(**nums)
num1 = 2
num2 = 3
num3 = 4
num4 = 5
120
Exersarea întrebărilor de interviu de programare în Python

Ordinea argumentelor

def func(                                           ):
Exersarea întrebărilor de interviu de programare în Python

Ordinea argumentelor

def func(arg1, arg2,                                ):
  • arg1, arg2 - argumente poziționale
Exersarea întrebărilor de interviu de programare în Python

Ordinea argumentelor

def func(arg1, arg2, *args,                         ):
  • arg1, arg2 - argumente poziționale
  • *args - argumente poziționale de dimensiune variabilă
Exersarea întrebărilor de interviu de programare în Python

Ordinea argumentelor

def func(arg1, arg2, *args, kwarg1, kwarg2,         ):
  • arg1, arg2 - argumente poziționale
  • *args - argumente poziționale de dimensiune variabilă
  • kwarg1, kwarg2 - argumente cuvânt-cheie
Exersarea întrebărilor de interviu de programare în Python

Ordinea argumentelor

def func(arg1, arg2, *args, kwarg1, kwarg2, **kwargs):
  • arg1, arg2 - argumente poziționale
  • *args - argumente poziționale de dimensiune variabilă
  • kwarg1, kwarg2 - argumente cuvânt-cheie
  • **kwargs - argumente cuvânt-cheie de dimensiune variabilă
def func(arg1, arg2, *args):

def func(arg1, arg2, **kwargs):
def func(*args, **kwargs):
Exersarea întrebărilor de interviu de programare în Python

Să exersăm!

Exersarea întrebărilor de interviu de programare în Python

Preparing Video For Download...