Python Snabbreferens
Python är ett plattformsoberoende programmeringsspråk. Det är ett objektorienterat, dynamiskt typat språk som ursprungligen designades för att skriva automatiseringsskript (shell). Med ständiga uppdateringar och nya funktioner används det alltmer för utveckling av fristående, storskaliga projekt.
Allmänt
- Python är skiftlägeskänsligt (skiljer på stora och små bokstäver)
- Indexering i Python börjar på 0
- Python använder indrag (tabbar eller blanksteg) för att strukturera kod istället för klammerparenteser.
Hjälp
| Hjälpsida | help() |
| Funktionshjälp | help(str.replace) |
| Modulhjälp | help(re) |
Moduler (Bibliotek)
| Lista modulinnehåll | dir(module1) |
| Ladda modul | import module1 * |
| Anropa funktion från modul | module1.func1() |
import-satsen skapar ett nytt namnområde och kör alla satser i den tillhörande .py-filen.
Om du vill ladda modulinnehållet i det aktuella namnområdet, använd from module1 import *.
Skalära typer
Kontrollera datatyp: type(variable)
Heltal (Integers)
int/long - Stora heltal konverteras automatiskt till long.
Flyttal (Floats)
float - 64-bitars, det finns ingen “double”-typ.
Booleans
bool - True eller False.
Strängar (Strings)
str - Python 2.x standard: ASCII; Python 3: Unicode.
- Strängar kan omslutas av enkla, dubbla eller trippla citattecken.
- En sträng är en sekvens av tecken och kan därför behandlas som andra sekvenser.
- Specialtecken kan hanteras med
\eller genom att använda prefixetrför raw strings.str1 = r'this\f?ff' - Strängformatering kan göras på flera sätt:
template = '%.2f %s haha $%d' str1 = template % (4.88, 'hola', 2)
str(), bool(), int() och float() är också explicita typkonverteringsfunktioner.
Null-värde
NoneType(None) - Pythons motsvarighet till ’null’ (det finns bara en instans av None-objektet).
- None är inte ett reserverat nyckelord, utan den enda instansen av “NoneType”.
- None är det vanligaste standardvärdet för valfria funktionsparametrar:
def func1(a, b, c = None) - Vanlig användning av None:
if variable is None:
Datum och Tid
datetime - Inbyggd “datetime”-modul som tillhandahåller typerna “datetime”, “date”, “time”.
- “datetime” kombinerar information lagrad i “date” och “time”.
Skapa datum/tid från sträng dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’) Hämta “date”-objekt dt1.date() Hämta “time”-objekt dt1.time() Formatera datum/tid till sträng dt1.strftime(’%m/%d/%Y %H:%M’) Ändra fältvärden dt2 = dt1.replace(minute=0, second=30) Beräkna skillnad diff = dt1 - dt2 # diff är ett ‘datetime.timedelta’-objekt
Datastrukturer
Tupler
En tupel är en sekvens med fast längd som inte kan modifieras.
| Skapa tupel | tup1=4,5,6 eller tup1 = (6,7,8) |
| Skapa nästlad tupel | tup1 = (4,5,6), (7,8) |
| Konvertera sekvens/iterator till tupel | tuple([1, 0, 2]) |
| Slå ihop tupler | tup1 + tup2 |
| Packa upp tupel | a, b, c = tup1 |
| Byta plats på variabler | b, a = a, b |
Listor
En lista är en sekvens med variabel längd och modifierbara element.
| Skapa lista | list1 = [1, ‘a’, 3] eller list1 = list(tup1) |
| Slå ihop listor | list1 + list2 eller list1.extend(list2) |
| Lägg till i lista | list1.append(‘b’) |
| Infoga på position | list1.insert(posIdx, ‘b’) |
| Ta bort element via index | valueAtIdx = list1.pop(posIdx) |
| Ta bort första förekomst av värde | list1.remove(‘a’) |
| Kontrollera om värde finns i listan | 3 in list1 => True |
| Sortera lista | list1.sort() |
| Sortera med funktion | list1.sort(key=len) # efter längd |
Notera:
- “start”-index ingår, men “stop”-index exkluderas.
- start/stop kan utelämnas, standard är början/slutet.
Slicing
Sekvenstyper inkluderar ‘str’, ‘array’, ’tuple’, ’list’ etc.
list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]Dictionaries (Hash)
| Skapa dictionary | dict1 = {‘key1’ : ‘value1’, 2 : [3, 2]} |
| Dictionary via zip | dict(zip(keyList, valueList)) |
| Hämta element | dict1[‘key1’] |
| Ändra/lägg till element | dict1[‘key1’] = ’newValue’ |
| Hämta värde med fallback | dict1.get(‘key1’, defaultValue) |
| Kontrollera om nyckel finns | ‘key1’ in dict1 |
| Ta bort element | del dict1[‘key1’] |
| Lista med nycklar | dict1.keys() |
| Lista med värden | dict1.values() |
| Uppdatera dictionary | dict1.update(dict2) |
Set (Mängder)
Ett set är en oordnad samling av unika element.
| Skapa set | set([3, 6, 3]) eller {3, 6, 3} |
| Kontrollera delmängd (subset) | set1.issubset(set2) |
| Kontrollera övermängd (superset) | set1.issuperset(set2) |
| Kontrollera likhet | set1 == set2 |
| Union (or) | set1 |
| Snitt (intersection/and) | set1 & set2 |
| Differens | set1 - set2 |
| Symmetrisk differens (xor) | set1 ^ set2 |
Funktioner
-
Grundform
def func1(posArg1, keywordArg1 = 1, ..): -
“Funktioner är objekt” - vanlig användning:
def func1(ops = [str.strip, user_define_func, ..], ..): for function in ops: value = function(value) -
Returvärden
- Om ingen
return-sats finns, returnerasNone. - Returnera flera värden via en tupel:
return (value1, value2) value1, value2 = func1(..) - Om ingen
-
Anonyma funktioner (Lambda)
lambda x : x * 2 # motsvarar: def func1(x) : return x * 2
Användbara funktioner
-
Enumerate: Returnerar en sekvens av (index, värde)-tupler.
for key, val in enumerate(collection): -
Sorted: Sorterar valfritt itererbart objekt.
sorted([2, 1, 3]) => [1, 2, 3] -
Zip: Grupperar element från flera sekvenser till tupler.
zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..] -
Reversed: Returnerar en omvänd iterator.
list(reversed(range(10)))
Kontrollflöde
-
Villkorsoperatorer:
Kontrollera identiska objekt var1 is var2 Kontrollera olika objekt var1 is not var2 Kontrollera lika värden var1 == var2 -
Vanlig användning av ‘for’:
for element in iterator: -
‘pass’ - gör ingenting, används som platshållare.
-
Ternärt uttryck:
value = true-expr if condition else false-expr -
Ingen switch/case-sats i äldre versioner, använd
if/elif.
Objektorientering
-
‘object’ är basen för alla Python-typer.
-
Allt (nummer, sträng, funktion, klass, modul) är ett objekt och har en ’type’. Variabler är pekare till deras plats i minnet.
-
Grundform för en klass:
class MyObject(object): # 'self' motsvarar 'this' i Java/C++ def __init__(self, name): self.name = name def memberFunc1(self, arg1): .. @staticmethod def classFunc2(arg1): .. obj1 = MyObject('name1') obj1.memberFunc1('a') MyObject.classFunc2('b') -
Inspektionsverktyg:
dir(variable1) # Listar alla tillgängliga metoder på objektet
Strängoperationer
Slå ihop lista/tupel med separator:
', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'Formatera sträng:
string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')Dela upp sträng:
sep = '-'
stringList1 = string1.split(sep)Slicing av sträng:
start = 1
string1[start:8]Fyll sträng med nollor (zfill):
month = '5'
month.zfill(2) => '05' Undantagshantering (Exceptions)
- Grundform
try:
..
except ValueError as e:
print(e)
except (TypeError, AnotherError):
..
except:
..
finally:
..- Manuella undantag:
raise AssertionError # Assertion misslyckades
raise SystemExit # Begär att programmet avslutas
raise RuntimeError('Error message :..')List, Set och Dict Comprehensions
Syntaktiskt socker för att göra koden mer lättläst.
-
List Comprehension: Skapar en ny lista genom att filtrera och transformera element i en samling.
[expr for val in collection if condition] -
Dictionary Comprehension:
{key-expr : value-expr for value in collection if condition} -
Set Comprehension: Samma som list comprehension, men använder
{}istället för[]. -
Nästlad List Comprehension:
[expr for val in collection for innerVal in val if condition]