Como passar um número variável de argumentos para uma função?

Praticando questões de entrevista de código em Python

Kirill Smirnov

Data Science Consultant, Altran

Tipos de argumentos

Há dois tipos de argumentos:

 

Praticando questões de entrevista de código em Python

Tipos de argumentos

Há dois tipos de argumentos:

  • argumentos posicionais

 

Praticando questões de entrevista de código em Python

Tipos de argumentos

Há dois tipos de argumentos:

  • argumentos posicionais
  • argumentos nomeados

 

Praticando questões de entrevista de código em Python

Tipos de argumentos

Há dois tipos de argumentos:

  • argumentos posicionais
  • argumentos nomeados

 

Praticando questões de entrevista de código em Python

Argumentos posicionais

def func_with_pos_args(arg1, arg2):

    pass
def multiply(x, y):
    return x * y
multiply(2, 3)
6
Praticando questões de entrevista de código em Python

*args

def func_with_var_pos_args(*args):

    pass
func_with_var_pos_args(1, 2, 'hello')
Praticando questões de entrevista de código em Python

*args

def func_with_var_pos_args(*args):

    print(args)
func_with_var_pos_args(1, 2, 'hello')
(1, 2, 'hello')
Praticando questões de entrevista de código em 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'
Praticando questões de entrevista de código em Python

Redefinindo 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
Praticando questões de entrevista de código em Python

Redefinindo 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
Praticando questões de entrevista de código em Python

Outro uso do asterisco simples *

def multiply(num1, num2, num3):
    return num1 * num2 * num3
multiply(1, 2, 3)
6
Praticando questões de entrevista de código em Python

Outro uso do asterisco simples *

def multiply(num1, num2, num3):
    return num1 * num2 * num3
nums = (2, 3, 4)
multiply(*nums)
24
nums = [2, 3]
multiply(*nums, 4)
24
Praticando questões de entrevista de código em Python

Outro uso do asterisco simples *

def multiply(*args):
    result = 1
    for arg in args:
        result = result * arg
    return result
nums = (2, 3, 4, 5)
multiply(*nums)
120
Praticando questões de entrevista de código em Python

Tipos de argumentos

Há dois tipos de argumentos:

  • argumentos posicionais
  • argumentos nomeados

 

Praticando questões de entrevista de código em Python

Argumentos nomeados

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
Praticando questões de entrevista de código em Python

Argumentos nomeados

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
Praticando questões de entrevista de código em Python

**kwargs

kwargs - argumentos nomeados

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
Praticando questões de entrevista de código em Python

Redefinindo 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
Praticando questões de entrevista de código em Python

Chamando multiply_kwargs()

multiply_kwargs(num1=1, num2=2, num3=3, num4=4)
num1 = 1
num2 = 2
num3 = 3
num4 = 4
24
Praticando questões de entrevista de código em Python

Outro uso do asterisco duplo **

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
Praticando questões de entrevista de código em Python

Outro uso do asterisco duplo **

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
Praticando questões de entrevista de código em Python

Outro uso do asterisco duplo **

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
Praticando questões de entrevista de código em Python

Outro uso do asterisco duplo **

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
Praticando questões de entrevista de código em Python

Outro uso do asterisco duplo **

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
Praticando questões de entrevista de código em Python

Ordem dos argumentos

def func(                                           ):
Praticando questões de entrevista de código em Python

Ordem dos argumentos

def func(arg1, arg2,                                ):
  • arg1, arg2 - argumentos posicionais
Praticando questões de entrevista de código em Python

Ordem dos argumentos

def func(arg1, arg2, *args,                         ):
  • arg1, arg2 - argumentos posicionais
  • *args - argumentos posicionais de tamanho variável
Praticando questões de entrevista de código em Python

Ordem dos argumentos

def func(arg1, arg2, *args, kwarg1, kwarg2,         ):
  • arg1, arg2 - argumentos posicionais
  • *args - argumentos posicionais de tamanho variável
  • kwarg1, kwarg2 - argumentos nomeados
Praticando questões de entrevista de código em Python

Ordem dos argumentos

def func(arg1, arg2, *args, kwarg1, kwarg2, **kwargs):
  • arg1, arg2 - argumentos posicionais
  • *args - argumentos posicionais de tamanho variável
  • kwarg1, kwarg2 - argumentos nomeados
  • **kwargs - argumentos nomeados de tamanho variável
def func(arg1, arg2, *args):

def func(arg1, arg2, **kwargs):
def func(*args, **kwargs):
Praticando questões de entrevista de código em Python

Vamos praticar!

Praticando questões de entrevista de código em Python

Preparing Video For Download...