27

Python所有特殊方法、魔术方法、 钩子

C.__init__(self[, arg1, ...]) 构造器(带一些可选的参数)

C.__new__(self[, arg1, ...]) 构造器(带一些可选的参数)通常用在设置不变数据类型的子类。

C.__del__(self) 析构器

C.__str__(self) 可打印的字符输出;内建str()及print 语句

C.__repr__(self) 运行时的字符串输出 内建repr() 和‘‘ 操作符

C.__unicode__(self) Unicode 字符串输出;内建unicode()

C.__call__(self, *args) 表示可调用的实例

C.__nonzero__(self) 为object 定义False 值 内建bool() (从2.2 版开始)

C.__len__(self) “长度”(可用于类) 内建len()

 

C.__cmp__(self, obj) 对象比较;内建cmp()

C.__lt__(self, obj) 小于/小于或等于 对应<及<=操作符

C.__gt__(self, obj) 大于/大于或等于 对应>及>=操作符

C.__eq__(self, obj) 等于/不等于 对应==,!=及<>操作符

 

C.__getattr__(self, attr) 获取属性 内建getattr() 仅当属性没有找到时调用

C.__setattr__(self, attr, val) 设置属性

C.__delattr__(self, attr) 删除属性

C.__getattribute__(self, attr) a 获取属性;内建getattr() 总是被调用

C.__get__(self, attr) a (描述符)获取属性

C.__set__(self, attr, val) a (描述符)设置属性

C.__delete__(self, attr) a (描述符)删除属性

 

C.__*add__(self, obj) 加;+操作符

C.__*sub__(self, obj) 减;-操作符

C.__*mul__(self, obj) 乘;*操作符

C.__*div__(self, obj) 除;/操作符

C.__*truediv__(self, obj) e True 除;/操作符

C.__*floordiv__(self, obj) e Floor 除;//操作符

C.__*mod__(self, obj) 取模/取余;%操作符

C.__*divmod__(self, obj) 除和取模;内建divmod()

C.__*pow__(self, obj[, mod]) 乘幂;内建pow();**操作符

C.__*lshift__(self, obj) 左移位;<<操作符

 

C.__*rshift__(self, obj) 右移;>>操作符

C.__*and__(self, obj) 按位与;&操作符

C.__*or__(self, obj) 按位或;|操作符

C.__*xor__(self, obj) 按位与或;^操作符

 

C.__neg__(self) 一元负

C.__pos__(self) 一元正

C.__abs__(self) 绝对值;内建abs()

C.__invert__(self) 按位求反;~操作符

 

C.__complex__(self, com) 转为complex(复数);内建complex()

C.__int__(self) 转为int;内建int()

C.__long__(self) 转为long;内建long()

C.__float__(self) 转为float;内建float()

 

C.__oct__(self) 八进制表示;内建oct()

C.__hex__(self) 十六进制表示;内建hex()

 

C.__coerce__(self, num) 压缩成同样的数值类型;内建coerce()

