Files
ailearning/docs/da/007.md
2020-10-19 21:08:55 +08:00

1319 lines
31 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
[<matplotlib.lines.Line2D at 0x9fb6fd0>]
```
![](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
<matplotlib.axes._subplots.AxesSubplot at 0xc2e3198>
```
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWwAAAEECAYAAAAMOA6OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVdW5+PHvC0PvdagCCqgoBjEaVNRBxaveBDUEFY1o
9KIx0SDGGCS/6BhjjBqNEvXGHvCqWKNy1asoDkGDEghFYBRBUKSXoUoZhvf3x9qbUzgzp/f38zzz
7HL23mftNWfeWWftVURVMcYYk/vqZTsBxhhjYmMB2xhj8oQFbGOMyRMWsI0xJk9YwDbGmDxhAdsY
Y/JETAFbROqLyFwRmeJttxWRqSKyRETeFZHW6U2mMcaYWEvYY4DFgN9oexwwVVX7Au9728YYY9Io
asAWkW7AucATgHi7hwETvfWJwPlpSZ0xxpgDYilh/xn4FbA/aF+pqq7z1tcBpalOmDHGmFB1BmwR
+T6wXlXnEihdh1DXt936txtjTJqVRHn9JGCYiJwLNAZaisgzwDoR6aSqa0WkM7A+0skiYoHcGGMS
oKoHFZLrLGGr6nhV7a6qvYCLgWmqehnwBnC5d9jlwGt1XKMgfm677baspyHbP5YHlgfFfv+ZyoPa
xNsO27/SH4GhIrIEON3bNsYYk0bRqkQOUNXpwHRvfTNwZroSZYwx5mDW0zFGZWVl2U5C1lkeWB4U
+/1DdvNA6qovSfriIprO6xtjTCESETTCQ8eYq0RSnRiTG+wfqjH5IysBGyxQ5AL7x2lMfrE6bGOM
yRMWsI0xJk9YwDbGmDxhATtJV1xxBb/97W8BmDFjBkcccURKrmVMrtu9G376U6iqynZKiocF7FqU
lZXRtm1b9u7dW+dxInLg4d0pp5zCZ599VuuxqsqECRPo378/zZs3p3v37lx44YUsXLjwoGsZk+sW
LIBHH4W2bbOdkuJhATuCFStWMGvWLDp27Mgbb7wR9fhYW7yMGTOGCRMm8Je//IWqqiqWLFnC+eef
z1tvvRX3tYzJNvuoZp4F7AgmTZrEmWeeyWWXXcbEiRNDXps7dy4DBw6kZcuWXHzxxezevfvAaxUV
FXTv3j3iNb/44gseeeQRJk+eTFlZGQ0aNKBJkyZccskl3HzzzRHPefzxx+nTpw/t2rXjvPPOY82a
NQdeGzt2LKWlpbRq1YpjjjmGRYsWAbBnzx5uuukmevToQadOnbj22mtD0mhMquzfH/0Yk1oWsCOY
NGkSF110ERdeeCHvvPMO69e70WP37t3L+eefz+WXX05VVRUjRozglVdeiaka4/3336d79+5897vf
jSkN06ZNY/z48bz00kusWbOGHj16cPHFFwPwzjvvMGPGDL744gu2bt3KSy+9RLt27QAYN24cS5cu
Zf78+SxdupRVq1bxu9/9LsGcMKZ2FrAzLycDtkhqfhLx4YcfsmrVKoYNG0afPn3o168fzz33HAAf
f/wx+/btY8yYMdSvX5/hw4dz/PHHx3TdTZs20alTpxju3SX82Wef5aqrrmLAgAE0bNiQu+66i5kz
Z/L111/TsGFDtm/fTmVlJfv37+fwww+nU6dOqCqPP/44999/P61bt6Z58+bccsstTJ48ObHMMKYO
FrAzLycDtmpqfhIxceJEzjrrLFq0aAHAiBEjDlSLrF69mq5du4Yc36NHj5iu265du5AqjWj8UrWv
WbNmtGvXjlWrVjFkyBCuu+46fv7zn1NaWso111zD9u3b2bBhA99++y3HHXccbdq0oU2bNpxzzjls
3Lgx5vc1JlZWh515ORmws2XXrl28+OKLTJs2jc6dO9O5c2fuu+8+FixYwIIFC+jSpQurVq0KOeer
r76K6dpnnHEG33zzDXPmzInp+C5durBixYoD2zt37mTTpk0H/mFcf/31zJ49m8WLF7NkyRLuvfde
OnToQJMmTVi8eDFVVVVUVVWxZcsWtm3bFlsGGBMHK2FnngXsIK+99holJSVUVlYyf/585s+fT2Vl
JYMHD2bSpEmceOKJlJSUMGHCBKqrq3n11Vf517/+FdO1+/Tpw89+9jNGjhzJ9OnT2bt3L7t372by
5MncfffdACGzTYwcOZKnn36a+fPns2fPHsaPH8+gQYM45JBDmD17Np988gnV1dU0bdqUxo0bU79+
fUSE0aNHc8MNN7BhwwYAVq1axbvvvpueDDNFLUqLV5MGUQO2iDQWkU9EZJ6ILBaRu7z95SLyjYjM
9X7OTn9y02vSpElceeWVdOvWjY4dO9KxY0dKS0u57rrreO6556hfvz6vvvoqf/vb32jXrh0vvvgi
w4cPj/n6EyZMOFCV0aZNG3r37s3rr7/OsGHDgNB22GeccQZ33HEHw4cPp0uXLixfvvxAXfS2bdu4
+uqradu2LT179qR9+/b86le/AuDuu++md+/eDBo0iFatWjF06FCWLFmS4pwyBl5/PdspKD4xjYct
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
G8sUQyi3yAAAAABJRU5ErkJggg==
)