web-dev-qa-db-fra.com

Obtenez une liste des variables actuelles dans Julia Lang

Je suis nouveau à Julia Lang. Je viens de l'arrière-plan de Matlab.

Dans Matlab, en appuyant sur la commande whos j'obtiendrai toutes les variables dans la portée actuelle; et aussi, je peux les stocker dans une autre variable comme x=whos; Existe-t-il de telles commandes dans Julia? Exemple de code dans Matlab:

>> a=3;
>> b=4;
>> whos
Variables in the current scope:

Attr Name        Size                     Bytes  Class
==== ====        ====                     =====  ===== 
    a            1x1                          8  double
    b            1x1                          8  double
    prefix       1x16                        16  char

Total is 18 elements using 32 bytes.
48
vinu k n

Je ne sais pas s'il y a quelque chose de mieux, mais

names(Main)[4:end]

semble fonctionner. Le [4:end] partie est parce qu'il comprend :Main, :Core et :Base ce que je pense que vous ne voudriez pas. J'espère qu'ils seront toujours au début.

12
ivarne

Vous pouvez utiliser les fonctions whos de Julia tout comme la commande Matlab.

Julia> whos()
Base                          Module
Core                          Module
Main                          Module
ans                           Nothing

Julia> x = 5
5

Julia> whos()
Base                          Module
Core                          Module
Main                          Module
ans                           Int64
x                             Int64

Tous les modules (packages/bibliothèques) que vous importez dans votre portée locale (en utilisant using) s'afficheront également dans la liste (comme Modules, comme Base, Core et Main ci-dessus).

De plus, vous pouvez vous renseigner sur les noms exportés par les modules. Base est le module contenant la bibliothèque standard.

Julia> whos(Base)
!                             Function
!=                            Function
!==                           Function
$                             Function
%                             Function
&                             Function
*                             Function
+                             Function
.... (lots and lots more)

Étant donné que ce résultat défile loin de mon écran, vous pouvez comprendre pourquoi vous souhaitez filtrer les résultats. Pour cela, vous pouvez utiliser des expressions régulières. (Pour plus d'informations sur les expressions régulières de Julia, voir cette section du manuel )

Julia> whos(r"M")
Main                          Module

Julia> whos(Base, r"Match"i)
DimensionMismatch             DataType
RegexMatch                    DataType
each_match                    Function
eachmatch                     Function
ismatch                       Function
match                         Function
matchall                      Function

Je ne connaissais pas la fonction whos avant de demander, alors merci de m'avoir aidé à apprendre quelque chose de nouveau aussi. :)

Julia numéro # 339 sur github concerne l'ajout de tailles de mémoire à la sortie whos. Il fait également référence au fait que whos renvoie une valeur plutôt que de simplement imprimer les informations.

36
astrieanna

Une mise à jour:

whos() 

... ne fonctionne ni dans iJulia ni à l'invite de commande dans Julia-1.0.0.

Il fonctionne cependant dans Julia-0.6.4.

D'autre part,

varinfo()

.... imprime des informations sur les variables globales exportées dans un module. Par exemple,

Julia-1.0> varinfo()
name                    size summary                        
–––––––––––––––– ––––––––––– –––––––––––––––––––––––––––––––
Base                         Module                         
Core                         Module                         
InteractiveUtils 154.271 KiB Module                         
Main                         Module                         
PyPlot           781.872 KiB Module                         
ans               50.323 KiB Plots.Plot{Plots.PyPlotBackend}
myrepl               0 bytes typeof(myrepl)                 
x                   88 bytes 1×6 Array{Int64,2}             
y                    0 bytes typeof(y)                      

J'espère que cela vous sera utile.

14
Long short

whos() n'est pas disponible dans les nouvelles versions de Julia (à partir de 1.0). Utilisez varinfo() à la place. Par exemple, varinfo(Core,r".*field.*")

1
teu

Depuis la version 1.1, il existe également la macro @locals

La macro expérimentale Base. @ Locals renvoie un dictionnaire des noms et valeurs des variables locales actuelles

Notes de version

0
TimD