Welche Zweitsprache? Python oder Perl?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Colttt
Beiträge: 2986
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: AW: Welche Zweitsprache? Python oder Perl?

Beitrag von Colttt » 13.02.2014 20:53:18

Ohh man ihr macht es einen echt nicht einfach..

Perl ist öfters auf Systemen installiert(Linux,solaris,BSD).. Python ist logischer zu programmieren und ist mächtiger (wenn man sich die Softwareprojekte so anschaut)
Debian-Nutzer :D

ZABBIX Certified Specialist

Radfahrer

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von Radfahrer » 13.02.2014 21:04:19

ctwx hat geschrieben: (Wobei ich persönlich, wenn ich zwischen den beiden eher Perl wählen würde, weil ich Einrückung und damit die Syntax von Python nicht mag.
Wie sich die Geschmäcker doch unterscheiden. :D
Ich empfinde gerade die Einrückungen und die dadurch wegfallenden Klammer-Orgien bei Python als sehr elegant. Auch sonst finde ich die Python-Syntax sehr schön.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von uname » 13.02.2014 21:05:20

Ich habe mal ein Beispiel rausgesucht. Die rekursive Berechnung von 5 Fakultät (5!) also im Prinzip 5! = 5 * 4 * 3 * 2 * 1

Perl:

Code: Alles auswählen

#!/usr/bin/perl -w

sub fakul
 {
  my $x=$_[0];
  if($x)     
    {
      return $x * fakul($x-1);  
    }
  return 1;
 }

print fakul(5) . "\n";
Python:

Code: Alles auswählen

#!/usr/bin/python

def fakul (n):
    if n == 1:
        return 1
    else:
        res = n * fakul (n-1)
        return res

print(fakul(5))
Man muss dazu sagen, dass ich die Beispiele im Internet gefunden habe. Perl wartet auf den Wert 0 und gibt dann 1 zurück. Python hat als Rekursions-Ende den Wert 1. Ich denke auffällig ist vor allem, dass man bei Perl bei den Variablen ein $ vorschreibt. Dafür gefallen mir die geschweiften Klammern. Leider habe ich kein Beispiel welches objektorientiert arbeitet oder ein schönes Beispiel mit Hashes.
Zuletzt geändert von uname am 13.02.2014 21:10:03, insgesamt 3-mal geändert.

Radfahrer

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von Radfahrer » 13.02.2014 21:07:54

Jepp, schönes Beispiel.
Ich finde da den Python-Code sehr viel eleganter.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von wanne » 14.02.2014 05:19:15

Das ist elegent:

Code: Alles auswählen

use List::Util qw(reduce);

$n = shift;
print reduce {$a * $b} 1..$n;
Kein Funktionsoverhead kein nichts. Und dabei vermutlich um längen schneller.
Wobei python auch fold könnte.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von peschmae » 14.02.2014 09:13:46

Falls jemand nach einem Beispiel für die Unleserlichkeit von Perl gefragt hätte, wäre das die Richtige Antwort gewesen ;)

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Radfahrer

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von Radfahrer » 14.02.2014 09:51:05

Ich hatte eigentlich auch gedacht, dass elegant nicht gleichbedeutend mit unverständlich. Elegant heißt auch nicht möglichst wenig Zeilen. :mrgreen:

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von Liffi » 14.02.2014 11:01:27

Unleserlich ist eher sowas (valides Perl):

Code: Alles auswählen

    ''=~(        '(?{'        .('`'        |'%')        .('['        ^'-')
    .('`'        |'!')        .('`'        |',')        .'"'.        '\\$'
    .'=='        .('['        ^'+')        .('`'        |'/')        .('['
    ^'+')        .'||'        .(';'        &'=')        .(';'        &'=')
    .';-'        .'-'.        '\\$'        .'=;'        .('['        ^'(')
    .('['        ^'.')        .('`'        |'"')        .('!'        ^'+')
   .'_\\{'      .'(\\$'      .';=('.      '\\$=|'      ."\|".(      '`'^'.'
  ).(('`')|    '/').').'    .'\\"'.+(    '{'^'[').    ('`'|'"')    .('`'|'/'
 ).('['^'/')  .('['^'/').  ('`'|',').(  '`'|('%')).  '\\".\\"'.(  '['^('(')).
 '\\"'.('['^  '#').'!!--'  .'\\$=.\\"'  .('{'^'[').  ('`'|'/').(  '`'|"\&").(
 '{'^"\[").(  '`'|"\"").(  '`'|"\%").(  '`'|"\%").(  '['^(')')).  '\\").\\"'.
 ('{'^'[').(  '`'|"\/").(  '`'|"\.").(  '{'^"\[").(  '['^"\/").(  '`'|"\(").(
 '`'|"\%").(  '{'^"\[").(  '['^"\,").(  '`'|"\!").(  '`'|"\,").(  '`'|(',')).
 '\\"\\}'.+(  '['^"\+").(  '['^"\)").(  '`'|"\)").(  '`'|"\.").(  '['^('/')).
 '+_,\\",'.(  '{'^('[')).  ('\\$;!').(  '!'^"\+").(  '{'^"\/").(  '`'|"\!").(
 '`'|"\+").(  '`'|"\%").(  '{'^"\[").(  '`'|"\/").(  '`'|"\.").(  '`'|"\%").(
 '{'^"\[").(  '`'|"\$").(  '`'|"\/").(  '['^"\,").(  '`'|('.')).  ','.(('{')^
 '[').("\["^  '+').("\`"|  '!').("\["^  '(').("\["^  '(').("\{"^  '[').("\`"|
 ')').("\["^  '/').("\{"^  '[').("\`"|  '!').("\["^  ')').("\`"|  '/').("\["^
 '.').("\`"|  '.').("\`"|  '$')."\,".(  '!'^('+')).  '\\",_,\\"'  .'!'.("\!"^
 '+').("\!"^  '+').'\\"'.  ('['^',').(  '`'|"\(").(  '`'|"\)").(  '`'|"\,").(
 '`'|('%')).  '++\\$="})'  );$:=('.')^  '~';$~='@'|  '(';$^=')'^  '[';$/='`';
