Python黑帽编程2.1 Python编程哲学

本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言。我带大家膜拜下Python作者的Python之禅,然后再来了解下Python的编程规范。

2.1.1 ZEND OF PYTHON

在Kali中启动终端,输入Python,进入交互模式。

图2

输入命令

import this

“一首诗”呈现在我们眼前。

图3

内容如下:

Beautiful is better than ugly.

优美胜于丑陋

Explicit is better than implicit.

明了胜于晦涩

Simple is better than complex.

简单胜过复杂

Complex is better than complicated.

复杂胜过凌乱

Flat is better than nested.

扁平胜于嵌套

Sparse is better than dense.

间隔胜于紧凑

Readability counts.

可读性很重要

Special cases aren't special enough to break the rules.

即使假借特例的实用性之名,也不违背这些规则

Although practicality beats purity.

虽然实用性次于纯度

Errors should never pass silently.

错误不应该被无声的忽略

Unless explicitly silenced.

除非明确的沉默       

In the face of ambiguity, refuse the temptation to guess.

当存在多种可能时,不要尝试去猜测

There should be one-- and preferably only one --obvious way to do it.

应该有一个,最好只有一个,明显能做到这一点

Although that way may not be obvious at first unless you're Dutch.

虽然这种 方式可能不容易,除非你是python之父

Now is better than never.

现在做总比不做好

Although never is often better than *right* now.

虽然过去从未比现在好

If the implementation is hard to explain, it's a bad idea.

如果这个实现不容易解释,那么它肯定是坏主意

If the implementation is easy to explain, it may be a good idea.

如果这个实现容易解释,那么它很可能是个好主意

Namespaces are one honking great idea -- let's do more of those!

命名空间是一种绝妙的理念,应当多加利用

关于这段圣经般的描述,我这里也不做过多解释了,随着编程经验的丰富,理解也会越来越深刻。此刻,你只需默默的读一遍,然后放到自己的收藏夹里。

2.1.2 编码规范

下面的内容很重要,建议初学者当做金科玉律来遵守。

对于初学者,我必须要强调的是,Python没有C语言那样的大括号,可以表示代码块和代码之间的层级关系,也没有VB那样的begin…end,它是靠缩进来表示这些的。对于用惯了大括号的的程序员来说,多少会有些不适应,因为有大括号的情况下,我们可以随意调整缩进,让代码按照我们的审美来排列,但是在Python里就不能这么做了。看下面一个简短的示例:

stringStest = 'abcdefghijk'

for char in stringStest[1:]:

if char !='c':

print 'not c'

这段代码很简单,首先声明了一个字符串变量stringStest,然后遍历字符串中的中的字符,判断是不是字母“c”,如果不是打印“not c”。运行之后,会看到如下错误:

图4

简单的分析下,for循环和变量声明处于同级,二者目前作为测试代码的顶级,不需要缩进。if条件判断是for的子集,应该有4个空格的缩进,print语句是if的子集,应该和if参照再有4个空格的缩进。修改完毕的代码如下:

图5

运行结果如图6.

图6

下面我把PEP8的Python编码规范转引过来,翻译不是我的原创,来自于http://damnever.github.io/2015/04/24/PEP8-style-guide-for-python-code/

原文发布于微信公众号 - 玄魂工作室(xuanhun521)

原文发表时间:2016-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

HashMap与Hashtable的区别是面试中经常遇到的一个问题。

HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如果深究进去,也能了解到不少知识。本文对两者从来源,特性,算法等多个方面...

36730
来自专栏landv

C语言介绍

65720
来自专栏C语言及其他语言

第一个 C 语言编译器是怎样编写的?

作者: 伯乐在线 - Chaobs 网址: http://blog.jobbole.com/94311/ 首先向C语言之父Dennis Ritchie致敬! ...

52590
来自专栏数说工作室

2. PRXPARSE () | 正则表达式的“阿赖耶识”

阿赖耶识...为宇宙万有之本,含藏万有,使之存而不失,故称藏识。又因其能含藏生长万有之种子,故亦称种子识。 ——《佛光大辞典》 佛家说人有九识,除眼、耳、鼻、...

37360
来自专栏工科狗和生物喵

对菜鸟教程的Python一百例的个别改进

好吧,其实是小妹子Python公选课结课,所以我来帮忙做个大作业(简单到哭的大作业好吗?)!她的大作业就是老师把菜鸟教程的Python一百例扒下来做成文档,然后...

47460
来自专栏zaking's

js算法初窥04(算法模式01-递归)

15820
来自专栏令仔很忙

C#----委托和事件(一)

最近在做的项目,正在进行重构,之前的框架就是纯三层的简单调用,外加一些Session,SQLHelper等封装管理类,其他的东西,一直也想去抽象,但是奈何能力...

87710
来自专栏王亚昌的专栏

C++多线程编程学习二 [类中封装互斥量的设计]

      之前我也提到过,如果一个类的数据成员中在多线程环境中可能会被竞争使用时,一定要在类中解决这个问题,而不是在代码编写过程中在每次使用时去申请或释放,这...

9710
来自专栏工科狗和生物喵

【计算机本科补全计划】C++牛客网试题习题解析

正文之前 一大早醒来,外面淅淅沥沥的雨绵绵的下着,床铺真的舒服,但是我也不能就在床上刷微博看小说吧,所以想起了昨晚下载的牛客网的APP,赶紧掏出我的大宝贝---...

41070
来自专栏程序员的SOD蜜

JavaScript的“原型甘露”

今天跟朋友讨论JS的面向对象编程问题,想起了原来曾经看过一篇文章,但是看过很久想不起来了,用了很多关键词,终于用“悟透JavaScript  面向对象”这两个关...

28180

扫码关注云+社区

领取腾讯云代金券