Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Pythonforperlprogrammers FernandoPineda 140.636 Similari;esbetweenPerl&Python • Likeperl,pythonis: – A‘scrip;ng’languagebutalsoageneralpurpose language. – Interpreted – Commentsstartwith‘#’ – Mul;pleprogrammingparadigmsaresupported • impera;ve • object-based • func;onal – Dynamicallytyped – Largepackagerepositories(CPAN,PyPI) Packages&repositories • ComprehensivePerl ArchiveNetwork(CPAN) • ~175KpackagesinCPAN • cpan • cpanm • use • PythonPackageIndex (PyPI) • ~90KpackagesinPyPI • easy_install • pip • import Differencesbetweenperl&python • Python(likeCandJava)isstronglytyped • Pythoncodeblocksdelimitedviaindenta;on ratherthancodeblocks • Builtininterac;ve-shell(perlhase.g.Devel::REPL) • InpythonEVERYTHINGisanobject Built-inTypes Perl • scalar • array • hash *immutablepythonobjects hfps://docs.python.org/2/library/types.html Python • • • • • • • • • int,long float,complex string* list tuple* set frozenset* dict ...etc. Codeblocks perl foreach my $x in (1..9) { print “$x\n”; } python for x in range (1,10) print(x) versions,programs&scripts perlscript pythonscript perl --version python --version #!/usr/bin/env perl #!/usr/bin/env python ... perl statements ... ‘’’ python statements ... raw input() #!/usr/bin/env python # raw)input() returns a string object age = raw_input("What is your age? ") # print() prints the string print (“your age: “+ age ) # type() returns a type ‘type’ # print() prints the type print(type(age)) Anonymousfunc;ons perl my $f= sub { my $x = shift; return 2*$x; } python f = lambda x: return 2*x print(f(2)) print $func_ref->(2) my $f= sub { 2*shift} print $func->(2) f= lambda x: 2*x print (f(2)) Inpythoneverythingisanobject • type()showsthetypeofanobject • dir() showsthemethodsinanobject type(“hello”) dir(“hello”) “hello”.__add__(“ world”) type(9/8) print(9/8) Crea;ngyourownobjects perl Package MyClass; sub new { return bless{x=>undef} } $obj = MyClass->new(); perlwithMoo Package MyClass; use Moo; has x => {is => ‘rw’} python class MyClass: def __init__(self): self.x = None obj = MyClass Map perl(map) my @items= 1..9; @squared = map {$_**2} @items python(map) items= range(1,10) squared = list(map(lambda x: x**2, items)) python(listcomprehension) list= range(1,10) squared = [x**2 for x in list] Reduce perl(reduce) use List::Util (‘reduce’); my @items= 1..9; my $sum= reduce { $a + $b } @items; python(reduce) from functions import reduce items= range(1,10) sum = reduce(lambda x,y: x+y, items)) Troublewithversions • Python2.xvsPython3.x – v.3releasedinDec.2008 – Notbackwardcompa;blewithPython2.x – Manyprojectss;llinPython2.x – PyPIhas25,948v.5packagesportedtov.6(outof90839) • Perl5.xvsPerl6.x – v.6releasedinDec.2015(announcedin2000) – Notbackwardcompa;blewithPerl5.x – CPANhas173,63v.5packagesbutdoesnotyetsupportv.6 packages Ra;onalizinglanguageissues • PrependtoPython2.xmodules from __future__ from __future__ from __future__ from __future__ ...etc. import import import import absolute_import division print_function unicode_literals print 8/7 # with and with ‘division module’ • PrependtoPerl2.xscriptsandmodules use Modern::Perl; use Moo; # simplifies object creation/usage Addi;onalmaterial • hfps://docs.python.org • hfps://pypi.python.org • hfp://modernperlbooks.com/books/ modern_perl_2016