1
resposta

Qual das duas formas ?

Fiz de duas formas, a primeira foi uma função chamando a outra:


def envia_convite (nomm):
 indo = "Enviando convite para" 
 enviando = "%s %s" %(indo,nomm)
 return enviando

def gera_nome_convite (nome):
 string1 = nome [0:4]
 tam = len(nome)
 posic = tam - 4
 string2 = nome [posic:tam]
 string3 = '%s %s'  % (string1, string2)
 ss = envia_convite(string3)
 return ss

def processa_convite (nomee): 
 pronto = gera_nome_convite (nomee)
 return pronto

depois de definir as funções todas, eu chamo elas no processa_convite:

processa_convite ('elvis presley')

output teórico:'Enviando convite para elvi sley' mas na verdade, como não mando printar em nenhum momento, ele não printaria, printaria? eu poderia atribuir isso a uma variavel, e aí sim printar a variável que receberia o retorno final, que seria essa frase inteira, "enviando convite para elvi sley"


A outra forma foi colocando pra printar na própria função envia_convite, pra que ao chamá-la, já viesse impresso sem que eu tenha que atribuir a uma variável (e printá-la posteriormente)..:

def envia_convite (nomm):
 indo = "Enviando convite para" 
 enviando = "%s %s" %(indo,nomm)
 print (enviando)

`def gera_nome_convite (nome):
`string1 = nome [0:4]
 tam = len(nome)
 posic = tam - 4
 string2 = nome [posic:tam]
 string3 = '%s %s'  % (string1, string2)
 ss = envia_convite(string3)
 return ss

def processa_convite (nomee): 
 pronto = gera_nome_convite (nomee)
 envia_convite (pronto)

depois de definir as funções todas, eu chamo elas no processa_convite:

processa_convite ('elvis presley')

output: 'Enviando convite para elvi sley Enviando convite para None'

por que ? não consigo entender.

1 resposta

Oi Amauri, tudo bom?

eu poderia atribuir isso a uma variavel, e aí sim printar a variável que receberia o retorno final, que seria essa frase inteira, "enviando convite para elvi sley"

Poderia, e acredito que funcionaria normal.

Quanto ao caso mistico do envio com None, dei uma procurada aqui e também não encontrei nenhum tipo de problema parecido no Python. Você está chamando a função processa_convite apenas uma vez?

Uma forma de remediar o problema é verificar se o valor passado não é vazio antes de printar. Algo como:

def envia_convite (nomm):
  if nomm:
     indo = "Enviando convite para" 
     enviando = "%s %s" %(indo,nomm)
     print (enviando)

Outra coisa, o nome do parametro não precisa mudar na declaração de um método pro outro. Você pode chamar todos de nome porque eles estão em escopos diferentes =)

Abraço