Hi again,
kann man eine lokale Variable incrementieren um 1?
Also in C wäre das so ein i++ Befehl.
Variable incrementieren um 1?
also das steht ja nun wirklich in jeder Anleitung 
Erstens geht es natuerlich ganz normal:
und als Kurzform gibt es:

Erstens geht es natuerlich ganz normal:
Code: Alles auswählen
i = i + 1
Code: Alles auswählen
i += 1
ja natürlich.
Ich hab eigentlich ein anderes Prob:
Es bibt eine Funktion, die ofters aufgerufen wird...
Es soll so ein, dass eine Variable beim ersten Aufruf der Funktion mit Null deklariert wird, und bei allen anderen Aufrufen der Funktion die Variable immer den Wert hat, der ihr im weiteren Verlauf der Funktion zugespielt werden...
Also:
1. Funktionsaufruf: n = 0
innerhalb der Funktion wird n zu 1
2. Funktionsaufruf n=1
innerhalb der Funktion wird n zu -2
3. Funktionsaufruf n=-2
...
ich versuch mich da schon eine ganze Weile und hab meistesns den Fehler, dass n aufgerufen wird, bevor sie assigned wird
Der Code soll also beim ersten Funktionsaufruf n erhöhen, damit er beim 2.Funktionsaufruf gleich was anderes macht: "else:"
....
gibt es sowas wie ein "static" oder einen Constructor wie in c?
Ich hab eigentlich ein anderes Prob:
Es bibt eine Funktion, die ofters aufgerufen wird...
Es soll so ein, dass eine Variable beim ersten Aufruf der Funktion mit Null deklariert wird, und bei allen anderen Aufrufen der Funktion die Variable immer den Wert hat, der ihr im weiteren Verlauf der Funktion zugespielt werden...
Also:
1. Funktionsaufruf: n = 0
innerhalb der Funktion wird n zu 1
2. Funktionsaufruf n=1
innerhalb der Funktion wird n zu -2
3. Funktionsaufruf n=-2
...
ich versuch mich da schon eine ganze Weile und hab meistesns den Fehler, dass n aufgerufen wird, bevor sie assigned wird
Code: Alles auswählen
n=0
def checkHeight():
if n == 0:
print "n= " = ",n
n = n+1
else:
...
....
gibt es sowas wie ein "static" oder einen Constructor wie in c?
naja, Karl, das find ich jetzt nicht so passend als Hilfe. Er versucht ja, Python zu lernen. Genau solche Schritte gehoeren doch dazu.
Man kann ja nicht sagen: ich lerne erstmal die Dinge X, Y und Z einer Sprache und erst wenn ich das alles kann, schreib ich ein Programm dazu. Zum Lernen gehoert ja nicht nur, die "Vokabeln" zu koennen sondern eben auch zu verstehen, wie die Grammatik funktioniert und wie man allgemein spricht.
Und genau da wuerde ich diese Frage einsortieren. Er hat ein konkretes Problem im Kopf und will das umsetzen. Dabei kann eine Hilfe von hier ja nicht nur darin bestehen dass man sagt: nimm Modul X, Methode Y, usw. sondern eben auch hilft beim Verstaendnis, wie Programmieren ansich funktioniert.
Ich wuerde deshalb eher jetzt mal nachfragen: was hast Du genau vor? Wozu soll das dienen (damit man evtl. nen komplett anderen, weil sinnvolleren Weg vorschlagen kann), usw.
Man kann ja nicht sagen: ich lerne erstmal die Dinge X, Y und Z einer Sprache und erst wenn ich das alles kann, schreib ich ein Programm dazu. Zum Lernen gehoert ja nicht nur, die "Vokabeln" zu koennen sondern eben auch zu verstehen, wie die Grammatik funktioniert und wie man allgemein spricht.
Und genau da wuerde ich diese Frage einsortieren. Er hat ein konkretes Problem im Kopf und will das umsetzen. Dabei kann eine Hilfe von hier ja nicht nur darin bestehen dass man sagt: nimm Modul X, Methode Y, usw. sondern eben auch hilft beim Verstaendnis, wie Programmieren ansich funktioniert.
Ich wuerde deshalb eher jetzt mal nachfragen: was hast Du genau vor? Wozu soll das dienen (damit man evtl. nen komplett anderen, weil sinnvolleren Weg vorschlagen kann), usw.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Da der OP ja versucht, mit globalen Variablen zu arbeiten: Da wuerde die Anweisung "global n" am Anfang-des Funtionskoerpers fehlen.
Aber eigentlich eine interessante Frage: In C wuerde man fuer sowas statische Variablen benutzen, das gibt's ja in Python nicht. Was ist da der gaengigste Weg? Global ist ja eigentlich unschoen. Ich selbst hab mir in so einem Fall immer eine kleine Klasse drumrum gebastelt, ist aber etwas Overhead... ebenso, wenn man die entspr. Variable immer als Parameter mitschleift.
Aber eigentlich eine interessante Frage: In C wuerde man fuer sowas statische Variablen benutzen, das gibt's ja in Python nicht. Was ist da der gaengigste Weg? Global ist ja eigentlich unschoen. Ich selbst hab mir in so einem Fall immer eine kleine Klasse drumrum gebastelt, ist aber etwas Overhead... ebenso, wenn man die entspr. Variable immer als Parameter mitschleift.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Naja shakebox, du hast schon recht, er kommt wenigstens nicht so dreist daher und verlangt fertigen Code usw 
Aber dass er sich noch nicht allzu viel mit den Grundlagen befasst hat, sieht man auch auf Anhieb.
Wenn er von C++ kommt, könnte er ja sogar Ahnen, dass n in der Funktion nicht definiert ist
Parameter sind schon ne feine Sache. Globals würde auch gehen, aber da finde ich Parameter schöner.
Das print-Statement ist auch ziemlich strange, man kann grad noch erahnen, was es heißen soll :p
Ich will ihn ja nicht runtermachen, ich hab damals mit PHP noch dümmer angefangen (glaub ich) aber mittlerweile sehe ich ein, dass es enorm hilft die Grundlagen zu lernen
Und dass er dauernd mit C++ vergleicht, zeigt imo auch, dass er sich noch nicht so richtig mit Python beschäftigt hat.
Edit: Sorry, C ^^