C.__index__(self)g 在有必要时,压缩可选的数值类型为整型(比如:用于切片

 

C.__len__(self) 序列中项的数目

C.__getitem__(self, ind) 得到单个序列元素

C.__setitem__(self, ind,val) 设置单个序列元素

C.__delitem__(self, ind) 删除单个序列元素

 

C.__getslice__(self, ind1,ind2) 得到序列片断

C.__setslice__(self, i1, i2,val) 设置序列片断

C.__delslice__(self, ind1,ind2) 删除序列片断

C.__contains__(self, val) f 测试序列成员;内建in 关键字

C.__*add__(self,obj) 串连;+操作符

C.__*mul__(self,obj) 重复;*操作符

C.__iter__(self) e 创建迭代类;内建iter()

 

C.__len__(self) mapping 中的项的数目

C.__hash__(self) 散列(hash)函数值

C.__getitem__(self,key) 得到给定键(key)的值

C.__setitem__(self,key,val) 设置给定键(key)的值

C.__delitem__(self,key) 删除给定键(key)的值

C.__missing__(self,key) 给定键如果不存在字典中,则提供一个默认值

C.__init__(self[, arg1, ...]) 构造器(带一些可选的参数)
C.__new__(self[, arg1, ...]) 构造器(带一些可选的参数)通常用在设置不变数据类型的子类。
C.__del__(self) 析构器
C.__str__(self) 可打印的字符输出;内建str()及print 语句
C.__repr__(self) 运行时的字符串输出 内建repr() 和‘‘ 操作符
C.__unicode__(self) Unicode 字符串输出;内建unicode()
C.__call__(self, *args) 表示可调用的实例
C.__nonzero__(self) 为object 定义False 值 内建bool() (从2.2 版开始)
C.__len__(self) “长度”(可用于类) 内建len()


C.__cmp__(self, obj) 对象比较;内建cmp()
C.__lt__(self, obj) 小于/小于或等于 对应<及<=操作符
C.__gt__(self, obj) 大于/大于或等于 对应>及>=操作符
C.__eq__(self, obj) 等于/不等于 对应==,!=及<>操作符


C.__getattr__(self, attr) 获取属性 内建getattr() 仅当属性没有找到时调用
C.__setattr__(self, attr, val) 设置属性
C.__delattr__(self, attr) 删除属性
C.__getattribute__(self, attr) a 获取属性;内建getattr() 总是被调用
C.__get__(self, attr) a (描述符)获取属性
C.__set__(self, attr, val) a (描述符)设置属性
C.__delete__(self, attr) a (描述符)删除属性


C.__*add__(self, obj) 加;+操作符
C.__*sub__(self, obj) 减;-操作符
C.__*mul__(self, obj) 乘;*操作符
C.__*div__(self, obj) 除;/操作符
C.__*truediv__(self, obj) e True 除;/操作符
C.__*floordiv__(self, obj) e Floor 除;//操作符
C.__*mod__(self, obj) 取模/取余;%操作符
C.__*divmod__(self, obj) 除和取模;内建divmod()
C.__*pow__(self, obj[, mod]) 乘幂;内建pow();**操作符
C.__*lshift__(self, obj) 左移位;<<操作符


C.__*rshift__(self, obj) 右移;>>操作符
C.__*and__(self, obj) 按位与;&操作符
C.__*or__(self, obj) 按位或;|操作符
C.__*xor__(self, obj) 按位与或;^操作符


C.__neg__(self) 一元负
C.__pos__(self) 一元正
C.__abs__(self) 绝对值;内建abs()
C.__invert__(self) 按位求反;~操作符


C.__complex__(self, com) 转为complex(复数);内建complex()
C.__int__(self) 转为int;内建int()
C.__long__(self) 转为long;内建long()
C.__float__(self) 转为float;内建float()


C.__oct__(self) 八进制表示;内建oct()
C.__hex__(self) 十六进制表示;内建hex()


C.__coerce__(self, num) 压缩成同样的数值类型;内建coerce()
C.__index__(self)g 在有必要时,压缩可选的数值类型为整型(比如:用于切片



C.__len__(self) 序列中项的数目
C.__getitem__(self, ind) 得到单个序列元素
C.__setitem__(self, ind,val) 设置单个序列元素
C.__delitem__(self, ind) 删除单个序列元素


C.__getslice__(self, ind1,ind2) 得到序列片断
C.__setslice__(self, i1, i2,val) 设置序列片断
C.__delslice__(self, ind1,ind2) 删除序列片断
C.__contains__(self, val) f 测试序列成员;内建in 关键字
C.__*add__(self,obj) 串连;+操作符
C.__*mul__(self,obj) 重复;*操作符
C.__iter__(self) e 创建迭代类;内建iter()


C.__len__(self) mapping 中的项的数目
C.__hash__(self) 散列(hash)函数值
C.__getitem__(self,key) 得到给定键(key)的值
C.__setitem__(self,key,val) 设置给定键(key)的值
C.__delitem__(self,key) 删除给定键(key)的值
C.__missing__(self,key) 给定键如果不存在字典中,则提供一个默认值

26

Node入门–一本全面的Node.js教程

关于

本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识。本书绝不是一本“Hello World”的教程。

状态

你正在阅读的已经是本书的最终版。因此,只有当进行错误更正以及针对新版本Node.js的改动进行对应的修正时,才会进行更新。

本书中的代码案例都在Node.js 0.6.11版本中测试过,可以正确工作。

读者对象

本书最适合与我有相似技术背景的读者: 至少对一门诸如Ruby、Python、PHP或者Java这样面向对象的语言有一定的经验;对JavaScript处于初学阶段,并且完全是一个Node.js的新手。

这里指的适合对其他编程语言有一定经验的开发者,意思是说,本书不会对诸如数据类型、变量、控制结构等等之类非常基础的概念作介绍。要读懂本书,这些基础的概念我都默认你已经会了。

然而,本书还是会对JavaScript中的函数和对象作详细介绍,因为它们与其他同类编程语言中的函数和对象有很大的不同。

本书结构

读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件。

当然了,应用本身并没有什么了不起的,相比为了实现该功能书写的代码本身,我们更关注的是如何创建一个框架来对我们应用的不同模块进行干净地剥离。 是不是很玄乎?稍后你就明白了。

本书先从介绍在Node.js环境中进行JavaScript开发和在浏览器环境中进行JavaScript开发的差异开始。

紧接着,会带领大家完成一个最传统的“Hello World”应用,这也是最基础的Node.js应用。

最后,会和大家讨论如何设计一个“真正”完整的应用,剖析要完成该应用需要实现的不同模块,并一步一步介绍如何来实现这些模块。

可以确保的是,在这过程中,大家会学到JavaScript中一些高级的概念、如何使用它们以及为什么使用这些概念就可以实现而其他编程语言中同类的概念就无法实现。 Continue reading

24

Linux下权限设置中的数字与字符含义解释

linux系统文件夹644、755、777等权限设置详解 ,从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限。

r 代表读(read),w 代表写(write),x 代表执行(execute)

读取(r):权限是二进制的100,十进制是4:
写入(w):权限是二进制的010,十进制是2;
执行(x):权限是二进制的001,十进制是1;

即:
r: 对应数值4 读取
w: 对应数值2 写入
x: 对应数值1 执行
-: 对应数值0 无权限

通过4、2、1的组合,得到以下几种权限:
若要 rwx 则 4+2+1=7 (读取+写入+执行)
若要 rw- 则 4+2=6 (读取+写入)
若要 r-x 则 4+1=5 (读取+执行)
若要 r– 则 =4 (读取)
若要 -wx 则 2+1=3 (写入+执行)
若要 -w- 则 =2 (写入)
若要 –x 则 =1 (执行)
若要 — 则 =0 (没有权限)

例如数字 755
第一位7等于4+2+1,rwx,所有者具有读取、写入、执行权限;
第二位5等于4+1+0,r-x,同组用户具有读取、执行权限但没有写入权限;
第三位5,同上,也是r-x,其他用户具有读取、执行权限但没有写入权限。

例如字符串 -rwxrw-r–
Linux下使用字符表示权限分成四段。
第一个表示文件类型,字符“-”表示普通文件;这个位置还可能会出现“l”链接;“d”表示目录
第二三四个字符“rwx”表示当前所属用户的权限。 数值表示为4+2+1=7,二进制是111
第五六七个字符“rw-”表示当前所属组的权限。 数值表示为4+2=6,二进制是110
第八九十个字符“r–”表示其他用户权限。 数值表示为4,二进制是100

Linux下的文件类型如下:
- 普通文件
d 目录(文件夹)
l 链接文件
b 块设备
c 字符设备

常用的linux文件权限数字代码与字符代码:
444 r–-r–-r–-
600 rw-------
644 rw-r–r–--
666 rw-rw-rw-
700 rwx------
744 rwxr–-r–-
755 rwxr-xr-x
777 rwxrwxrwx

linux下rwx权限数字解释
chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file

chmod 777 file
效果相同
chmod ug=rwx,o=x file

chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的权限

想一次修改某个目录下所有文件的权限,包括子目录中的文件也要修改权限,要使用参数-R表示启动递归处理。
chmod -R 777 /home/user

24

判断python字典中key是否存在的两种方法

第一种方法:使用自带函数实现。

在python的字典的属性方法里面有一个has_key()方法,这个方法使用起来非常简单。

例:

第二种方法:使用in方法

上面两种方式,我更推荐使用第二种,因为has_key()是python2.2之前的方法,而且使用in的方法会更快一些。

最后告诉大家一点:除了使用in还可以使用not in,判定这个key不存在哦~

24

Python文件操作

python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。

得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()

返回指定目录下的所有文件和目录名:os.listdir()

函数用来删除一个文件:os.remove()

删除多个目录:os.removedirs(r“c:\python”)

检验给出的路径是否是一个文件:os.path.isfile()

检验给出的路径是否是一个目录:os.path.isdir()

判断是否是绝对路径:os.path.isabs()

检验给出的路径是否真地存:os.path.exists()

返回一个路径的目录名和文件名:os.path.split()     eg os.path.split(‘/home/swaroop/byte/code/poem.txt’) 结果:(‘/home/swaroop/byte/code’, ‘poem.txt’)

分离扩展名:os.path.splitext()

获取路径名:os.path.dirname()

获取文件名:os.path.basename()

运行shell命令: os.system()

读取和设置环境变量:os.getenv() 与os.putenv()

给出当前平台使用的行终止符:os.linesep    Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’

指示你正在使用的平台:os.name       对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’

重命名:os.rename(old, new)

创建多级目录:os.makedirs(r“c:\python\test”)

创建单个目录:os.mkdir(“test”)

获取文件属性:os.stat(file)

修改文件权限与时间戳:os.chmod(file)

终止当前进程:os.exit()

获取文件大小:os.path.getsize(filename)
文件操作:
os.mknod(“test.txt”)        创建空文件
fp = open(“test.txt”,w)     直接打开一个文件,如果文件不存在则创建文件

关于open 模式:

w     以写方式打开,
a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+     以读写模式打开
w+     以读写模式打开 (参见 w )
a+     以读写模式打开 (参见 a )
rb     以二进制读模式打开
wb     以二进制写模式打开 (参见 w )
ab     以二进制追加模式打开 (参见 a )
rb+    以二进制读写模式打开 (参见 r+ )
wb+    以二进制读写模式打开 (参见 w+ )
ab+    以二进制读写模式打开 (参见 a+ )

 

fp.read([size])                     #size为读取的长度,以byte为单位

fp.readline([size])                 #读一行,如果定义了size,有可能返回的只是一行的一部分

fp.readlines([size])                #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

fp.write(str)                      #把str写到文件中,write()并不会在str后加上一个换行符

fp.writelines(seq)            #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

fp.close()                        #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError

fp.flush()                                      #把缓冲区的内容写入硬盘

fp.fileno()                                      #返回一个长整型的”文件标签“

fp.isatty()                                      #文件是否是一个终端设备文件(unix系统中的)

fp.tell()                                         #返回文件操作标记的当前位置,以文件的开头为原点

fp.next()                                       #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

fp.seek(offset[,whence])              #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

fp.truncate([size])                       #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

 

目录操作:
os.mkdir(“file”)                   创建目录
复制文件:
shutil.copyfile(“oldfile”,”newfile”)       oldfile和newfile都只能是文件
shutil.copy(“oldfile”,”newfile”)            oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree(“olddir”,”newdir”)        olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename(“oldname”,”newname”)       文件或目录都是使用这条命令
移动文件(目录)
shutil.move(“oldpos”,”newpos”)   
删除文件
os.remove(“file”)
删除目录
os.rmdir(“dir”)只能删除空目录
shutil.rmtree(“dir”)    空目录、有内容的目录都可以删
转换目录
os.chdir(“path”)   换路径

Continue reading

24

使用Python分割(SQL)大文件

最近重装服务器系统,备份了某网站的数据库文件,备份在一个sql文件中了,大小为100M+,在导入新数据库时因为文件过大,使用phpmyadmin无法导入。

使用notepad打开是时相当的慢,又卡死,无法手动分割文件内容,所以想到了Python来解决。

下面代码写得还不够严谨,但是基本可以解决分割sql大文件的功能。

功能:

1、输入行号,打印此行内容

2、输入起始行号(不含)和结束行号(含),打印区间的内容

3、输入要分割的文件名和要把几个表信息保存在一个文件中(默认把10个表保存在一个文件中)

注:需要修改main函数segm参数默认值

Continue reading

23

10 种机器学习算法的要点(附 Python 和 R 代码)

也许我们生活在人类历史上最关键的时期:从使用大型计算机,到个人电脑,再到现在的云计算。关键的不是过去发生了什么,而是将来会有什么发生。

工具和技术的民主化,让像我这样的人对这个时期兴奋不已。计算的蓬勃发展也是一样。如今,作为一名数据科学家,用复杂的算法建立数据处理机器一小时能赚到好几美金。但能做到这个程度可并不简单!我也曾有过无数黑暗的日日夜夜。

谁能从这篇指南里受益最多?

我今天所给出的,也许是我这辈子写下的最有价值的指南。

这篇指南的目的,是为那些有追求的数据科学家和机器学习狂热者们,简化学习旅途。这篇指南会让你动手解决机器学习的问题,并从实践中获得真知。我提供的是几个机器学习算法的高水平理解,以及运行这些算法的 R 和 Python 代码。这些应该足以让你亲自试一试了。

6941baebjw1ewidibxxjnj20dr09etay

我特地跳过了这些技术背后的数据,因为一开始你并不需要理解这些。如果你想从数据层面上理解这些算法,你应该去别处找找。但如果你想要在开始一个机器学习项目之前做些准备,你会喜欢这篇文章的。

广义来说,有三种机器学习算法

1、 监督式学习

工作机制:这个算法由一个目标变量或结果变量(或因变量)组成。这些变量由已知的一系列预示变量(自变量)预测而来。利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。监督式学习的例子有:回归、决策树、随机森林、K – 近邻算法、逻辑回归等。

2、非监督式学习

工作机制:在这个算法中,没有任何目标变量或结果变量要预测或估计。这个算法用在不同的组内聚类分析。这种分析方式被广泛地用来细分客户,根据干预的方式分为不同的用户组。非监督式学习的例子有:关联算法和 K – 均值算法。

3、强化学习

工作机制:这个算法训练机器进行决策。它是这样工作的:机器被放在一个能让它通过反复试错来训练自己的环境中。机器从过去的经验中进行学习,并且尝试利用了解最透彻的知识作出精确的商业判断。 强化学习的例子有马尔可夫决策过程。

常见机器学习算法名单

这里是一个常用的机器学习算法名单。这些算法几乎可以用在所有的数据问题上:

  1. 线性回归
  2. 逻辑回归
  3. 决策树
  4. SVM
  5. 朴素贝叶斯
  6. K最近邻算法
  7. K均值算法
  8. 随机森林算法
  9. 降维算法
  10. Gradient Boost 和 Adaboost 算法

Continue reading

23

七步精通Python机器学习

开始。这是最容易令人丧失斗志的两个字。迈出第一步通常最艰难。当可以选择的方向太多时,就更让人两腿发软了。

从哪里开始?

本文旨在通过七个步骤,使用全部免费的线上资料,帮助新人获取最基本的 Python 机器学习知识,直至成为博学的机器学习实践者。这篇概述的主要目的是带领读者接触众多免费的学习资源。这些资源有很多,但哪些是最好的?哪些相互补充?怎样的学习顺序才最好?

我假定本文的读者不是以下任何领域的专家:

▪  机器学习

▪  Python

▪  任何 Python 的机器学习、科学计算、数据分析库

如果你有前两个领域其一或全部的基础知识,可能会很有帮助,但这些也不是必需的。在下面几个步骤中的前几项多花点时间就可以弥补。

Continue reading