你最unpythonic的代码片段

sch*_*ckb 4 python

我是一名经验丰富的python开发人员,仍然会自己编写正确但非语音的代码.我认为看到人们编写的python代码的小例子在某种程度上与普遍优先的做事方式发生冲突可能具有启发性和娱乐性.

我对您实际编写的代码感兴趣而不是发明示例.这是我的一个:在代码中期望一个可能为空的序列或我没有的序列

if data is not None and len(data) > 0:
Run Code Online (Sandbox Code Playgroud)

我后来把它减少到了

if data:
Run Code Online (Sandbox Code Playgroud)

更简单的版本允许额外的真值,如True或10,但这没关系,因为调用者犯了一个错误,并将从if中的语句中获得异常.

小智 7

我发现手动类型检查最"unpythonic"(虽然通常也很糟糕).有两种常见的情况被滥用.第一种是当函数的逻辑根据参数的类型而不同时.例如:

def doStuff (myVar):
    if isinstance (myVar, str):
        # do stuff
        pass
    elif isinstance (myVar, int):
        # do other stuff
        pass
Run Code Online (Sandbox Code Playgroud)

第二个是当程序员尝试创建一个强类型函数,就像你期望在静态类型语言中找到的一样.

def doStuff (myVar):
    if not isinstance (myVar, int):
        raise TypeError ('myVar must be of type int')
Run Code Online (Sandbox Code Playgroud)


Fed*_*oni 5

一些可以从类C语言继承的非语言习惯:

1)不必要的分号:

printf "Hello world";
Run Code Online (Sandbox Code Playgroud)

2)不必要的指数:

# Bad
for i in range(len(myList)):
    print myList[i]

# Good
for item in myList:
    print item
Run Code Online (Sandbox Code Playgroud)


小智 1

多年来我一直在做大量的Python工作,与更“Pythonic”的例子相比,我更喜欢更冗长的第一个例子。

也许这不是党派路线,但它的意图更加清晰,并且对于其他可能知道也可能不知道 python 所有小秘密的开发人员来说更有意义。

ymmv

  • 更详细的形式是完全没有必要的,而且实际上计算速度较慢,因为它需要更多的运算符。 (2认同)
  • 在除了最紧密的循环之外的所有循环中,这是完全无关的。 (2认同)