Python - ct.Evernote

2018/6/10
Python:
简单、伪代码式
易学、语法体系
自由开放、FLOSS
高级语言、跨平台
解释性、字节码中间形式,无需考虑编译链接和加载,易于迁移
面向对象和面向过程、可重用代码段和对象(数据和功能)
可扩展可嵌入、

代码和注释的哲学>
Code Tells You How, Comments Tell You Why
Programs must be written for people to read, and only incidentally for machines to execute.

it’s impossible for code to be completely self-documenting. Comments can never be replaced by code alone.

Code can’t explain why the program is being written, and the rationale for choosing this or that method. Code cannot discuss the reasons certain alternative approaches were taken.

变量:
字面常量(Literal Constants):数字或者文本,使用它字面意义上的值或者内容;
数字(Integral & Floats、Floating Point Numbers):只要int和float这两个类型了!
字符串:字符的序列(Sequence of Characters)-> String,不可变,python中无char类型了!

# 表示形式
#1 
'Quote me on this'
#2 
"What's your name?" # 和单引号效果一毛一样
#3
'''这是一段多行字符串。这是它的第一行。
This is the second line.
"What's your name?," I asked.
He said "Bond, James Bond."
'''

# 格式问题
# 从其他类型转为字符串类型:format(), 例子
age = 20
name = 'Swaroop'
print('{0} was {1} years old when he wrote this book'.format(name, age))

转义序列(Escape Sequence):\ \n \t \ … …
在这里插入图片描述
Python 2018/7/4 10:24
(y,x) 行列

0b 0o 0x: 2、4、8进制
逻辑运算符是 英文单词
支持成员运算符,属模式匹配:in / not in
身份运算符,
在这里插入图片描述
from numpy import * 和 import numpy 的区别 // import numpy as np

运算符优先级从小到大:
在这里插入图片描述

变量命名:

使用单下划线(_one_underline)开头表示方法不是API的一部分,不要直接访问(虽然语法上访问也没有什么问题)。
使用双下划线开头(__two_underlines)开头表示子类不能覆写该方法。除非你真的知道你在干什么,否则不要使用这种方式。
当你想让自己定义的对象也可以像Python内置的对象一样使用Python内置的一些函数或操作符(比如len、add、+、-、==等)时,你可以定义该类方法(双下划线)。
当然还有些属性只在末尾加了但下划线,这仅仅是为了避免我们起的一些名字和Python保留关键字冲突,没有特殊含义。

函数:string.join()
Python中有join()和os.path.join()两个函数,具体作用如下:
join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
os.path.join(): 将多个路径组合后返回
在这里插入图片描述

@ 修饰符是什么鬼 property

虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。

del删除的是变量,而不是数据

为了避免打开文件后忘记关闭,可以通过管理上下文,即:(建议使用此方法打开文件)
with open(‘xb’) as f:
pass
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源

prickle模块处理字符串时,没有区分大小写和空格,XXX 逗逼了,由于前面代码的影响!
注意 python2 默认prickle的dump和load是二进制形式,而python则是t,字符串形式

Python 标准库(Python Standrad Library) 中包含了大量有用的模块,同时也是每个标准的
Python 安装包中的一部分

python的排序:
(https://www.cnblogs.com/ShaunChen/p/6205330.html)

列表的排序
内建方法(类方法)list.sort(func=None, key=None, reverse=False(or True))
会改变原列表,函数返回none,reverse为是否升序排序
内建函数sorted(func=None, key=None, reverse=False(or True))
:通过key,使用func,安装reverse方向进行排序
sorted()不会改变原来的list,而是会返回一个新的已经排序好的list
list.sort()方法仅仅被list所定义,sorted()可用于任何一个可迭代对象

sorted(student_tuples, key=lambda student: student[2])

list = [(‘d’,3),(‘a’,5),(‘d’,1),(‘c’,2),(‘d’,2)]
print sorted(list, key = lambda x:(x[0],x[1]))
[(‘a’, 5), (‘c’, 2), (‘d’, 1), (‘d’, 2), (‘d’, 3)]

operator.itemgetter()   ----- 通过下标
operator.attrgetter()   ----- 通过参数
operator.methodcaller() -----对某个对象的使用固定参数进行排序

在这里插入图片描述在这里插入图片描述

python 有字典、列表、元组等数据类型,numpy 数组array和matrix!注意numpy库提供的数组操作不支持python自带的数据类型!

在这里插入图片描述

matplotlib.pyplot.scatter() … …
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xcord1, ycord1, s=30, c=‘red’, marker=‘s’)
ax.scatter(xcord2, ycord2, s=30, c=‘green’)
x = arange(-3.0, 3.0, 0.1)
y = (-weights[0] - weights[1] * x) / weights[2]
ax.plot(x, y)
plt.xlabel(‘X1’);
plt.ylabel(‘X2’);
plt.show()

coverage.py是一个用来统计python程序代码覆盖率的工具,度量被测代码中每个可执行语句是否被执行到了

