0%

Python学习笔记(一)

学习过程:Python入门 -> pandas ->scikit-learn

主要任务:学习SciPy

data.Frame学习网址

python3学习网址

Python入门(Python3)

基本输入输出

a = input("input number")
print("number is",a)

print(123,456,sep="#",end="=") #设置分隔符和结尾符
#输出: 123#456=

GC机制

维护对象的引用计数表,如果计数为0就回收资源

命名规则

一般以下划线开头的变量都是系统变量,下划线开头的变量不能被import导入,以两个下划线开头的变量是类的本地变量

赋值语句

Python支持多种赋值方式,简单赋值,序列赋值,多目标赋值,增强赋值

a = 10
(x,y) = (10,20)
[x,y] = [30,'abc']

基本容器

  • 集合:无需元素不可变
  • 数字:整数,浮点数,复数,分数
  • 序列:字符串,列表,元组都属于有序序列,支持索引分片和合并等操作
  • 映射:字典,将键映射到值

列表

a = [1,2,'abc']
b = list('python') # b = ['p','y','t','h','o','n']

列表是广义容器,可以支持下表访问,变长,可以修改成员。类似一个存储广义类型引用的变长数组。

删除元素:del a[2],会自动变长
也可以支持在任何一个位置插入分片实现变长和删除元素:a[1]=[2,3,4]

成员方法:

  • append:在列表末尾追加新对象,它直接修改原来的列表。
  • extend:新列表扩展原有的列表。
  • insert:将对象插入到列表中。
  • remove:用于移除列表中某个值的第一个匹配项。注意:该方法是一个没有返回值的原位置改变方法。
  • reverse:将列表中的元素反向存放。注意:该方法改变了列表但不返回值。
  • sort:排序

返回新的排序后的列表(不变性):

>>> arr = [1,1,4,5,1,4,1,9,1,9,8,1,0]
>>> sorted_arr = sorted(arr)
>>> arr
[1, 1, 4, 5, 1, 4, 1, 9, 1, 9, 8, 1, 0]
>>> sorted_arr
[0, 1, 1, 1, 1, 1, 1, 4, 4, 5, 8, 9, 9]

元组

创建:

>> 1,2,3
(1,2,3)
>> (1,2,3)
(1,2,3)
>> tuple([1,2,3]) #列表强转
(1,2,3)

元组对象具有不变性,可以当成其他语言的Immutable List用。当元组长度为1,必须再写一个逗号:
>>> type((1))
<class 'int'>
>>> type((1,))
<class 'tuple'>

字典

字典是python中唯一内建的映射类型,字典中是无序的,所有存储在一个特定键下,键可以是数字,字符串,甚至元组。

创建

d = ={'age':42, 'name': 'Gumby'}
items = [('name','Gumby'),('age',42)]
d = dict(items)

基本字典操作:

  • len(d)返回d中项(键-值对)的数量
  • d[k]返回到关联到键k上的值
  • d[k]=v将值v关联到键k上
  • del d[k]删除键为k的项
  • k in d 检查d中是否含有键为k的项

字典方法:

  • clear()方法清除字典中的所有项。
  • copy()方法返回一个具有相同键-值对的新字典。
  • get()返回键Key映射的值。如果键Key不存在,返回空值。可用default参数指定不存在的键的返回值。
  • pop()从字典中删除键,并返回映射值。若键不存在,则返回default;未指定default参数时会出错。
  • popitem()从字典删除并返回键值对元组。空字典调用该方法会产生KeyError错误。 - setdefault()该方法用于返回映射值或者为字典添加键值对。
  • update()该方法用于为字典添加键值对。

字典视图:字典的items()keys()values()方法用于返回字典键值对的视图对象,视图对象支持迭代操作,并可反映对字典的修改。视图对象不是列表,不支持索引。通常用list()方法将视图对象转换为列表。

  1. Items()方法返回键值对视图。
  2. keys()方法返回字典中所有键的视图。
  3. values()方法放回字典中全部值的视图。
  4. 键视图的集合操作:键视图支持各种集合运算,键值对视图和值视图不支持集合运算

字典解包合并:

>>> d1 = {"name":"thankod"}
>>> d2 = {"age":24}
>>> {**d1,**d2}
{'name': 'thankod', 'age': 24}

文件操作

myfile = open("filename")打开文件

