====== Python ====== * [[https://www.python.org | Officail site: python.org]] * [[http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb | Key differences between python2 and 3]] ===== Tips ===== * 快速开一个静态http服务: 进入文件夹, 然后 ''python -m SimpleHTTPServer 80'' * In Terminal, type ''pydoc raw_input'' Read what it says about "raw_input". If you're on Windows try ''python -m pydoc raw_input'' instead. Get out of pydoc by typing ''q'' to quit. * python为动态语言,与js类似, list,dict等object的''=''赋值在默认为引用. 如果不需要引用, 那么拷贝list用''list2 = list1[:]'',之后list2的改动便与list1无关. * python 变快的 9 个技巧:[[https://medium.com/techtofreedom/9-subtle-tricks-to-make-your-python-code-much-faster-50be6dd69a30|9-subtle-tricks-to-make-your-python-code-much-faster]] * 拼接字符串的速度, 直接 ''+'' 快于 ''join()'' 快于 ''+='' 一项项加. * Faster List Creation: Use “[]” Over “list()” 用 ''[]''来初始化列表 * Faster Membership Testing: Use a Set Over a List * Faster Data Generation: Use Comprehensions Over For Loops 用内包代替循环 * Faster Loops: Prioritize Local Variables 优先使用局部变量 * Faster Execution: Prioritize Built-In Modules and Libraries 优先用内置模块和库 * Faster Function Calls: Leverage Cache Decorator for Easy Memoization * Faster Infinite Loop: Prefer “while 1” Over “while True” 但是现代解释器基本都优化过, ''while TRUE'' 还更有可读性 * Faster Start-Up: Import Python Modules Smartly ===== 从零开始 ===== * [[http://learnpythonthehardway.org/book/ | learn python the hard way]] python2. * Learning more: * [[http://learnrubythehardway.org/|Learn Ruby The Hard Way]] You will learn even more about programming as you learn more programming languages, so try learning Ruby too. * [[https://docs.djangoproject.com/en/1.4/intro/tutorial01/|The Django Tutorial]] and try to build a web application with the [[https://www.djangoproject.com/|Django Web Framewor]]. * [[http://www.scipy.org/|SciPy]] if you're into science, math, and engineering and also [[http://dexy.it|Dexy]] for when you want to write awesome papers that incorporate SciPy or any code really. * [[http://www.pygame.org/news.html|PyGame]] and see if you can make a game with graphics and sound. * [[http://pandas.pydata.org/|Pandas]] for doing data manipulation and analysis. * [[http://nltk.org/|Natural Language Tool Kit]] for analyzing written text and writing things like spam filters and chat bots. * [[http://docs.python-requests.org/en/latest/index.html|Requests]] to learn the client side of HTTP and the web. * [[http://simplecv.org/|SimpleCV]] to play with making your computer see things in the real world. * [[http://scrapy.org/|ScraPy]] and try scraping some web sites to get information off them. * [[https://www.panda3d.org/|Panda3D]] for doing 3D graphic and games. * [[http://kivy.org/|Kivy]] for doing user interfaces on desktops and mobile platforms. * [[http://scikit-learn.org/stable/|SciKit-Learn]] for machine learning applications. * [[http://renpy.org/|Ren'Py]] for doing interactive fiction games, similar to what you've built in this book but with pictures. * Notes: # ------------------------------------------------------------------------- # ex1: Print # -*- coding: utf-8 -*- print "I'd much rather you 'not'." print 'I "said" do not touch this.' print "世界,你好" # on terminal, run ex1.py python ex1.py # ------------------------------------------------------------------------- # ex2: Common # This is a common print "common" #This is a common too. # ------------------------------------------------------------------------- # ex3: Numbers and Math # + - / * % < > <= >= # more: ** print "Result is ", 2*2-3/1, "+", 7%6,"=", 2, "is", 2>1, 2**8 # ------------------------------------------------------------------------- # ex4: Variables And Names cars = 100 space_in_a_car = 4.0 # ------------------------------------------------------------------------- # ex5: More Variables and Printing my_name = 'lucy' my_age = 16 print "My name is %s." % my_name print "My name is %s, i am %d old." % ( my_name, my_age ) # ------------------------------------------------------------------------- # ex6: Strings and Text print "My name is: %r" % "lucy" # Print "My name is:'lucy'". print "My name is: '%s'" % "lucy" # Print the same. my_name = "My name is: %r" print my_name % 'lucy' # Print the same. # ------------------------------------------------------------------------- # ex7: More Printing print "a" + "b" + "c" * 5 # Print "abccccc" # ------------------------------------------------------------------------- # ex8: Printing, Printing formatter = "%r %r %r %r" print formatter % (1, 2, 3, 4) print formatter % ("one", "two", "three", "four") print formatter % (True, False, False, True) print formatter % (formatter, formatter, formatter, formatter) # ------------------------------------------------------------------------- # ex9: Printing, Printing, Printing # Here's some new strange stuff, remember type it exactly. days = "Mon Tue Wed Thu Fri Sat Sun" months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug" print "Here are the days: ", days print "Here are the months: ", months print """ There's something going on here. With the three double-quotes. We'll be able to type as much as we like. Even 4 lines if we want, or 5, or 6. """ # ------------------------------------------------------------------------- # ex10 print "\t \\ \" '\"' " # ------------------------------------------------------------------------- # ex11: Asking Questions print "How old are you?", # We put a "," (comma) at the end of each print line. This is #so print doesn't end the line with a newline character and go to the next line. age = raw_input() print "So, you're %r old" % age # ------------------------------------------------------------------------- # ex12: Prompting People age = raw_input("How old are you ?") # ------------------------------------------------------------------------- # ex13: Parameters, Unpacking, Variables from sys import argv script, first, second, third = argv print "The script is called:", script print "Your first variable is:", first print "Your second variable is:", second print "Your third variable is:", third # ex14: Prompting and Passing # Nothing impresses me. # ------------------------------------------------------------------------- # ex15: Reading Files print "Type the filename :" filename= raw_input("> ") txt= open(filename) print txt_again.read() # ------------------------------------------------------------------------- # ex16: Reading and Writing Files # class file's function: # close : like save # read: # seek: # readline -- Reads just one line of a text file. # truncate -- Empties the file. Watch out if you care about the file. # write('stuff') # writeline my_file.open('tmp.txt', 'w') my_file.write('first line \n') # ex17: More files # Nothing impresses me. # ------------------------------------------------------------------------- # ex18: Names, Variables, Code, Functions # create a function by using the word 'def' def my_function(*args): arg1,arg2=args print "arg1:%r, arg2:%r" % (arg1, arg2) #or def print_two_again(arg1, arg2): print "arg1: %r, arg2: %r" % (arg1, arg2) # ex19: Functions and Variables # ex20: Functions and Files # ex21: Functions Can Return Something by "return" # ex22: What Do You Know So Far? # ex23: Read Some Code # ex24: More Practice # Nothing impresses me. # ------------------------------------------------------------------------- # ex25: Even More Practice # in ex25.py file: def break_words(stuff): """This function will break up words for us.""" words = stuff.split(' ') return words # usage ex25.py in Terminal: import ex25 ex25.break_words("Hello world") # call function 'break_words' in ex25.py help(ex25) # show help info about ex25.py help(ex25.break_words) # show help info about function break_words in module ex25 # Typing 'ex25' is annoying. A shortcut is to # do your import like this: 'from ex25 import * ' which is like saying, "Import everything from ex25." from ex25 import * break_words("Hello world") # ex26: Congratulations, Take a Test! # Nothing. # ------------------------------------------------------------------------- # ex27: Memorizing Logic # terms: and, or, not, !=, ==, >=, <=, True, False # ex28: Boolean Practice # Nothing impresses me. # ------------------------------------------------------------------------- # ex29: What If # ex30: Else and If # ex31: Making Decisions people = 20 cats = 30 if cars > people: print "We should take the cars." elif cars < people: print "We should not take the cars." else: print "We can't decide." # ------------------------------------------------------------------------- # ex32: Loops and Lists the_count = [1, 2, 3, 4, 5] fruits = ['apples', 'oranges', 'pears', 'apricots'] change = [1, 'pennies', 2, 'dimes', 3, 'quarters'] # this first kind of for-loop goes through a list for number in the_count: print "This is count %d" % number for fruit in fruits: print "A fruit of type: %s" % fruit # also we can go through mixed lists too # notice we have to use %r since we don't know what's in it for i in change: print "I got %r" % i # we can also build lists, first start with an empty one elements = [] # then use the range function to do 0 to 5 counts for i in range(0, 6): print "Adding %d to the list." % i elements.append(i) # now we can print them out too for i in elements: print "Element was: %d" % i # ------------------------------------------------------------------------- # ex33: While Loops i = 0 numbers = [] while i < 6: numbers.append(i) i += 1; for num in numbers: print num # ex34: Accessing Elements of Lists # Nothing impresses me. # ------------------------------------------------------------------------- # ex35: Branches and Functions from sys import exit def gold_room(): print "This room is full of gold. How much do you take?" choice = raw_input("> ") if "0" in choice or "1" in choice: how_much = int(choice) else: dead("Man, learn to type a number.") if how_much < 50: print "Nice, you're not greedy, you win!" exit(0) else: dead("You greedy bastard!") def dead(why): print why, "Good job!" exit(0) # ------------------------------------------------------------------------- # ex36: Designing and Debugging # ex37: Symbol Review # ex38: Doing Things to Lists ten_things = "Apples Oranges Crows Telephone Light Sugar" print "Wait there are not 10 things in that list. Let's fix that." stuff = ten_things.split(' ') more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"] while len(stuff) != 10: next_one = more_stuff.pop() print "Adding: ", next_one stuff.append(next_one) print "There are %d items now." % len(stuff) print "There we go: ", stuff print "Let's do some things with stuff." print stuff[1] print stuff[-1] # whoa! fancy print stuff.pop() print ' '.join(stuff) # what? cool! print '#'.join(stuff[3:5]) # super stellar! # ------------------------------------------------------------------------- # ex39: Dictionaries, Oh Lovely Dictionaries >>> stuff = {'name': 'lucy', 'age': 16} >>> print stuff['name'] lucy >>> stuff[1] = "Wow" >>> stuff {1:'Wow', 'age':16, 'name':'lucy'} >>> del stuff['age'] >>> stuff {1:'Wow', 'name':'lucy'} # for key, value in stuff.items(): print "%r : %r" % (key, value) # ------------------------------------------------------------------------- # ex40: Modules, Classes, and Objects # Modules Are Like Dictionaries # Classes Are Like Modules # Objects are Like Import # Getting Things from Things # I now have three ways to get things from things: ## dict style mystuff['apples'] ## module style mystuff.apples() print mystuff.tangerine ## class style thing = MyStuff() thing.apples() print thing.tangerine # A First Class Example: class Song(object): def __init__(self, lyrics): self.lyrics = lyrics def sing_me_a_song(self): for line in self.lyrics: print line happy_bday = Song(["Happy birthday to you", "I don't want to get sued", "So I'll stop right there"]) bulls_on_parade = Song(["They rally around tha family", "With pockets full of shells"]) happy_bday.sing_me_a_song() bulls_on_parade.sing_me_a_song() # ex41: Learning To Speak Object Oriented # ex42: Is-A, Has-A, Objects, and Classes super # ------------------------------------------------------------------------- # ex43: Basic Object-Oriented Analysis and Design # ex44: Inheritance Versus Composition class Parent(object): def override(self): print "PARENT override()" def implicit(self): print "PARENT implicit()" def altered(self): print "PARENT altered()" class Child(Parent): def override(self): print "CHILD override()" def altered(self): print "CHILD, BEFORE PARENT altered()" super(Child, self).altered() print "CHILD, AFTER PARENT altered()" dad = Parent() son = Child() dad.implicit() son.implicit() dad.override() son.override() dad.altered() son.altered() # multiple inheritance class SuperFun(Child, BadStuff): pass # Using super() with __init__ class Child(Parent): def __init__(self, stuff): self.stuff = stuff super(Child, self).__init__() # ex45: You Make a Game # Nothing impresses me. # ------------------------------------------------------------------------- # ex46: A Project Skeleton try: from setuptools import setup except ImportError: from distutils.core import setup # ------------------------------------------------------------------------- # ex47: Automated Testing nosetests from nose.tools import * assert_equal # Test files go in "tests/" and are named "BLAH_tests.py" otherwise "nosetests" won't run them. # ------------------------------------------------------------------------- # ex48: Advanced User Input # A tuple is nothing more than a list that you can't modify. # It's created by putting data inside two "("")" with a comma, like a list: first_word = ('verb', 'go') # Exceptions and Numbers def convert_number(s): try: return int(s) except ValueError: return None # ------------------------------------------------------------------------- # ex49: Making Sentences # ex50: Your First Website # ex51: Getting Input from a Browser # ex52: The Start Of Your Web Game # Nothing impresses me.