pycharm 2016的远程调试方法

PyCharm很好用。目前版本是2016版。

不过,我们日常很多时候是在本地开发然后部署到服务器上,这样中间涉及到了:

  • 操作系统更改
  • 工作目录变更
  • 相对路径变更
  • 依赖库变更

就像我,经常需要在windows下开发然后再centos上部署。每次都需要重新跑一次单元测试,还经常发现问题。

用同环境的测试服务器上开发,然后部署的时候,会简单很多。

这就是涉及到了PyCharm远程调试。

继续阅读···

无头浏览器phantomjs

所谓的无头浏览器(headless)就是指不带界面,完全可以命令行or脚本控制的浏览器。

phantomjs 就是比较流行的无头浏览器。

  • 基于webkit
  • 可以解析流行网页内的js脚本。
  • 可以把网页后台渲染成图片
  • 可以通过脚本扩展功能,这点在采集/自动化测试内很有用。

缺点也有,和普通的基于页面分析的采集来比较,这个phantomjs重了很多。

官网:http://phantomjs.org/

使用教程:http://phantomjs.org/documentation/

例子:http://phantomjs.org/examples/

继续阅读···

Hexo新建文章增添默认categories属性

一般来说,hexo增添文章使用如下命令:

1
$hexo new "文章名称"

生成的文件大概是这样的德行:

1
2
3
4
5
---
title: 文章名称
date: 2016-12-01 10:29:42
tags:
---

不过,实际上的blog一般都会设置不少分类,也就是categories 。 用默认的方法后,每次必须手动补足一下:

1
2
3
4
5
6
---
title: 文章名称
date: 2016-12-01 10:29:42
tags:
categories: [xxxx]
---

这个实际上是可以通过修改:myblog\scaffolds\post.md 来实现。

诸如,修改成这个德行:

1
2
3
4
5
6
---
title: {{ title }}
date: {{ date }}
tags:
categories: [分享]
---

那么,每次你hexo new "article"的时候,categories就会自动添加进来了。

找打的网站--帮你百度一下

这是个比较搞笑的网站,相当找打。

设想个应用场景:

A:今年春节放假是怎么放啊?

B:等等,我给你说

……(2分钟后)

看看那傲娇的旁白提示,倘若你真发给妹子作为回答,活该孤独一生~~~

链接补充一下:帮你百度一下

Python 奇技淫巧

  • 数组降维

    1
    2
    3
    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    [k for i in matrix for k in i]
    >>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 矩阵行列互转

    1
    2
    3
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    re_a = list(zip(*a))
    >>> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
  • 字典的键、值互换

    1
    2
    3
    4
    5
    6
    a = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    def reverse_dict(a):
    k = a.keys()
    v = a.values()
    new_dict = dict(zip(v, k))
    return new_dict
  • 合并一个list的相邻项

    1
    2
    3
    a = [1, 2, 3, 4, 5, 6]
    list(zip( a[::2], a[1::2] ))
    >>> [(1, 2), (3, 4), (5, 6)]
  • 反转字符串

    1
    2
    3
    a = 'python'
    a[::-1]
    >>> 'nohtyp'
  • 统计list中1的个数

1
2
3
a = [0, 1, 0, 0, 1, 0, 1, 0]
[i[0] for i in enumerate(a) if i[1] != 0]
>>>[1, 4, 6]

Sublime Text的多行列操作

Sublime Text是个非常好用的文本编辑器。操作如丝般顺滑,功能强大,速度飞快。

这里是Sublime Text的一个简单操作。适用Sublime Text2/3

如题:

1
2
3
4
5
6
7
8
9
10
{ img="xpk(main:image/face/f000.png)", code="呲牙" };
{ img="xpk(main:image/face/f001.png)", code="调皮" };
{ img="xpk(main:image/face/f002.png)", code="流汗" };
{ img="xpk(main:image/face/f003.png)", code="偷笑" };
{ img="xpk(main:image/face/f004.png)", code="再见" };
{ img="xpk(main:image/face/f005.png)", code="敲打" };
{ img="xpk(main:image/face/f006.png)", code="擦汗" };
{ img="xpk(main:image/face/f007.png)", code="猪头" };
{ img="xpk(main:image/face/f008.png)", code="玫瑰" };
{ img="xpk(main:image/face/f009.png)", code="流泪" };

这么一段代码,我想保留一个基本的对应表,形如:f008–玫瑰 。

Sublime可以优雅的解决这个。

  1. Ctrl+A 全选

  2. Ctrl+Shift+L 多行操作

  3. 左右移动,和操作一行一样的同时操作多行。当然,记得活用home end按钮。

Python的组合生成器

在python中,迭代器工具集合里面有一个比较好用的排列组合命令集合。

  • product 笛卡尔积
  • permutations 排列
  • combinations 组合,没有重复
  • combinations_with_replacement 组合,有重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> import itertools
>>> for i in itertools.product('ABCD', repeat = 2):
... print i,
...
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'C') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C') ('D', 'D')
>>> for i in itertools.permutations('ABCD', 2):
... print i,
...
('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C')
>>> for i in itertools.combinations('ABCD', 2):
... print i,
...
('A', 'B') ('A', 'C') ('A', 'D') ('B', 'C') ('B', 'D') ('C', 'D')
>>> for i in itertools.combinations_with_replacement('ABCD', 2):
... print i,
...
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'C') ('C', 'D') ('D', 'D')