Aber dass er sich noch nicht allzu viel mit den Grundlagen befasst hat, sieht man auch auf Anhieb.
Wenn er von C++ kommt, könnte er ja sogar Ahnen, dass n in der Funktion nicht definiert ist

Parameter sind schon ne feine Sache. Globals würde auch gehen, aber da finde ich Parameter schöner.
Das print-Statement ist auch ziemlich strange, man kann grad noch erahnen, was es heißen soll :p
Ich will ihn ja nicht runtermachen, ich hab damals mit PHP noch dümmer angefangen (glaub ich) aber mittlerweile sehe ich ein, dass es enorm hilft die Grundlagen zu lernen

Und dass er dauernd mit C++ vergleicht, zeigt imo auch, dass er sich noch nicht so richtig mit Python beschäftigt hat.
Edit: Sorry, C ^^
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!
Daten übergeben und geänderte Daten wieder zurück geben. So passieren keine Überaschungen innerhalb der Funktion. Es kommt oben was rein und unten kommt etwas raus.
mfg
Gerold

Daten übergeben und geänderte Daten wieder zurück geben. So passieren keine Überaschungen innerhalb der Funktion. Es kommt oben was rein und unten kommt etwas raus.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
def check_height(n):
if n == 0:
n += 1
else:
n += 100
print "n (neu):", n
return n
globales_n = 0
globales_n = check_height(globales_n)
globales_n = check_height(globales_n)
globales_n = check_height(globales_n)
Code: Alles auswählen
n (neu): 1
n (neu): 101
n (neu): 201
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Stimmt schon. Nur bin ich ja z.B. auch sehr frisch in Python und weiss deshalb halt sehr gut dass man manchmal wie der Ochs vorm Berg steht bei eigentlich einfachen strukturellen/konzeptionellen Sachen. Und da hilft es meistens nicht, die gleiche Anleitung dutzende Male zu lesen, da sie ja immer nur auf eine Art und Weise den speziellen Fall erklaert. Oft reicht ja ne geringfuegig andere Formulierung/Erklaerung und ploetzlich macht es Klick.Karl hat geschrieben:Aber dass er sich noch nicht allzu viel mit den Grundlagen befasst hat, sieht man auch auf Anhieb.
Und das ist halt im Gespraech mit echten Menschen, sofern Ihr nicht eh alle irgendwelche Bots seid

Es muss denke ich immer beides sein: sich selbst informieren und weiterbilden, aber eben auch der Austausch mit Leuten die was anders formulieren koennen.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Jedes mal wenn ich eine statische Variable brauch stelle ich fest, dass ich eigentlich eine Closure willRebecca hat geschrieben:Aber eigentlich eine interessante Frage: In C wuerde man fuer sowas statische Variablen benutzen, das gibt's ja in Python nicht. Was ist da der gaengigste Weg?

