Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Funcionamento TweePy Cursor

Bom dia.

Estou com uma duvida do funcionamento interno do que o tw.Cursor retorna. Pois por exemplo, no código abaixo se eu executar o For duas vezes, na segunda vez não é printado nada, como se dentro de tweets não existisse mais nada para ser interado no For. Gostaria de saber o motivo disso.

tweets = tw.Cursor(api.search, 
          q = "Seila",
          since = '2019/01/01',
          lang = 'pt').items(5)
for tweet in tweets:
  print(tweet.text)
  print("Name: " + tweet.user.name)
  print("Screen name: " + tweet.user.screen_name)
  print("Localização: " + tweet.user.location)
  print('----------------------')
  print('\n\n')```
4 respostas

Olá Tiago tudo bem com você?

Bom...o laço for funciona em cima de uma condição, quando essa condição é atendida ele sai do laço.

Isso quer dizer que, ao iniciar o laço for, ele faz o que está no trecho "inicio_do_laço". Após inicializar, o for testa a condição. Se ela resultar verdadeira, o código é executado e em seguida o 'termino_de_cada_iteração" é executado. A condição é testada novamente, e se for verdadeira, executa o 'termino_de_cada_iteração" também, e assim continua até que a condição resulte no valor lógico FALSO (0) e o laço FOR termina.

Exemplo:

Contando de 1 até 10 com o laço FOR

No exemplo a seguir, apenas declaramos a variável 'count', e iniciamos ela dentro do laço for.
O primeiro teste é se '1 <= 10', como é verdadeiro, o código que imprime o número é executado.
Após o término da execução, o count é incrementado em 1. Agora count=2.

Na nova iteração, testamos a seguinte condição '2 <= 10', que resulta em valor lógico VERDADEIRO, 
por tanto o código é executado e o número 2 impresso. Agora incrementamos a variável 'count', 
que agora vale 3.

E assim por diante, até imprimirmos o valor 10 e 'count' ser incrementada e se tornando count=11.
No próximo teste, a condição agora é FALSA e o laço for termina.

Espero ter ajudado e qualquer dúvida é só perguntar!

Bom dia Victor.

O funcionamento do For eu conheço e entendo de boas. O que eu não entendi foi o funcionamento do tw.Cursor, pq sempre que intero ele em um For não segunda execução o For não executa, para isso acontecer o tw.Cursor tem q ser esvaziado após a primeira execução.

Por exemplo, se eu tenho uma var list = [1, 2, 3, 4] e intero ela em um for elemento in list, se eu executar o For um segunda vez o For irá executar normalmente, porém isso não ocorre no tw.Cursor, dando a entender que ele meio q é esvaziado na primeira execução do For. No exemplo q eu dei seria como se a var list = [1, 2, 3, 4] fosse esvaziada no primeiro For e ai na segunda execução não existisse mais elementos para se interar nessa lista.

Então minha pergunta foi mais pra confirmar minha suspeita, pois não achei documentação explicando isso.

Hummm entendi agora!

Eu encontrei uma justificativa em um fórum que tratou da seguinte maneira.

"I figured it out! It is because my geocode string has space in it. There should be no space but only comma between lat, long and radius"

Ou seja, se você retirar o espaço após a vírgula e deixar seguindo os números e vírgulas list = [1,2,3,4] teoricamente vai funcionar.

Testa e me diz aqui blz?

solução!

Olá pessoal, deixa eu tentar ajudar.

Tiago, esse comportamento que você observou de "esvaziar" , é aceitável, uma vez que o tw.Cursor está mais para um iterator do que um iterable. Olha esse exemplo:

>>> val = ['a', 'b', 'c']
>>> lista = ['a', 'b', 'c']
>>> iterator = iter(lista)
>>> for i in iterator:
...     print(i)
...
a
b
c
>>> for i in iterator:
...     print(i)
...
>>> list(iterator)
[]

Aqui mais alguns exemplos: https://www.w3schools.com/python/python_iterators.asp