Hinweis: Funktionen und Methoden mit "_" am Anfang sind privat, daher ist es nicht gut, von außen darauf zuzugreifen. (Pycharm warnt)
Foo.pm
package Foo;
use v5.10;
use strict;
use warnings;
use Exporter 'import';
our @EXPORT_OK = qw/pub_func/; # pub_Ermöglichen den Export von Funktionsfunktionen
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_Importieren Sie die Funktion func in den Namespace
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_Importieren Sie die Funktion func in den Namespace
def main():
pub_func() # pub_func
foo.pub_func() # pub_func
foo._pri_func() # _pri_func
#Pycharm in meinem Kopf_Funktionen mit"Access to a protected member _pri_func of a module"Wird Ihnen eine Warnung geben
if __name__ == '__main__':
main()
Zum Schreiben von from module import name1, name2
Wir empfehlen es nicht, da es möglicherweise denselben Funktionsnamen mehrmals in den Namespace importiert, wie unten gezeigt.
Gute Python-Redewendungen, schlechte Redewendungen
Dieses Mal ist es ein viel schwächeres "nicht gut" als das vorherige "nicht gut", aber es ist immer noch besser, es zu stoppen, es sei denn, es gibt einen guten Grund. Dies funktioniert normalerweise nicht, da Sie am Ende ein Objekt haben, das sich in zwei separaten Namespaces befindet.
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();
}
Auf diese Weise können das Argument und der Rückgabewert in einen Kreis geworfen werden, sodass der Funktionsname frei geändert werden kann. Ich wusste nicht, wie ich alle Argumente in der Python-Version werfen sollte, also habe ich es weggelassen. (Ich frage mich, ob ich alles richtig schreiben muss)