myfile.read() #把文件内容读入一个字符串
myfile.read(n) #把n个字符读进一个字符串
myfile.readline() #把下一个换行符号之前的内容读入一个字符串,付出内容包含航尾符号
myfile.readlines() #把整个文件内容读入一个字符串列表,每一行为一个字符串
myfile.write(xstring) #把字符串写入文件指针位置,返回写入的字符个数
myfile.writelines(xlist) #把列表写入文件指针位置,返回写入字符个数
myfile.seek(n) #将文件指针移动到第n个字节,0表示只想文件开头
myfile.tell() #返回文件指针当前位置
for line in myfile # 迭代的方式从文件中每次读一行

读写二进制文件需要用到pickle模块处理文件中对象的读写
import pickle
data = {"msg":"hello"}
save_file = open('save.dat','wb')
pickle.dump(data,save_file)
save_file.close()

import pickle
with open('save_dat','rb') as load_file:
load_data = pickle.load(load_file)
# 使用with打开文件,不需要手动load_file.close(),这是个好习惯

循环和条件语句

if 1==2:
print(2)
elif 2==2:
print(1)
else:
print(3)
for var in object:
loop_statment
while cond:
loop_statement

列表循环的写法:

t = [3,5,2,1]
for x in range(len(t)):
t[x] = t[x] + 10

等价于
t = [x+10 for x in t]

筛选
t = [x+10 for x in t if(x % 2 == 0)]

多层嵌套
[x+y for x in (10,20) for y in (1,2,3)]

zip函数参数为多个可迭代对象,每次从每个可迭代对象中取一个值组成一个元组,直到可迭代对象中的值取完,生成的zip对象包含了一系列的元组。

>>> x = zip((1,2,3),(10,20,30))
>>> next(x)
(1,10)
>>> next(x)
(2,20)
>>> next(x)
(3,30)

map函数用于将函数映射到可迭代对象,对可迭代对象中的每个元素应用该函数,函数返回值包含在生成的map对象中,ord函数返回字符的ASCII码

>>> x = map(ord,'abc')
>>> next(x)
97
>>> next(x)
98
>>> next(x)
99

filter函数与map函数有点类似,filter函数用指定函数处理可迭代对象。若函数返回值为真,则对应课迭代对象元素包含在生成的filter对象序列中。

b = [1,2,3,4,5,6]
a = list(filter(lambda item:item>2,b))
print(a)

输出[3,4,5,6]

循环过程中获得索引:

>>> arr = ["114","514","1919","810"]
>>> for i, x in enumerate(arr):
... print(i,x)
...
0 114
1 514
2 1919
3 810

字符串格式化

>>> print("I am a %s, my name is %s" %("boy","thankod"))
I am a boy, my name is thankod
>>> print("I am a {0}, my name is {1}".format("boy","thankod"))
I am a boy, my name is thankod

函数

一般定义:

def print_word(word):
print("hello %" %word)

匿名函数lamda:
a = list(filter(lambda item:item > 2,b))

解构元组参数:
>>> def plus(a,b):
... return a + b
...
>>> args = (3,4)
>>> plus(*args)
7

yield

yield可以将函数编程一个生成器,在return前就输出每次迭代的结果。

>>> def fibonacci(n):
... a,b = 1,1
... for i in range(n):
... yield a
... a, b = b, a + b
...
>>> for out in fibonacci(10):
... print(out)
...
1
1
2
3
5
8
13
21
34
55

模块 包

多个模块构成了包,引入例子:

from PIL import image
import pandas as pd

面向对象

class Duck(Animals): #父类是Animal
def __init__(self,_name): #构造函数
self.name = name
def quake(self):
print('i am % ,ga ga' %self.name)

python的对象成员方法,即使是构造器,也要写self参数。即使在对象内部调用内部方法,也要写成self.method(),调用

duck = Duck('Donnald')
duck.quake()

第三方包

Numpy

Numpy是Python中科学计算的基础包,可用来存储和处理大型矩阵。它的主要对象是同种
元素的多维数组(以及派生的矩阵等),NumPy的数组类被称作 ndarray 。在NumPy中
维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。

学习参考地址

pandas包

pandas是python环境下最有名的数据统计包, pandas包中主要的数据结构是DataFrame。

DataFrame翻译为数据框,是一种数据组织方式,每列可以是不同的值类型(数值、字符
串、布尔值等)。Dataframe的优点是可以按列来操作数据。

turtle包

turtle是一个简单的画图工具,封装了logo语言

import turtle
t = turtle.Pen()
t.left(120) #右转/度
t.forward(10) #前进/像素
t.right(120)
t.forward(10)
t.reset() #复位

Disqus评论区没有正常加载,请使用科学上网