Auch wenn python auf dem Vormarsch ist, würde ich es nicht so sehen, dass perl deswegen komplett an Bedeutung verliert. CPAN bietet so unfassbar viel, das muss Python erst mal aufholen :-). Auch heute gibt es noch Firmen, die auf Perl setzen (z.B. xing oder booking.com).

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von Meillo » 14.02.2014 12:18:51

Wie konstruktiv ist die Diskussion zwischen Perl und Python denn noch? Das ist doch nicht anders als Emacs vs. vi: Eine Glaubensfrage, da man sachlich kein Ergebnis finden wird. Also lassen wir das ...
Use ed once in a while!

Radfahrer

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von Radfahrer » 14.02.2014 12:22:53

Stimmt. Muss halt jeder selber ausprobieren und sich eine eigene Meinung bilden.

Wobei vim natürlich um Welten besser ist als emacs. :twisted:

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von wanne » 14.02.2014 13:25:55

peschmae hat geschrieben:Falls jemand nach einem Beispiel für die Unleserlichkeit von Perl gefragt hätte, wäre das die Richtige Antwort gewesen ;)
Ich finde das hundert mal verständlicher als die oben genannte rekursive Variante.

Ich habe gerade mal gegoogelt wie man das in python macht:

Code: Alles auswählen

def mul (a,b):
        return a * b

def fakt(n):
        return reduce(mul,range(1,n+1))

print(fakt(5))
Eigentlich nicht viel uneleganter. Nur, dass dank der dämlichen Einrückregel aus {$a * $b} gleich 3 volle Zeilen werden.
PS: kann man python dazu bringen, dass es etwas schönere Fehlermeldungen ausgibt als: "invalid Syntax"?

@Liffi: Wie unleserlich in keiner anderen Programmiersprache hättest du so schnell deutlich machen können, dass es um Bierflaschen geht. Das kann ich trotz Kurzsichtigkeit noch aus 50m erkennen.
rot: Moderator wanne spricht, default: User wanne spricht.

Colttt
Beiträge: 2986
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von Colttt » 14.02.2014 14:46:27

also ich werde jetzt wahrscheinlich mit python angucken.. vor allem weil ich mir bcfg2 näher angucken möchte..
Debian-Nutzer :D

ZABBIX Certified Specialist

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von catdog2 » 14.02.2014 18:04:01

Eigentlich nicht viel uneleganter. Nur, dass dank der dämlichen Einrückregel aus {$a * $b} gleich 3 volle Zeilen werden.
1. Die ist nicht dämlich
2. Kann man auch anders schreiben z.B.:

Code: Alles auswählen

def fakt(n):
        return reduce(lambda x, y: x*y,range(1,n+1))
Oder die funktion eben ganz in einer Zeile:

Code: Alles auswählen

fakt = lambda n: reduce(lambda x, y: x*y,range(1,n+1))
//edit: bei def muss man nicht mal eine newline machen, also geht auch

Code: Alles auswählen

def fakt(n): return reduce(lambda x, y: x*y,range(1,n+1))
Kein Funktionsoverhead kein nichts. Und dabei vermutlich um längen schneller.
Da würde ich mich nicht so weit aus dem Fenster lehen. Bei perl bist du an den perl Interpreter gebunden weil die Sprache nicht formal definiert ist. Bei python musst du nicht zwangsläufig die vergleichsweise langsame Referenzimplementierung benutzen sondern kannst z.B. pypy verwenden.
Perl ist öfters auf Systemen installiert(Linux,solaris,BSD).. Python ist logischer zu programmieren und ist mächtiger (wenn man sich die Softwareprojekte so anschaut)
Python ist zumindest im Linux Bereich ähnlich verbreitet alleine schon weil viele Distributionen tools mitliefern, die das benutzen.
Wie schon angedeutet ist Python halt eine sauber formal definierte Sprache und perl das exakte Gegenteil davon. Mag zwar im ersten Moment toll erscheinen, dass praktisch alles irgendwie funktioniert aber man tut sich sicherlich keinen Gefallen, gerade wenn es mal komplexer als ein paar Zeilen wird.
Unix is user-friendly; it's just picky about who its friends are.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von wanne » 14.02.2014 18:39:36

