# Python 入门演示 ## 简单的数学运算 整数相加,得到整数: In [1]: ```py 2 + 2 ``` Out[1]: ```py 4 ``` 浮点数相加,得到浮点数: In [2]: ```py 2.0 + 2.5 ``` Out[2]: ```py 4.5 ``` 整数和浮点数相加,得到浮点数: In [3]: ```py 2 + 2.5 ``` Out[3]: ```py 4.5 ``` ## 变量赋值 **Python**使用`<变量名>=<表达式>`的方式对变量进行赋值 In [4]: ```py a = 0.2 ``` ## 字符串 String 字符串的生成,单引号与双引号是等价的: In [5]: ```py s = "hello world" s ``` Out[5]: ```py 'hello world' ``` In [6]: ```py s = 'hello world' s ``` Out[6]: ```py 'hello world' ``` 三引号用来输入包含多行文字的字符串: In [7]: ```py s = """hello world""" print s ``` ```py hello world ``` In [8]: ```py s = '''hello world''' print s ``` ```py hello world ``` 字符串的加法: In [9]: ```py s = "hello" + " world" s ``` Out[9]: ```py 'hello world' ``` 字符串索引: In [10]: ```py s[0] ``` Out[10]: ```py 'h' ``` In [11]: ```py s[-1] ``` Out[11]: ```py 'd' ``` In [12]: ```py s[0:5] ``` Out[12]: ```py 'hello' ``` 字符串的分割: In [13]: ```py s = "hello world" s.split() ``` Out[13]: ```py ['hello', 'world'] ``` 查看字符串的长度: In [14]: ```py len(s) ``` Out[14]: ```py 11 ``` ## 列表 List Python用`[]`来生成列表 In [15]: ```py a = [1, 2.0, 'hello', 5 + 1.0] a ``` Out[15]: ```py [1, 2.0, 'hello', 6.0] ``` 列表加法: In [16]: ```py a + a ``` Out[16]: ```py [1, 2.0, 'hello', 6.0, 1, 2.0, 'hello', 6.0] ``` 列表索引: In [17]: ```py a[1] ``` Out[17]: ```py 2.0 ``` 列表长度: In [18]: ```py len(a) ``` Out[18]: ```py 4 ``` 向列表中添加元素: In [19]: ```py a.append("world") a ``` Out[19]: ```py [1, 2.0, 'hello', 6.0, 'world'] ``` ## 集合 Set Python用{}来生成集合,集合中不含有相同元素。 In [20]: ```py s = {2, 3, 4, 2} s ``` Out[20]: ```py {2, 3, 4} ``` 集合的长度: In [21]: ```py len(s) ``` Out[21]: ```py 3 ``` 向集合中添加元素: In [22]: ```py s.add(1) s ``` Out[22]: ```py {1, 2, 3, 4} ``` 集合的交: In [23]: ```py a = {1, 2, 3, 4} b = {2, 3, 4, 5} a & b ``` Out[23]: ```py {2, 3, 4} ``` 并: In [24]: ```py a | b ``` Out[24]: ```py {1, 2, 3, 4, 5} ``` 差: In [25]: ```py a - b ``` Out[25]: ```py {1} ``` 对称差: In [26]: ```py a ^ b ``` Out[26]: ```py {1, 5} ``` ## 字典 Dictionary Python用`{key:value}`来生成Dictionary。 In [27]: ```py d = {'dogs':5, 'cats':4} d ``` Out[27]: ```py {'cats': 4, 'dogs': 5} ``` 字典的大小 In [28]: ```py len(d) ``` Out[28]: ```py 2 ``` 查看字典某个键对应的值: In [29]: ```py d["dogs"] ``` Out[29]: ```py 5 ``` 修改键值: In [30]: ```py d["dogs"] = 2 d ``` Out[30]: ```py {'cats': 4, 'dogs': 2} ``` 插入键值: In [31]: ```py d["pigs"] = 7 d ``` Out[31]: ```py {'cats': 4, 'dogs': 2, 'pigs': 7} ``` 所有的键: In [32]: ```py d.keys() ``` Out[32]: ```py ['cats', 'dogs', 'pigs'] ``` 所有的值: In [33]: ```py d.values() ``` Out[33]: ```py [4, 2, 7] ``` 所有的键值对: In [34]: ```py d.items() ``` Out[34]: ```py [('cats', 4), ('dogs', 2), ('pigs', 7)] ``` ## 数组 Numpy Arrays 需要先导入需要的包,Numpy数组可以进行很多列表不能进行的运算。 In [35]: ```py from numpy import array a = array([1, 2, 3, 4]) a ``` Out[35]: ```py array([1, 2, 3, 4]) ``` 加法: In [36]: ```py a + 2 ``` Out[36]: ```py array([3, 4, 5, 6]) ``` In [37]: ```py a + a ``` Out[37]: ```py array([2, 4, 6, 8]) ``` ## 画图 Plot Python提供了一个很像MATLAB的绘图接口。 In [38]: ```py %matplotlib inline from matplotlib.pyplot import plot plot(a, a**2) ``` Out[38]: ```py [] ``` ![](data:image/png;base64,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) ## 循环 Loop In [39]: ```py line = '1 2 3 4 5' fields = line.split() fields ``` Out[39]: ```py ['1', '2', '3', '4', '5'] ``` In [40]: ```py total = 0 for field in fields: total += int(field) total ``` Out[40]: ```py 15 ``` Python中有一种叫做列表推导式(List comprehension)的用法: In [41]: ```py numbers = [int(field) for field in fields] numbers ``` Out[41]: ```py [1, 2, 3, 4, 5] ``` In [42]: ```py sum(numbers) ``` Out[42]: ```py 15 ``` 写在一行: In [43]: ```py sum([int(field) for field in line.split()]) ``` Out[43]: ```py 15 ``` ## 文件操作 File IO In [44]: ```py cd ~ ``` ```py d:\Users\lijin ``` 写文件: In [45]: ```py f = open('data.txt', 'w') f.write('1 2 3 4\n') f.write('2 3 4 5\n') f.close() ``` 读文件: In [46]: ```py f = open('data.txt') data = [] for line in f: data.append([int(field) for field in line.split()]) f.close() data ``` Out[46]: ```py [[1, 2, 3, 4], [2, 3, 4, 5]] ``` In [47]: ```py for row in data: print row ``` ```py [1, 2, 3, 4] [2, 3, 4, 5] ``` 删除文件: In [48]: ```py import os os.remove('data.txt') ``` ## 函数 Function Python用关键词`def`来定义函数。 In [49]: ```py def poly(x, a, b, c): y = a * x ** 2 + b * x + c return y x = 1 poly(x, 1, 2, 3) ``` Out[49]: ```py 6 ``` 用Numpy数组做参数x: In [50]: ```py x = array([1, 2, 3]) poly(x, 1, 2, 3) ``` Out[50]: ```py array([ 6, 11, 18]) ``` 可以在定义时指定参数的默认值: In [51]: ```py from numpy import arange def poly(x, a = 1, b = 2, c = 3): y = a*x**2 + b*x + c return y x = arange(10) x array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) ``` Out[51]: ```py array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) ``` In [52]: ```py poly(x) ``` Out[52]: ```py array([ 3, 6, 11, 18, 27, 38, 51, 66, 83, 102]) ``` In [53]: ```py poly(x, b = 1) ``` Out[53]: ```py array([ 3, 5, 9, 15, 23, 33, 45, 59, 75, 93]) ``` ## 模块 Module Python中使用`import`关键词来导入模块。 In [54]: ```py import os ``` 当前进程号: In [55]: ```py os.getpid() ``` Out[55]: ```py 4400 ``` 系统分隔符: In [56]: ```py os.sep ``` Out[56]: ```py '\\' ``` ## - 类 Class 用`class`来定义一个类。 `Person(object)`表示继承自`object`类; `__init__`函数用来初始化对象; `self`表示对象自身,类似于`C` `Java`里面`this`。 In [57]: ```py class Person(object): def __init__(self, first, last, age): self.first = first self.last = last self.age = age def full_name(self): return self.first + ' ' + self.last ``` 构建新对象: In [58]: ```py person = Person('Mertle', 'Sedgewick', 52) ``` 调用对象的属性: In [59]: ```py person.first ``` Out[59]: ```py 'Mertle' ``` 调用对象的方法: In [60]: ```py person.full_name() ``` Out[60]: ```py 'Mertle Sedgewick' ``` 修改对象的属性: In [61]: ```py person.last = 'Smith' ``` 添加新属性,d是之前定义的字典: In [62]: ```py person.critters = d person.critters ``` Out[62]: ```py {'cats': 4, 'dogs': 2, 'pigs': 7} ``` ## 网络数据 Data from Web In [63]: ```py url = 'http://ichart.finance.yahoo.com/table.csv?s=GE&d=10&e=5&f=2013&g=d&a=0&b=2&c=1962&ignore=.csv' ``` 处理后就相当于一个可读文件: In [64]: ```py import urllib2 ge_csv = urllib2.urlopen(url) data = [] for line in ge_csv: data.append(line.split(',')) data[:4] ``` Out[64]: ```py [['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close\n'], ['2013-11-05', '26.32', '26.52', '26.26', '26.42', '24897500', '24.872115\n'], ['2013-11-04', '26.59', '26.59', '26.309999', '26.43', '28166100', '24.88153\n'], ['2013-11-01', '26.049999', '26.639999', '26.030001', '26.540001', '55634500', '24.985086\n']] ``` 使用`pandas`处理数据: In [65]: ```py ge_csv = urllib2.urlopen(url) import pandas ge = pandas.read_csv(ge_csv, index_col=0, parse_dates=True) ge.plot(y='Adj Close') ``` Out[65]: ```py ``` ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWwAAAEECAYAAAAMOA6OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVdW5+PHvC0PvdagCCqgoBjEaVNRBxaveBDUEFY1o9KIx0SDGGCS/6BhjjBqNEvXGHvCqWKNy1asoDkGDEghFYBRBUKSXoUoZhvf3x9qbUzgzp/f38zzz7HL23mftNWfeWWftVURVMcYYk/vqZTsBxhhjYmMB2xhj8oQFbGOMyRMWsI0xJk9YwDbGmDxhAdsYY/JETAFbROqLyFwRmeJttxWRqSKyRETeFZHW6U2mMcaYWEvYY4DFgN9oexwwVVX7Au9728YYY9IoasAWkW7AucATgHi7hwETvfWJwPlpSZ0xxpgDYilh/xn4FbA/aF+pqq7z1tcBpalOmDHGmFB1BmwR+T6wXlXnEihdh1DXt936txtjTJqVRHn9JGCYiJwLNAZaisgzwDoR6aSqa0WkM7A+0skiYoHcGGMSoKoHFZLrLGGr6nhV7a6qvYCLgWmqehnwBnC5d9jlwGt1XKMgfm677baspyHbP5YHlgfFfv+ZyoPaxNsO27/SH4GhIrIEON3bNsYYk0bRqkQOUNXpwHRvfTNwZroSZYwx5mDW0zFGZWVl2U5C1lkeWB4U+/1DdvNA6qovSfriIprO6xtjTCESETTCQ8eYq0RSnRiTG+wfqjH5IysBGyxQ5AL7x2lMfrE6bGOMyRMWsI0xJk9YwDbGmDxhATtJV1xxBb/97W8BmDFjBkcccURKrmVMrtu9G376U6iqynZKiocF7FqUlZXRtm1b9u7dW+dxInLg4d0pp5zCZ599VuuxqsqECRPo378/zZs3p3v37lx44YUsXLjwoGsZk+sWLIBHH4W2bbOdkuJhATuCFStWMGvWLDp27Mgbb7wR9fhYW7yMGTOGCRMm8Je//IWqqiqWLFnC+eefz1tvvRX3tYzJNvuoZp4F7AgmTZrEmWeeyWWXXcbEiRNDXps7dy4DBw6kZcuWXHzxxezevfvAaxUVFXTv3j3iNb/44gseeeQRJk+eTFlZGQ0aNKBJkyZccskl3HzzzRHPefzxx+nTpw/t2rXjvPPOY82aNQdeGzt2LKWlpbRq1YpjjjmGRYsWAbBnzx5uuukmevToQadOnbj22mtD0mhMquzfH/0Yk1oWsCOYNGkSF110ERdeeCHvvPMO69e70WP37t3L+eefz+WXX05VVRUjRozglVdeiaka4/3336d79+5897vfjSkN06ZNY/z48bz00kusWbOGHj16cPHFFwPwzjvvMGPGDL744gu2bt3KSy+9RLt27QAYN24cS5cuZf78+SxdupRVq1bxu9/9LsGcMKZ2FrAzLycDtkhqfhLx4YcfsmrVKoYNG0afPn3o168fzz33HAAff/wx+/btY8yYMdSvX5/hw4dz/PHHx3TdTZs20alTpxju3SX82Wef5aqrrmLAgAE0bNiQu+66i5kzZ/L111/TsGFDtm/fTmVlJfv37+fwww+nU6dOqCqPP/44999/P61bt6Z58+bccsstTJ48ObHMMKYOFrAzLycDtmpqfhIxceJEzjrrLFq0aAHAiBEjDlSLrF69mq5du4Yc36NHj5iu265du5AqjWj8UrWvWbNmtGvXjlWrVjFkyBCuu+46fv7zn1NaWso111zD9u3b2bBhA99++y3HHXccbdq0oU2bNpxzzjls3Lgx5vc1JlZWh515ORmws2XXrl28+OKLTJs2jc6dO9O5c2fuu+8+FixYwIIFC+jSpQurVq0KOeerr76K6dpnnHEG33zzDXPmzInp+C5durBixYoD2zt37mTTpk0H/mFcf/31zJ49m8WLF7NkyRLuvfdeOnToQJMmTVi8eDFVVVVUVVWxZcsWtm3bFlsGGBMHK2FnngXsIK+99holJSVUVlYyf/585s+fT2VlJYMHD2bSpEmceOKJlJSUMGHCBKqrq3n11Vf517/+FdO1+/Tpw89+9jNGjhzJ9OnT2bt3L7t372by5MncfffdACGzTYwcOZKnn36a+fPns2fPHsaPH8+gQYM45JBDmD17Np988gnV1dU0bdqUxo0bU79+fUSE0aNHc8MNN7BhwwYAVq1axbvvvpueDDNFLUqLV5MGUQO2iDQWkU9EZJ6ILBaRu7z95SLyjYjM9X7OTn9y02vSpElceeWVdOvWjY4dO9KxY0dKS0u57rrreO6556hfvz6vvvoqf/vb32jXrh0vvvgiw4cPj/n6EyZMOFCV0aZNG3r37s3rr7/OsGHDgNB22GeccQZ33HEHw4cPp0uXLixfvvxAXfS2bdu4+uqradu2LT179qR9+/b86le/AuDuu++md+/eDBo0iFat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)