aboutsummaryrefslogtreecommitdiffstats
path: root/templates/site/tutorials/python/py-style.md
blob: 2a68fac6340463f7df85c0fcbd6b90154af5f8ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Coding Style Guide

The purpose of this document is twofold:
1) To ensure that anyone who might like to make my code better understands
    why I write python the way I do
2) to ensure *I* adhere to my own style because I'm terribly inconsistent

Being terribly inconsistent, the guidelines are not set in stone and if
you have a good argument for doing things a particular, I don't really care.

*BUT* first and foremost, *code must comply with PEP8 first*. This is easy
to automate. I like coala since it's friendly but there' plenty of advanced
linters out there.

That aside, I have the following idiosyncracies:

## 1) *Strings* are *double-quoted*. *Keys* and *chars* are *single-quoted*.

This is really just because I like how C does it. And Cpython's C-based so
why not?

Like so:
    ```
    string = "This is a phrase"
    word = "word"
    cur_char = 'a'
    newline = '\n' # note, two characters, but it's still ONE char in output
    # keys are single-quoted to avoid confusion
    dictionary = { 'key' : "1245dqw3w431", 'return': newline }
    ```

The only exception is for strings with quotes in them (anything to avoid
escapes, really)
    ```
    quoted_string = (
        '"You miss 100% of the shots you don't take - Wayne Gretsky" - Michael Scott'
    )
    ```
That brings me to my next point.

## 2) Long strings belong in parentheses

As in:
    ```
    longboi = (
        "This is a really long string usefull when making help menus. Be\n"
        "sure to leave s space at the end of each line, or add a new line\n"
        "when needed.\n"

        "Try your best to keep formatting accurate like this."
    )
    ```

## 3) Tabs are four spaces and spaces are *ALWAYS* prefered to tabs
Again, see PEP8.

## 4) Always add spaces between arithmetic, but never for brackets
It's a pain to read:
    ```
    1/(2*sqrt(pi))*exp(x**2)
    ```
Do this
    ```
    1 / (2 * sqrt(pi)) * exp(x ** 2)
    ```
The same goes for logic operators
    ```
    true & false ^ true
    ```

## 5) EVERYTHING should be snake_case
This is python. Unless there's a compatibility thing (like a library's
code was written that way, or it matches an API variable), 
snake_case is preferred.
    ```

    user_input = int(input()) # variable
    MAX_INPUT = 1000 # constant
    def judge_input(_input, _max): # function
        if _max > _input:
            print("Too big!")

    judge_input(user_input, MAX_INPUT
    class Input_Judger: # a class
        # etc etc
    ```
Example exception
    ```
    # this doesn't actually work, but you get the idea
    r = requests.get("www.debian.org")
    pageSize = r.json()['pageSize'] # camel case ok
    ```