catdog2 hat geschrieben:
Kein Funktionsoverhead kein nichts. Und dabei vermutlich um längen schneller.
Da würde ich mich nicht so weit aus dem Fenster lehen. Bei perl bist du an den perl Interpreter gebunden weil die Sprache nicht formal definiert ist. Bei python musst du nicht zwangsläufig die vergleichsweise langsame Referenzimplementierung benutzen sondern kannst z.B. pypy verwenden.
Also ich habe gerade mal enchmarken wollen. Die rekursive Variante gibt schon vor 1000 auf. Geschwindigkeit ist also kein Problem.
Allerdings ist die von dir gepostete Variante um Lengen schneller als meine perl variante, wenn man auf bigintegers umstellt.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
novalix
Beiträge: 1909
Registriert: 05.10.2005 12:32:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: elberfeld

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von novalix » 15.02.2014 18:29:21

wanne hat geschrieben:Also ich habe gerade mal enchmarken wollen. Die rekursive Variante gibt schon vor 1000 auf.
Wow, da hätte ich doch ein wenig mehr Durchhaltevermögen erwartet.
Auf Debiansbcl:

Code: Alles auswählen

(defun factorial (n)
    (reduce #'*(loop for i from 1 to n collect i)))
Benchmark (10.000):

Code: Alles auswählen

(time (factorial 10000))
Evaluation took:
  0.111 seconds of real time
  0.072000 seconds of total run time (0.060000 user, 0.012000 system)
  [ Run times consist of 0.008 seconds GC time, and 0.064 seconds non-GC time. ]
  64.86% CPU
  153,328,020 processor cycles
Die rekursive und die tail recursive Variante liefern recht ähnliche Ergebnisse.
A propos Ergebnis: Das poste ich hier nicht. Kann sich ja jeder selbst ausrechnen.
Das Wem, Wieviel, Wann, Wozu und Wie zu bestimmen ist aber nicht jedermannns Sache und ist nicht leicht.
Darum ist das Richtige selten, lobenswert und schön.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von wanne » 15.02.2014 20:18:17

Compilierende Sprachen sind ungerecht. Und endrekursive Varianten in Lisp und C zählen nur als Interativ:

C:

Code: Alles auswählen

#include <stdio.h>
#include <gmp.h>

int main(int arg, char** argv)
{
        if(arg!=2)
                exit(1);
        unsigned long to = atol(argv[1]);
        MP_INT num;
        mpz_init_set_ui(&num,2UL);
        for(unsigned long i=3;i<=to;i++)
                mpz_mul_ui(&num,&num,i);
        char* out=NULL;
        printf("0x%s",mpz_get_str(out,16,&num));
}

Code: Alles auswählen

$ time ./cfakt 10000 > /dev/null 

real    0m0.016s
user    0m0.008s
sys     0m0.004s

Code: Alles auswählen

$ time ./cfakt 100000 > /dev/null 

real    0m2.168s
user    0m1.820s
sys     0m0.000s
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
novalix
Beiträge: 1909
Registriert: 05.10.2005 12:32:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: elberfeld

Re: Welche Zweitsprache? Python oder Perl?

Beitrag von novalix » 16.02.2014 00:29:17

An die Laufgeschwindigkeit von C kommt man mit Lisp nicht wirklich ran.
Ich mit Sicherheit nicht:

Code: Alles auswählen

(time (fact-tail 30000))
Evaluation took:
  0.879 seconds of real time
  0.896000 seconds of total run time (0.888000 user, 0.008000 system)
  [ Run times consist of 0.080 seconds GC time, and 0.816 seconds non-GC time. ]
  101.93% CPU
  1,752,832,040 processor cycles
  796,106,064 bytes consed
Endrekursiv mit Typendeklaration.
An dem C-Beispiel sieht man aber auch, dass es recht aufwendig ist, optimierte Programme zu schreiben. Optimierter Lisp code sieht dann auch irgendwann aufgeblähter und kryptischer aus.
Bleibt der Vorteil, dass man mit Lisp arbeiten kann wie mit einer interpretierten Skript-Sprache, auch wenn wie im Falle von sbcl jeglicher code on the fly kompiliert wird. Die Performancewerte liegen dabei meist näher an C als an Perl et al.
Das Wem, Wieviel, Wann, Wozu und Wie zu bestimmen ist aber nicht jedermannns Sache und ist nicht leicht.
Darum ist das Richtige selten, lobenswert und schön.

Antworten