Make beautiful Python code
Upcoming SlideShare
Loading in...5
×
 

Make beautiful Python code

on

  • 3,546 views

Sure, Python can produce great readable code. But what are the best techniques for making your code shine? Some discussion about the values and principles behind great code.

Sure, Python can produce great readable code. But what are the best techniques for making your code shine? Some discussion about the values and principles behind great code.

Statistics

Views

Total Views
3,546
Views on SlideShare
1,192
Embed Views
2,354

Actions

Likes
1
Downloads
11
Comments
0

4 Embeds 2,354

http://wrongsideofmemphis.com 2340
https://twitter.com 12
http://translate.googleusercontent.com 1
http://www.linkedin.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Make beautiful Python code Make beautiful Python code Presentation Transcript

  • MAKING BEAUTIFUL PYTHON CODE Or Readability Counts BY JAIME BUELTA
  • Developers like Python because code is beautiful
  • Almost no one will appreciate it
  • (At least until there’s a problem)
  • BOSS DOES NOT CARE worried about costs and stuff
  • CUSTOMERS DON’T CARE worried about functionality and stuff
  • but your team will care
  • most of the time, the effort difference between good code and bad code is small
  • MY DREAM
  • CODE IS ALWAYS CHANGING
  • CODE NEEDS TO WORK
  • “There's a difference between getting your hands dirty and being dirty.” DS Justin Ripley (yes, the picture is not from Luther, but from The Good Cop)
  • WHAT MAKES BEAUTIFUL CODE?
  • EASY TO UNDERSTAND
  • (THEREFORE, EASY TO CHANGE)
  • NOT THE OTHER WAY AROUND
  • OVERDESIGN
  • GOOD CODE
  • FITS IN YOUR HEAD
  • BAD CODE...
  • System Module Function
  • Show how good you are HERE Not here
  • LOCALITY CONSISTENCY VERBOSITY
  • LOCALITY Keep related stuff together CONSISTENCY VERBOSITY
  • LOCALITY CONSISTENCY Use patterns VERBOSITY
  • LOCALITY CONSISTENCY VERBOSITY When in doubt, explain
  • in other words... Be as OBVIOUS as possible
  • LOCALITY
  • MSG_TEMPLATE = ‘Template {date}: {msg}’ MORE_CONSTANTS... .... def log_msg(message): formatted_msg = MSG_TEMPLATE.format( date=utcnow(), msg=this_message ) print formatted_msg
  • def log_msg(message): MSG_TEMPLATE = ‘{date}: {msg}’ formatted_msg = MSG_TEMPLATE.format( date=utcnow(), msg=message ) print formatted_msg
  • MSG_TEMPLATE = ‘{date}: {msg}’ def log_msg(message): formatted_msg = TEMPLATE.format( date=utcnow(), msg=message ) print formatted_msg
  • Related classes on the same module Keep files short Function used only in a module not in independent module Avoid boilerplate Separated business logic
  • CONSISTENCY
  • Humans are amazing recognizing patterns (so good we tend to see too many)
  • PEP8 IS THE MOST IMPORTANT PATTERN COLLECTION OUT THERE
  • Abstract common operations No getters and setters List comprehensions Decorators and with statement No private methods
  • I LOVE MY BRICK! syndrome
  • VERBOSITY
  • data = "+RESP:GTTRI,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s," "%s,%s,%s,%s,%s,%s,%s0" % (imei, number, reserved_1, reserved_2, gps_fix, speed, heading, altitude, gps_accuracy, longitude, latitude, send_time, mcc, mnc, lac, cellid, ta, count_num, ver)
  • data = (‘+RESP:GTTRI,{imei},{number},{reserved_1},’ ‘{reserved_2},{gps_fix},{speed},{heading},’ ‘{altitude},{gps_accuracy},{longitude},’ ‘{latitude},{send_time}, {mmc}, {lac}, {cellid}’ ‘{ta},{count_num}, {version}’).format( imei=imei, number=number, reserved_1=reserved_1, reserved_2=reserved_2, gps_fix=gps_fix, speed=speed, heading=heading, altitude=altitude, gps_accuracy=gps_accuracy, longitude=longitude, latitude=latitude, send_time=send_time, mcc=mcc, mnc=mnc, lac=lac, cellid=cellid, ta=ta, count_num=count_num, version=ver, )
  • WHEN IN DOUBT, COMMENT
  • PUTTING ALL TOGETHER
  • results = [] for row in query_results: tag, value, updated = row if value and updated > last_time: TEMP = ‘tag: {0}, value: {1} result = TEMP.format(tag, value) results.append(result)
  • def format_result(row): tag, value, _ = row TEMP = ‘tag: {0}, value: {1}’ return TEMP.format(tag, value) def interesting(row): _, value, updated = row return value and updated > last_time results = [format_result(row) for row in query_results if interesting(row)]
  • SMART IS THE ENEMY OF READABILITY
  • HAVE A GOOD REASON TO BE SMART And comment accordingly
  • ONE DAY, SOMEONE WILL BE SURPRISED WITH YOUR CODE
  • YOURSELF!!!
  • SO, REMEMBER
  • BE OBVIOUS
  • ASSUME YOU CAN’T FIT A LOT OF CODE ON YOUR HEAD
  • BE SMART IN SYSTEMS, NOT IN FUNCTIONS
  • LOCALITY CONSISTENCY VERBOSITY
  • Tell your buddies how much you appreciate them writing simple code!