Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1079
Sur og sarkastisk
droppboks's Avatar
Hei, tenkte vi kunne ha en tråd hvor vi deler nyttige ting som er "kjekt å vite" fra forskjellige programmeringsspråk. Har akkurat begynt med Python, men har allerede oppdaget to som jeg synes er nyttig.

Den ene er at man kan ha en for-else loop, noe som kan være kjekt om brukeren skal skrive inn keys eller noe som ligger i en database og skriver feil så man ikke finner noe.

Kode

# Skriv nøkler og verdier fra database-dictionaryet.
for key, value in db.items():
    print key,'=',value
# Hvis den ikke finner noen nøkkel i det store og hele.
else:
    print 'Nøkkel finnes ikke i db.items()!'
Den andre er min nye favoritt, den gjør at man kan bruke variabelnavn i funksjoner.

Kode

# *arguments gjør at du kan ha ett vilkårlig antall argumenter, **keywords gjør at du kan definere når du bruker funksjonen.
def addKeyValue(*arguments, **keywords):
    dict = {}
    for key, value in keywords.items():
        dict[key] = value
    return dict
# In use
addKeyValue(navn='foobar', adresse='Himmelfartsveien 100000', postnr='777')
Det var de to jeg hadde da. Har akkurat begynt python så har ikke kommet over mer fåreløpig.

Hvis du har ting som ikke er obvious, men som gjelder flere programmeringsspråk, så kom med de også. Noen andre som har ting som er "kjekt og vite" men som de fleste guider ikke går i gjennom eller er lett å overse? Uansett om det er "ren" eller "skitten" praksis (kanskje spesifisere om det er skitten kodepraksis)?


Edit: Eller kanskje bedre måter å gjøre ting på der dere ser noobs stadig går over bekken for å hente vann.
Sist endret av droppboks; 21. november 2013 kl. 08:34.
Jeg syns det er ganske morsomt/interessant/nyttig at man kan komponere komponering i Haskell. i.e.

Kode

(.:) :: (t1 -> t) -> (t2 -> t3 -> t1) -> t2 -> t3 -> t
(.:) = (.).(.)
Eller, uttrykt litt mer "newbie friendly":

Kode

f .: g = \x y -> f (g x y)
Som du kan bruke til f.eks:

Kode

(<$>) fst .: lookup -- Eq a => a -> [(a, (b, c))] -> Maybe b
(<$>) snd .: lookup -- Eq a => a -> [(a, (b, c))] -> Maybe c
Og lignende.
Den ene er at man kan ha en for-else loop, noe som kan være kjekt om brukeren skal skrive inn keys eller noe som ligger i en database og skriver feil så man ikke finner noe.
Vis hele sitatet...
Det er en logisk feil i koden her.
"else" blokken blir feil her når man allerede har loopet over key,value,skjer det noe feil i loopen må det fanges opp med exception handling.
Skal man sjekk om nøkkel eksisterer i db,er det 3 vanlige metoder.
if 'key' in db, db.has_key(key) eller den veldige nyttige db.get() metoden,her kan "else" blokken komme inn samme med "if" blokken.
Den andre er min nye favoritt, den gjør at man kan bruke variabelnavn i funksjoner.
Vis hele sitatet...
Er vel et greit eksempel,men "variabelnavn i funksjoner" er ikke det man bruker og si.
Sier gjerne positional arguments(*args) og keyword arguments(**kwargs).
Tenker det er greit med engelsk her,for meg blir det bare rart på norsk.

Kan ta en rask gjennomgang av *agrs og **kwargs.
Brukes er når man har et ukjent antall argumenter man vil/kan gi til en funksjon/klasse.

Kode

def foo(*args):
    print args # *args sample all argumet in tuple
    return sum(args)
Bruke:

Kode

>>> foo(1,2)
(1, 2)
3
>>> foo(55,100,500,1000)
(55, 100, 500, 1000)
1655
Kan gi valgfritt antall argumenter til funksjonen.

Kode

def foo(**kwargs):
    print kwargs # **kwargs sample all argumet in dictionary
    key = 'a'
    if key in kwargs:
        return kwargs[key]
Bruke:

Kode

>>> foo(a='apple', b='banana')
{'a': 'apple', 'b': 'banana'}
'apple'
Kombinere:

Kode

def foo(arg, *args, **kwargs):
    print arg, args, kwargs
Bruke:

Kode

>>> foo(1,1,1) ?
>>> foo(999, a='apple') ?
>>> foo(999, 1, 2, 3, a='apple') ?
Som test kan man jo prøve og tenke seg til svaret på de 3 kombinasjonene.
Sist endret av snippsat; 22. november 2013 kl. 08:36.
Forøvrig ikke en Python-ting som sådan. Er dette vi gjør i C også.
Sitat av Choobe Vis innlegg

Kode

# *arguments gjør at du kan ha ett vilkårlig antall argumenter, **keywords gjør at du kan definere når du bruker funksjonen.
def addKeyValue(*arguments, **keywords):
    dict = {}
    for key, value in keywords.items():
        dict[key] = value
    return dict
# In use
addKeyValue(navn='foobar', adresse='Himmelfartsveien 100000', postnr='777')
Vis hele sitatet...
Har ikke du bare reimplementert dict() nå?

Kode

>>> dict(navn='foobar', adresse='Himmelfartsveien 100000', postnr='777')
{'postnr': '777', 'adresse': 'Himmelfartsveien 100000', 'navn': 'foobar'}
eller missforsto jeg bare hvordan du har tenkt den skal brukes?
Sur og sarkastisk
droppboks's Avatar
Trådstarter
Sitat av Foxboron Vis innlegg
Har ikke du bare reimplementert dict() nå?

Kode

>>> dict(navn='foobar', adresse='Himmelfartsveien 100000', postnr='777')
{'postnr': '777', 'adresse': 'Himmelfartsveien 100000', 'navn': 'foobar'}
eller missforsto jeg bare hvordan du har tenkt den skal brukes?
Vis hele sitatet...
Joda, akkurat den der funksjonen er ikke særlig nyttig, men metoden som brukes syns jeg kan være veldig nyttig hvis du f. eks skal legge inn mange variabler i en database eller noe. Jeg har bare ikke holdt på med slikt i Python enda.