解释型语言与编译型语言(C语言)的区别:
优势:代码量小、抽象程度更高(解放大脑)…
劣势:运行速度慢、维护难、解释器的GIL锁…
对象 = 存在(属性) + 变化(方法)
特性:封装、继承、多态
变量名机制
对象的可变与不可变
函数传参全部是引用传参(传入对象的内存地址)
区分全局变量与局部变量
引用计数
爬虫:
Requests:请求网页
BeautifulSoup:对网页的html文本进行解析分析
网络编程:
sockets:
数据分析:
numpy: 一个多维数组对象,ndarray
pandas:一个数据框,DataFrame
其他例子:
Scrapy:爬虫
Pillow: 图形库
matplotlib:数据可视化
Pygame:游戏编程
…
import requests
from bs4 import BeautifulSoup
from socket import *
import numpy as np
import pandas as pd
3种原子数据类型:int、float、str。分别表示整数、小数、字符串,其实它们均是类,有相应的属性和方法。
3中组合数据类型:list、tuple、dict。分别表示列表、元组、字典。list最为常用,他有非常常用的方法,比如
1、list.count()统计:
2、list.append()添加对象:
3、list.extend()扩展列表:
4、list.pop()删除对象:
5、list.remove()删除匹配项:
6、list.insert()插入对象:
7、list.copy复制列表:
8、list.reverse()反向排序:
9、list.index()获取索引:
10、list.sort()排序:
通过下面命令了解某个类的详细的用法。
help(className)
e.g.
help(str)
help(list)
注:除此之外,想要自定义自己的数据类型,可以通过定义类来实现。
for 变量 in 可迭代对象:
e.g.
for x in range(n):
do someting...
注:可迭代对象:对象中有定义next()方法,常见的列表、元组、字符串均是可迭代对象。range(n)返回一个可迭代对象。
while(n <= 30):
do something
n += 1
if(condition 0):
process block 0
elif(condition 1):
process block 1
else:
process block 2
break:强行终止本层循环
continue:强行终止本次循环
算术://:整除 **:乘方 %:取余
逻辑: and or not : 与或非
比较运算: ==、 !=
赋值运算: +=、 *=、 /=、 //=
隶属运算: in、 not in (字符串、列表…)
对象恒等:is、 is not
def logistic(X,Y,alpha=0.1,epsilon=1,numIter=20,method='SGD'):
coding your function
return sth
四种参数:
位置参数:依位置传入,logistic(xData,yData)
默认参数:已有默认值,必须放置在位置参数后面,如epsilon=1,numIter=20,method=‘SGD’
关键字参数:
可变长参数:
class Person:
def __init__(self,high,weight,age):
self.high = high
self.__weight = weight # 私有属性
self.__age = age # 私有属性
def dressUp(self):
need 5 minutes
return 5
class Women(Person):
def dressUp(self):
need 50 minutes
return 50
class Man(Person):
def __init__(self,high,weight,age):
self.high = high
self.weight = weight
self.age = age
例如,对男人与女人,想要输出他们的打扮时间,用一个函数就可以。只需要把这个函数的接受参数定义成二者的父类即可。
def printTime(Person):
print(Person.dressUp)
return sth
boy = Man(175,140,20) # 创建一个实例
girl = Women(170,100,20) # 创建一个实例
printTime(boy) # 输出 5 minutes
printTime(girl) # 输出 50 minutes
参考资料:《利用python进行数据分析》第4章:Numpy基础:数据与矢量计算。
dtype:数组元素的类型,如int、float、str等。
shape:数组的维度情况,如(5,5)表示5*5的二维数组。
熟悉数组的索引对操作数据非常有帮助。索引大概可以分为两类:
返回内存地址映像:(切片索引,连续型)
返回数组副本:(花式索引,离散型)
e.g.
arr[a0:b0,a1:b1,a2:b2]
注:如果不想降低维度,可用 a r r [ a : a + 1 , x 2 , . . . , x n − 1 ] arr[a:a+1,x_2,...,x_{n-1}] arr[a:a+1,x2,...,xn−1]代替。
e.g.
arr[a0,a1:b1,a2:b2]
e.g.
arr[a0:b0]
a r r [ x 0 , x 1 , . . . , x n − 1 ] arr[x_0,x_1,...,x_{n-1}] arr[x0,x1,...,xn−1]。这里面每一个 x i x_i xi表示的是一个整数列表" [ a i , b i , c i ] [a_i,b_i,c_i] [ai,bi,ci]",它返回对应维度对应排列的数组副本。
a r r [ x 0 , x 1 , . . . , x n − 1 ] arr[x_0,x_1,...,x_{n-1}] arr[x0,x1,...,xn−1],返回对应索引的值副本,他是一个行向量,可以利用它来去数组的特定位置的元素。
e.g.
arr[[0,4,2],[1,2,3]] # arr为二维数组,则返回3个元素,其索引分为为[0,1]、[4,2]、[2,3]
e.g.
arr[[0,4,2]] # arr为二维数组,则返回第0、4、2行,相当于arr[[0,4,2],:]
e.g.
arr[arr<0] = 0 # 将arr中的负值替换为0
注:一般而言,有些情况数组是没有维度的概念,这时其shape为(n,)。因为为了避免莫名其妙的错误,我们可以抛弃这种写法。在上述的的矢量化计算函数中,如np.sum,np.max等其返回的结果均是这种序列,因此需要加上一个参数keepdims = True,此时才能保持维度,避免出错。