[PYTHON] Qu'est-ce qu'une portée lexicale / une portée dynamique?

En premier lieu, il existe deux types de portées.

  1. Portée lexicale
  2. Portée dynamique

Chacune est une spécification de référence de variable et la portée lexicale est adoptée dans de nombreux langages majeurs tels que Ruby, Java, Javascript et python.

Exemple de portée lexicale

C'est très simple. Voir le code ci-dessous.


var =  'Je suis au top'

def a_method
  return var 
end

def b_method
  var = 'Je suis le contenu de l'objet'
  return var
end

a_method 
#-> 'Je suis au top'

C'est naturel lors de l'écriture de Ruby etc., mais il n'est pas possible de faire référence à la var de b_method depuis a_method. Il s'agit de `` portée lexicale '' ... !!! Cependant, il semble qu'il existe des langages dans le monde où la portée des variables est déterminée lorsqu'une fonction est évaluée. Il semble qu'on les appelle des portées dynamiques, mais par exemple, Lisp et Emacs semblent adopter ces portées.

Exemple de portée dynamique

Ce n'est pas Ruby. Ruby dynamique qui utilise une portée dynamique de type Ruby. (Il n'y a rien de tel, mais c'est un mot inventé.)


def a_method
  p var
end


def b_method
  var = 'Je suis B'
  a_method
end

def c_method
  a_method
end

b_method
#-> 'Je suis B'

c_method
#-> undefined variable 'var'  

Sera. Autrement dit, la portée est déterminée lorsque vous évaluez la fonction ***, et non la portée lorsque vous définissez la fonction. *** ***

Avantages de la portée dynamique

Il semble facile d'implémenter le langage w Pourquoi Lisp, Emacs, etc. l'ont-ils adopté? Il semble que cela soit écrit de cette façon. Lol

Recommended Posts

Qu'est-ce qu'une portée lexicale / une portée dynamique?
Qu'est-ce qu'une distribution?
Qu'est-ce qu'un terminal?
Qu'est-ce qu'un hacker?
Qu'est-ce qu'un pointeur?
Qu'est-ce qu'un arbre de décision?
Qu'est-ce qu'un changement de contexte?
Qu'est-ce qu'un super utilisateur?
Qu'est-ce qu'un appel système
[Définition] Qu'est-ce qu'un cadre?
Qu'est-ce qu'une fonction de rappel?
[Python] Qu'est-ce qu'une fonction zip?
[Python] Qu'est-ce qu'une instruction with?
Qu'est-ce que le réseau neuronal convolutif?
Qu'est-ce qu'un chien? Volume d'installation de Django
Qu'est-ce qu'un chien? Volume d'installation Python
Qu'est-ce que l'espace de noms
Qu'est-ce que copy.copy ()
Qu'est-ce que Django? .. ..
Qu'est-ce que dotenv?
Qu'est-ce que POSIX
Qu'est-ce que Linux
Qu'est-ce que le klass?
Qu'est-ce que SALOME?
Qu'est-ce que Linux?
Qu'est-ce que python
Qu'est-ce que l'hyperopt?
Qu'est-ce que Linux
Qu'est-ce que pyvenv
Qu'est-ce que __call__
Qu'est-ce que Linux
Qu'est-ce que Python
Qu'est-ce qu'un chien? Django - Créer un modèle utilisateur personnalisé
Qu'est-ce qu'un chien? Défiez le modèle Django! Le volume
C'est un Mac. Qu'est-ce que la commande Linux Linux?
Qu'est-ce qu'un chien? Django - Créer un modèle utilisateur personnalisé 2
Dites-moi ce qu'est une cartographie équiangulaire, Python!
Qu'est-ce que le F-Score de Piotroski?
Qu'est-ce qu'un chien? Volume de transmission POST à l'aide de Django--forms.py
Qu'est-ce que Raspberry Pi?
Qu'est-ce que Calmar Ratio?
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django --startapp
[Tutoriel PyTorch ①] Qu'est-ce que PyTorch?
Qu'est-ce que le réglage des hyper paramètres?
Qu'est-ce que JSON? .. [Remarque]
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django - startproject
À quoi sert Linux?
Qu'est-ce que l'apprentissage d'ensemble?
Qu'est-ce que TCP / IP?
Qu'est-ce qu'un moteur de recommandation? Résumé des types
Qu'est-ce que Dieu? Créez un chatbot simple avec python
Qu'est-ce que __init__.py de Python?
Qu'est-ce qu'un itérateur?
Qu'est-ce que UNIT-V Linux?
[Python] Qu'est-ce que virtualenv
Pour moi en tant que débutant Django (2) - Qu'est-ce que MTV?
Qu'est-ce que l'apprentissage automatique?
Quelle est la différence entre les liens symboliques et les liens durs?
Qu'est-ce que Mini Sam ou Mini Max?