Python3 抛弃了raw_input和input之间的纠葛,统一整合为input函数:
Python2.x中,input()函数让我们明确我们输入的是数字格式还是字符格式,就是我们自己要知道我们想要的是什么,数字格式直接输入,字符格式必须加上单引号或者双引号,以确定我们输入的是字符串;
Python2.x中,raw_input()函数无论用户输入什么,都默认为字符格式,不用加" “;
在Python3中是将Python2中的input()删除了,把raw_input()的名称改成了input()函数,不管输入什么都不用加” ",得到的都是字符或字符串。

修改了模块后,需要重载该模块,python2中直接reload(x), python3中需要:
from imp import reload
reload(kNN)

list(range(3)) = [0, 1, 2]

set类型,集合
set是一个无序且不重复的元素集合。
集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。
set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:
1 不重复
2 元素为不可变对象

yield关键字
yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器
当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象
当你使用for进行迭代的时候,函数中的代码才会执行在这里插入图片描述

第一次迭代中你的函数会执行,从开始到达 yield 关键字,然后返回 yield 后的值作为第一次迭代的返回值. 然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。

python 数据对象梳理
(http://python.jobbole.com/87805/)在这里插入图片描述

容器(Container)
容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。(Bloom filter 比较特殊,这是啥?)
可迭代对象(iterable)
刚才说过,很多容器都是可迭代对象,此外还有更多的对象同样也是可迭代对象,比如处于打开状态的files,sockets等等。但凡是可以返回一个迭代器的对象都可称之为可迭代对象
在这里插入图片描述在这里插入图片描述

迭代器(iterator)
一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,iter__返回迭代器自身,next__返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常,至于它们到底是如何实现的这并不重要。(工厂模式?)迭代器就像一个懒加载的工厂,等到有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用。
生成器(generator)
生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter
()和__next
()方法了,只需要一个yiled关键字。 生成器一定是迭代器(反之不成立),因此任何生成器也是以一种懒加载的模式生成值。用生成器来实现斐波那契数列的例子是:
在这里插入图片描述
生成器表达式(generator expression)
生成器表达式是列表推倒式的生成器版本,看起来像列表推导式,但是它返回的是一个生成器对象而不是列表对象。
在这里插入图片描述在这里插入图片描述

列表推导(List Comprehension),或者列表解析:
(https://www.cnblogs.com/tkqasn/p/5977653.html)
列表(list)推导式在这里插入图片描述在这里插入图片描述
字典(dict)推导式
在这里插入图片描述
集合(set)推导式在这里插入图片描述
list() 把元组转为列表

numpy自定义的array的方法,a.shape[0] … …

Pycharm默认的代码格式化:Ctrl+Shift+Alt+L

PEP8 规范:
(https://blog.csdn.net/ratsniper/article/details/78954852#naming-conventions-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83):

read 读取整个文件
readline 读取一行
readlines 读取整个文件到一个迭代器以供我们遍历(读取到一个list中,以供使用,比较方便)在这里插入图片描述

lenses = [inst.strip().split(’\t’) for inst in fr.readlines()] 注意是readlines不是readline,采用后者的话,读取的是字符串,不是迭代对象,不适用for x in a!前者读取的是list类型的数据,而read([size]),读取的字节数多少,若无参数则认为读取全文件!

正则表达式
(https://www.cnblogs.com/dreamer-fish/p/5282679.html),对于:
FutureWarning: split() requires a non-empty pattern match 这种问题,
是对于方法re.split(pattern, string, maxsplit=0, flags=0)来说,当pattern是空的时候,匹配会被忽略。不会忽略的做法将在未来的python中实现,还是会抛出FutureWarning(来自https://blog.csdn.net/u014683535/article/details/51872093)

pycharm 有test模式,不知道是个啥,反正恶心,如何退出就是在菜单栏选run… 在跳出的菜单栏中不选带test的就好了
(https://blog.csdn.net/docterzzz/article/details/79055696)

控制台运行py文件的命令 (Python Console):
run xxx.py
而在终端里(Terminal)的:
python xxx.py

RSS(Really Simple Syndication,简易信息聚合):
(https://blog.csdn.net/hshl1214/article/details/50580073)
feed是一种给用户持续提供内容的数据形式,是由多个内容提供源组成的资源聚合器,由用户主动订阅消息源并且向用户提供内容

Python的Feed解析库:
(https://www.cnblogs.com/bbn0111/p/7056366.html)
使用conda管理Python开发环境
(https://www.cnblogs.com/Datapotumas/p/6293309.html):
库的安装:conda list conda search conda install
创建环境:… …
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 ??? ???

RSS源:如何快速的获取某领域的RSS源,使用RSS源搜索引擎,比如rsssearchhub.com
https://www.zhihu.com/rss

zeros,ones,eyes() 函数构造的是numpy中的matrix类型

Python2自动转Python3:2to3.py:
(https://blog.csdn.net/chaowanghn/article/details/54768023)

x = mat(y),list y -> list x

X.getA() 等于 np.asarray(self),将matrix转换为array
在这里插入图片描述
除法/自动产生的类型是浮点型,因此出现上述错误,修正方法为,将/更改为//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值