TUFKAB – the user formerly known as blackbird
Huch, da hab ich ja mal eine ganze Grundsatzdiskussion ins Rollen gebracht...
Also erstens komm ich nicht von C oder C++, das hab ich nur in 2 Semestern im Studium gehabt und da eben a bissle was aufgeschnappt und
zweitens, bei der print anweisung hab ich mich voll vertippt, das = und das 3. " müssen natürlich raus...
Das ich (noch) kein guter Pythonianer bin, liegt daran, dass ich es mir erst seit 3 Wochen beibringe und eigentlich schnell lerne und gerade an einem ziemlich komplexen Programm arbeite...
Aber ja, Grundlagen sind da, vielleicht auch nicht alle...
Ich finde learning by doing immer noch die effektivste Lernmethode und wo geht das besser als beim Programmieren mit Try and Error ...
Dass ich keine Komplettlösungen will ist ja wohl ausser Frage, da ich es ja für mich lernen will...
Es ist auch so, dass ich mich normalerweise im www gründlich umschau, bevor ich hier was poste. Allerdings bei meiner ersten Frage, die hier den Thread eröffnet hat, war das nicht so der Fall... dafür ein SORRY .. hatte einfach eine schnelle Idee im Kopf und wollte nicht lang suchen...
Also jetzt haben wir die Lösung für Increments, Daten innerhalb einer Funktion übergeben und wieder zurück holen und die Erkenntnis, dass
hier ein SUPER KLASSE Forum ist...
Bis zur nächsten Newby-Frage
Euer Pü-Ton
Also erstens komm ich nicht von C oder C++, das hab ich nur in 2 Semestern im Studium gehabt und da eben a bissle was aufgeschnappt und
zweitens, bei der print anweisung hab ich mich voll vertippt, das = und das 3. " müssen natürlich raus...
Das ich (noch) kein guter Pythonianer bin, liegt daran, dass ich es mir erst seit 3 Wochen beibringe und eigentlich schnell lerne und gerade an einem ziemlich komplexen Programm arbeite...
Aber ja, Grundlagen sind da, vielleicht auch nicht alle...
Ich finde learning by doing immer noch die effektivste Lernmethode und wo geht das besser als beim Programmieren mit Try and Error ...
Dass ich keine Komplettlösungen will ist ja wohl ausser Frage, da ich es ja für mich lernen will...
Es ist auch so, dass ich mich normalerweise im www gründlich umschau, bevor ich hier was poste. Allerdings bei meiner ersten Frage, die hier den Thread eröffnet hat, war das nicht so der Fall... dafür ein SORRY .. hatte einfach eine schnelle Idee im Kopf und wollte nicht lang suchen...
Also jetzt haben wir die Lösung für Increments, Daten innerhalb einer Funktion übergeben und wieder zurück holen und die Erkenntnis, dass
hier ein SUPER KLASSE Forum ist...
Bis zur nächsten Newby-Frage

Euer Pü-Ton
Es war ja auch zugegebenermaßen keine Frage, deren Lösung man gezielt nachschlagen konnte.Pü-Ton hat geschrieben: Bis zur nächsten Newby-Frage
Euer Pü-Ton
Dass du dich beim print vertippt hast, hab ich mir auch schon gedacht


Code: Alles auswählen
>>> class StateFunc(object):
def __init__(self, state):
self.state = state
def __call__(self, param):
print param
print self.state
self.state += 1
>>> func = StateFunc(42)
>>> func(1)
1
42
>>> func(2)
2
43
>>> func(23)
23
44
>>>
Moin,
eine andere Möglichkeit wäre:
Gruß,
Manuel
eine andere Möglichkeit wäre:
Code: Alles auswählen
>>> def foo(n=0):
... while True:
... v = (yield n)
... if v is None:
... n += 1
... else:
... n = v
...
>>> x = foo()
>>> print x.next()
0
>>> print x.next()
1
>>> print x.send(-2)
-2
>>> print x.next()
-1
>>> print x.next()
0
Manuel
oder so:
in python3000 könnte man das dann auch ohne die Liste realisieren(über das Schlüsselwort nonlocal), ungetestet hab das gerade nicht zur Verfügung
Code: Alles auswählen
def inc(n = 0):
n = [n]
def inc():
n[0] += 1
return n[0]
return inc
inc_ = inc()
print inc_(), inc_(), inc_()
Code: Alles auswählen
def inc(n = 0):
def inc():
nonlocal n
n += 1
return n
return inc