Remarque: les fonctions et méthodes avec _
au début sont privées, il n'est donc pas bon d'y accéder de l'extérieur. (Pycharm donne un avertissement)
Foo.pm
package Foo;
use v5.10;
use strict;
use warnings;
use Exporter 'import';
our @EXPORT_OK = qw/pub_func/; # pub_Autoriser l'exportation des fonctions func
sub pub_func {
say "pub_func";
}
sub _pri_func {
say "_pri_func";
}
1;
main.pl
#!/usr/bin/perl
use v5.10;
use strict;
use warnings;
use FindBin qw($Bin);
use lib "$Bin";
use Foo qw/pub_func/; # pub_Importez la fonction func dans l'espace de noms
sub main {
pub_func(); # pub_func
Foo::pub_func(); # pub_func
Foo::_pri_func(); # _pri_func
}
if ($0 eq __FILE__) {
main();
}
foo.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, division, absolute_import
def pub_func():
print("pub_func")
def _pri_func():
print("_pri_func")
main.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, division, absolute_import
import foo
from foo import pub_func # pub_Importez la fonction func dans l'espace de noms
def main():
pub_func() # pub_func
foo.pub_func() # pub_func
foo._pri_func() # _pri_func
#Pycharm dans ma tête_Fonctions avec"Access to a protected member _pri_func of a module"Vous donnera un avertissement
if __name__ == '__main__':
main()
Pour savoir comment écrire à partir du module import name1, name2
Nous ne le recommandons pas car il peut importer plusieurs noms de fonction identiques dans l'espace de noms comme suit.
Bons idiomes Python, mauvais idiomes
Cette fois, c'est un «pas bon» beaucoup plus faible que le précédent «pas bon», mais il vaut toujours mieux l'arrêter à moins qu'il n'y ait une bonne raison. Cela ne fonctionne généralement pas car vous finissez par avoir un objet qui vit dans deux espaces de noms distincts.
main2.pl
#!/usr/bin/perl
use v5.10;
use strict;
use warnings;
use FindBin qw($Bin);
use lib "$Bin";
#use Foo qw/pub_func/;
use Foo;
sub pub_func {
return Foo::pub_func(@_);
}
sub main {
pub_func(); # pub_func
Foo::pub_func(); # pub_func
Foo::_pri_func(); # _pri_func
}
if ($0 eq __FILE__) {
main();
}
En faisant cela, l'argument et la valeur de retour peuvent être jetés dans un cercle, de sorte que le nom de la fonction peut être changé librement. Je ne savais pas comment lancer tous les arguments dans la version Python, alors je l'ai omis. (Je me demande si je dois tout écrire correctement)
Recommended Posts