Wo ein Name im Programm sichtbar ist
print('Hi Fred!')> print('Hi Fred!')> Hi Fred!name = 'Fred'
def say_hi():
print(f'Hi {name}!')
say_hi()> Hi Fred!name = 'Fred'
def say_hi():
name = 'Melanie'
print(f'Hi {name}!')
say_hi()
print(name)> name = 'Fred'
def say_hi():
name = 'Melanie'
print(f'Hi {name}!')
say_hi()
print(name)Z5> Hi Melanie!
Z8> Fredname = 'Fred'
def say_hi():
name = 'Melanie'
print(f'Hi {name}!')
say_hi()
print(name)Z5> Hi Melanie!
Z8> Fredsound = 'beep'
def beep():
print(sound)
def bang():
sound = 'bang'
beep()
print(sound)
bang()> sound = 'beep'
def beep():
print(sound)
def bang():
sound = 'bang'
beep()
print(sound)
bang()> beep
> bangLokal?
JA
NEIN
Global?
JA
NEIN?
Text
Lokal?
JA
NEIN
Global?
JA
NEIN
Built In?
JA
Ermöglichen die Verwendung von Bibliotheken!
print()_print = print
def print(n):
_print('$$', n)
print('Hello')> $$ Hellodef configure():
_print = print
def print(n):
_print('$$', n)
configure()
print('hello')
>
def configure():
_print = print
def print(n):
_print('$$', n)
configure()
print('hello')
Traceback (most recent call last):
File "/snippets/scopes-demo.py", line 7, in <module>
say_hi()
File "/snippets/scopes-demo.py", line 3, in say_hi
print(f'Hi {name}')
UnboundLocalError: local variable 'print' referenced before assignment
...nur im global scope möglich
def configure():
global print
_print = print
def print(n):
_print('$$', n)
configure()
print('Hello')
> $$ Hello
name = 'Fred'
def say_hi():
global name
name = 'Melanie'
print(f'Hi {name}!')
say_hi()
print(name)>name = 'Fred'
def say_hi():
global name
name = 'Melanie'
print(f'Hi {name}!')
say_hi()
print(name)Z5> Hi Melanie!
Z9> Melanienames = ['Fred']
def say_hi():
names[0] = 'Melanie'
print(f'Hi {names[0]}!')
print(names)
say_hi()
print(names)>Was passiert hier?
names = ['Fred']
def say_hi():
# names: Referenz auf den
# Speicherbereich der Liste
# --> Die Referenz wird NICHT
# verändert!
names[0] = 'Melanie'
print(f'Hi {names[0]}!')
print(names)
say_hi()
print(names)Z7> ['Fred']
Z5> Hi Melanie!
Z9> ['Melanie']math = [3.5, 5, 6, 4.5, 5.25]
franz = [3, 3.75, 3.1, 4]
def prettify(grades):
for nr in range(len(grades)):
if grades[nr] < 4:
grades[nr] = 5
prettify(math)
prettify(franz)
print(math)
print(franz)>math = [3.5, 5, 6, 4.5, 5.25]
franz = [3, 3.75, 3.1, 4]
def prettify(grades):
for nr in range(len(grades)):
if grades[nr] < 4:
grades[nr] = 5
prettify(math)
prettify(franz)
print(math)
print(franz)> [5, 5, 6, 4.5, 5.25]
> [5, 5, 5, 4]Der innere Scope überschreibt (überschattet) den äusseren Scope
Der innere Scope überschreibt (überschattet) den äusseren Scope
Â
Was passiert mit Parametern?
def say_hi(name):
name = f'{name}{name[-1]}y'
print(f'Hi {name}!')
say_hi('Fred')
say_hi('John')>def say_hi(name):
# name[-1] gibt den letzten
# Buchstaben zurück
name = f'{name}{name[-1]}y'
print(f'Hi {name}!')
say_hi('Fred')
say_hi('John')> Hi Freddy!
> Hi Johnny!