pythonic可以定义为:充分体现python自身特色的代码风格。
在语法上,举个常见的例子,在其他语言(如C)中,两个变量的交换:
int a = 1, b = 2;
int tmp = a; a = b; b = tmp;
利用python的packaging/unpackaging机制,pythonic的代码就需一行:
a, b = b, a
另外,遍历一个容器时,类似其他编程语言的代码如下:
length = len(alist)
i = 0
while i < length
do_sth_with(alist[i])
i+=1
而pythonic的代码如下
for i in alist
do_sth_with(i)
故pythonic的一个药酒就是对python语法本身的充分发挥,写出来的代码带着python味儿。
编写python代码时,应该充分利用python的语法,但不应过分的使用奇技淫巧,比如利用python的slice语法,可以写出如下代码
a = [1,2,3,4]
b = 'asdfghjkl'
print a[::-1]
print b[::-1]
对于这样一段代码恐怕不是一眼就可以看出其作用,实际上更好的体现pythonic的代码是充分利用python库里的reversed()函数:
print list(reversed(a))
print list(reversed(b))
写pythonic的代码需要对标准库有充分的理解,特别是内置函数和内置数据类型。
比如对字符串初始化:print 'hello %s!' % ('Tom', )
%s是非常影响可读性的,因为数量多了以后,很难清除哪一个占位符对应哪一个实参
对应的pythonic的代码应该是这样的
print 'Hello %(name)s!' % {'name' : 'Tom'}
针对 value = {'greet': 'Hello world', ''language': 'python'}
print ='%(greet)s from %(language)s.' % value
更pythonic的代码如下:
print ‘{greet} from {language}.' .format(greet = 'Hello world', language: 'python')
str.format()方法非常清晰地表明了语句的意图,事实上,str.format()也成为python最为推荐的字符串格式化方法。