J'ai organisé les réécritures que j'ai souvent utilisées après avoir écrit python.
namedtuple
Je pense que je vais utiliser la classe lorsque je veux réutiliser une structure. Cependant, je n'aimais pas beaucoup cela car cela allongerait le code.
class Twitter:
def __init__(self, account, user, followers, followings, tweets):
self.account = account
self.user = user
self.followers = followers
self.followings = followings
self.tweets = tweets
def __repr__(self):
return f"{type(self).__name__}(account={repr(self.account)}, user={repr(self.user)}, followers={repr(self.followers)}, followings={repr(self.followings)}, tweets={repr(self.tweets)})"
t = Twitter("Yuriko Koike", "@ecoyuri", 790000, 596, 3979)
print(t)
Twitter(account='Yuriko Koike', user='@ecoyuri', followers=790000, followings=596, tweets=3979)
Je pourrais écrire ceci en utilisant namedtuple: ↓
from collections import namedtuple
Twitter = namedtuple('Twitter', 'account user followers followings tweets')
t = Twitter('Yuriko Koike', '@ecoyuri', 790000, 596, 3979)
print(t)
#La sortie est la même que ci-dessus
Alors j'ai pensé que c'était très bien.
yield
Par exemple, considérez le code suivant.
def omit_stopwords(tweets):
omitted_tweets = []
for t in tweets:
#url ou@{Nom d'utilisateur}Ou#{Nom de la balise}Retirer
reg = r'https?://[\w/:%#\$&\?\(\)~\.=\+\-]+|[@@][A-Za-z0-9._-]+|[##][un-龥_Ah-Hmm_UNE-ヺ un-zA-Za-zA-Z0-9]+'
text_mod = re.sub(reg,'',t['text'])
omitted_tweets.append(text_mod)
return omitted_tweets
# get_tweets"[{'text':{tweet1},'text':{tweet2},...,'text':{tweetN}]Fonction qui renvoie des données au format"
ots = omit_stopwords(get_tweets())
for ot in ots:
print(f"analyzing the tweet: {ot}")
analyzing the tweet:Aujourd'hui 18:La livraison en direct à partir de 45 ans sera accompagnée par le gouverneur Yoshimura de la préfecture d'Osaka. ~~~
・ ・ ・
analyzing the tweet:~~~. Nous continuerons de mener des enquêtes sur le terrain pour empêcher la propagation de l'infection.
Les données des tweets, etc. sont généralement volumineuses, donc `` omitted_tweets``` est une liste assez longue, ce qui n'est pas bon en termes de mémoire et de vitesse. Dans de tels moments
def omit_stopwords(tweets):
for t in tweets:
reg = r'https?://[\w/:%#\$&\?\(\)~\.=\+\-]+|[@@][A-Za-z0-9._-]+|[##][un-龥_Ah-Hmm_UNE-ヺ un-zA-Za-zA-Z0-9]+'
text_mod = re.sub(reg,'',t['text'])
yield text_mod
ots = omit_stopwords(get_tweets())
for ot in ots:
print(f"analyzing the tweet: {ot}")
En utilisant
yield au lieu de `` `` return
comme dans Semble pouvoir. Pour preuve de cela, si vous essayez de sortir la variable ots
,
<generator object omit_stopwords_yield at 0x10f957468>
C'est un type de générateur comme
print(f"analyzing the tweet: {ots.__next__()}")
print(f"analyzing the tweet: {ots.__next__()}")
print(f"analyzing the tweet: {ots.__next__()}")
#・ ・ ・
Vous pouvez sortir les données de la liste une par une avec. (Après avoir activé l'instruction for, une erreur se produira car le générateur est épuisé.)
reg = r'[@@][A-Za-z0-9._-]+'
target_tweets = []
# @{Nom d'utilisateur}Extrayez uniquement les tweets qui ne contiennent pas
for t in get_tweets():
if not re.search(reg, t['text']):
target_tweets.append(t)
↑ est
reg = r'[@@][A-Za-z0-9._-]+'
target_tweets = [t for t in get_tweets() if not re.search(reg, t['text'])]
Je vais le mettre de manière rafraîchissante comme. Souvent utilisé lorsque vous souhaitez créer une autre liste à partir d'une liste.
Je veux donc l'utiliser de manière positive.
D'autres peuvent être ajoutés le cas échéant.
Recommended Posts