@@ -207,7 +207,7 @@ you are expecting a string as the argument.
207207** Good** :
208208
209209``` python
210- def create_micro_brewery (name :str = " Hipster Brew Co." ):
210+ def create_micro_brewery (name :str = " Hipster Brew Co." ):
211211 slug= hashlib.sha1(name.encode()).hexdigest()
212212# etc.
213213```
@@ -496,7 +496,9 @@ def parse(tokens: list) -> list:
496496
497497###Don't use flags as function parameters
498498
499- Flags tell your user that this function does more than one thing. Functions should do one thing. Split your functions if they are following different code paths based on a boolean.
499+ Flags tell your user that this function does more than one thing. Functions
500+ should do one thing. Split your functions if they are following different code
501+ paths based on a boolean.
500502
501503** Bad:**
502504
@@ -523,3 +525,52 @@ def create_temp_file(name: str) -> None:
523525```
524526
525527** [ ⬆ back to top] ( #table-of-contents ) **
528+
529+ ###Avoid side effects
530+
531+ A function produces a side effect if it does anything other than take a value in
532+ and return another value or values. A side effect could be writing to a file,
533+ modifying some global variable, or accidentally wiring all your money to a
534+ stranger.
535+
536+ Now, you do need to have side effects in a program on occasion - for example, like
537+ in the previous example, you might need to write to a file. In these cases, you
538+ should centralize and indicate where you are incorporating side effects. Don't have
539+ several functions and classes that write to a particular file - rather, have one
540+ (and only one) service that does it.
541+
542+ The main point is to avoid common pitfalls like sharing state between objects
543+ without any structure, using mutable data types that can be written to by anything,
544+ and not centralizing where your side effects occur. If you can do this, you will be
545+ happier than the vast majority of other programmers.
546+
547+ ** Bad:**
548+
549+ ``` python
550+ # Global variable referenced by following function.
551+ # If another function used this name, now it'd be an array and could break.
552+ name= ' Ryan McDermott'
553+
554+ def split_into_first_and_last_name () ->None :
555+ global name
556+ name= name.split()
557+
558+ split_into_first_and_last_name()
559+
560+ print (name)# ['Ryan', 'McDermott']
561+ ```
562+
563+ ** Good:**
564+ ``` python
565+ def split_into_first_and_last_name (name :str ) ->None :
566+ return name.split()
567+
568+ name= ' Ryan McDermott'
569+ new_name= split_into_first_and_last_name(name)
570+
571+ print (name)# 'Ryan McDermott'
572+ print (new_name)# ['Ryan', 'McDermott']
573+ ```
574+
575+ ** [ ⬆ back to top] ( #table-of-contents ) **
576+