Python:主程序开始时的导入和PEP 8
现在,我觉得在 main 程序的开头导入其中一些(即if __name__ == '__main__'之后)是有道理的.例如,如果主要程序从命令行读取参数,我倾向于在 main 程序的开头进行import sys:这样,sys不必在代码被用作模块,因为在这种情况下,对于命令行参数访问没有必要. . 对PEP 8的侵权有多严重?我应该避免这样做吗?或修改PEP 8? 是合理的 解决方案 我真的不能告诉你这有多糟糕. 但是,我仅在第一次使用时就通过导入某些库来大大提高Web应用程序的性能(响应时间,负载). btw,以下内容也来自PEP 8: ,但最重要的是:知道什么时候 不一致 - 有时风格 指南只是不适用.何时在 怀疑,请使用您的最佳判断.看 在其他示例中决定什么 看起来最好.不要犹豫 问! 其他解决方案 一般而言,我认为可能不需要的模块的后期进口没有太大伤害. 但是sys我肯定会尽早进口.这是一个常见的模块,很可能您可能会在脚本中其他地方使用系
10 2023-05-22
编程技术问答社区
傻瓜式的Python检查零点
在Python中检查零值的惯用方法是什么? if n == 0: 或 if not n: 我认为第一个更多的是明确的精神,但另一方面,空序列或没有类似于第二个示例的序列. 解决方案 如果要检查零,则应使用if n == 0.您的第二个表达式未检查零,它将检查任何评估为false的值. 我认为答案在于您的要求;您是否真的想检查零,还是要处理许多可能是非数字类型的情况? 本着准确回答问题的精神,我认为n == 0是要走的路. 以下是not n路线的问题: >>> def isZero(n): ... return not n; ... >>> >>> isZero([]) True >>> isZero(False) True >>> isZero("") True >>> 大多数人会说这个" iSzero"功能不正确. 其他解决方案 我是的重要支持者,说你的意思.您的两个陈述意味着不同的事情.第一表示: 如果
4 2023-05-22
编程技术问答社区
在pandas中与booleans进行比较时,我必须偏离PEP 8的风格惯例吗?
根据条件更改数据帧列时,我曾经使用过以下内容(在这种情况下,每个女人的工资为200). import pandas as pd df = pd.DataFrame([[False,100],[True,100],[True,100]],columns=['female','wage']) df.loc[df['female'] == True,'wage'] = 200 PEP 8样式会议检查器(在Spyder中)在第3行中推荐: 与true的比较应该是'如果cond是true:'或'如果cond:' 将最后一行更改为 df.loc[df['female'] is True,'wage'] = 200 产生 keyError:'不能使用单个布尔将索引索引到seteTem' 现在将语句评估为单个布尔值,而不是串联. 这是必须偏离样式惯例的情况吗? 解决方案 您应该使用df['female']没有比较,而不是与任何操作员进行比较. d
0 2023-05-18
编程技术问答社区
带有"==真 "和 "是真 "的表达式给出了不同的结果
我有以下 mcve : #!/usr/bin/env python3 import pandas as pd df = pd.DataFrame([True, False, True]) print("Whole DataFrame:") print(df) print("\nFiltered DataFrame:") print(df[df[0] == True]) 输出是以下内容,我期望: Whole DataFrame: 0 0 True 1 False 2 True Filtered DataFrame: 0 0 True 2 True 好吧,但是 pep8> pep8 风格似乎是错误的: e712与true的比较应为if cond is True或if cond .因此,我将其更改为is True而不是== Tru
0 2023-05-17
编程技术问答社区
导入语句应该总是在模块的顶部吗?
pep 8 州: 在任何模块注释和docstrings之后,以及模块Globals and Stonstants. 但是,如果我要导入的类/方法/函数仅在极少数情况下使用,那么在需要时进行导入更有效? 不是这样: class SomeClass(object): def not_often_called(self) from datetime import datetime self.datetime = datetime.now() 比这更有效? from datetime import datetime class SomeClass(object): def not_often_called(self) self.datetime = datetime.now() 解决方案 导入模块非常快,但不是即时.这意味着: 将导入物放在模块的顶部是可以的,因为这是一个仅支付一次的微
0 2023-05-12
编程技术问答社区
python与numpy中的布尔和类型检查
我今天在Python if条款中遇到了意外结果: import numpy if numpy.allclose(6.0, 6.1, rtol=0, atol=0.5): print 'close enough' # works as expected (prints message) if numpy.allclose(6.0, 6.1, rtol=0, atol=0.5) is True: print 'close enough' # does NOT work as expected (prints nothing) 在四处张开后(即这个问题,尤其是我的问题是:为什么Numpy有自己的布尔类型,鉴于这种情况,最佳实践是什么?我可以在上面的示例中逃脱写if foo:以获得预期的行为,但是我喜欢更严格的if foo is True:,因为它将诸如2和[2]之类的内容排除在返回True之外,有时是显式类型检查是可取的. 解决方案 为什么numpy
4 2023-05-01
编程技术问答社区
与布尔值数组的比较 VS PEP8 E712
PEP8 E712要求"与True进行比较为if cond is True:或if cond:". 但是,如果我遵循此PEP8,我会得到不同的/错误的结果.为什么? In [1]: from pylab import * In [2]: a = array([True, True, False]) In [3]: where(a == True) Out[3]: (array([0, 1]),) # correct results with PEP violation In [4]: where(a is True) Out[4]: (array([], dtype=int64),) # wrong results without PEP violation In [5]: where(a) Out[5]: (array([0, 1]),) # correct results without PEP violation, but not as clear as the
8 2023-05-01
编程技术问答社区
Python `if x is not None`还是`if not x is None`?
我一直认为if not x is None版本更加清晰,但是Google的样式指南和 pep pep -8 两者都使用if x is not None.是否有较小的性能差异(我假设没有),并且有没有任何情况真正不适合(使我的大会成为明显的赢家)?* *我指的是任何单身人士,而不仅仅是None. ...比较单人 没有任何.使用是或不使用. 解决方案 没有性能差异,因为它们编译为同一字节: >>> import dis >>> dis.dis("not x is None") 1 0 LOAD_NAME 0 (x) 2 LOAD_CONST 0 (None) 4 COMPARE_OP 9 (is not) 6 RETURN_VALUE >>> dis.dis("x is no
18 2023-04-27
编程技术问答社区
像nb_black这样的代码格式化器,用于google colab
我知道,对于Jupyter Notebooks和Jupyter Lab,有可用的代码Formatter扩展名,例如nb_black或blackcellmagic.但是,当我安装它们时,它似乎在Google Colab上不起作用. 您知道COLAB中是否有任何本机选项或格式化代码的扩展名(PEP8符合PEP8)? 解决方案 我认为Colab中没有直接的扩展名. 不过,您可以做的是下载笔记本,运行 pip install -U nbqa nbqa black notebook.ipynb 然后重新上传您(现已格式化的)笔记本 免责声明:我是 nbqa 的作者 更新:从21.8b0版本开始,black直接在笔记本上运行,无需第三方工具 其他解决方案 我已经尝试了所有事情,截至2022年2月,jupyterlab/笔记本电脑后端方法似乎都起作用.但是,直到后来,这是一个相对简单的解决方法: [仅在启动时运行一次] 连接到您的drive
4 2023-04-27
编程技术问答社区
没有索引和项目的Python for-loop
在Python中,是否有可能拥有一个没有索引和项目的前循环? 我有以下内容: list_1 = [] for i in range(5): list_1.append(3) 上面的代码正常工作,但是根据PEP8编码指南不好. 它说:"未使用的变量'i'". 有没有一种方法可以在没有索引和项目的情况下制作前循环(否时循环)?还是我应该忽略编码准则? 解决方案 您可以用_替换_使其成为"隐形"变量. 参见相关: python中单个下划线" _"可变的目的是什么?. 其他解决方案 @Toine完全正确地使用_,您也可以通过列表理解来完善此内容: list_1 = [3 for _ in range(5)] 这避免了ITM("初始化,而不是修改")抗模式.
18 2023-04-21
编程技术问答社区
我们为什么要有小写字母的命名规则呢?
取决于您的解释,这可能是或不是一个修辞问题,但确实使我感到困惑.这个惯例有什么意义?我了解命名惯例不一定必须背后有押韵或理由,但是为什么要偏离已经流行的骆驼呢? 我是否有某种缺少的押韵和理由? (是的,我已经全部阅读了PEP 8,是的,我确实知道这只是建议,指南等) ) 我想我真正的问题是:我正在写一个python库.实际上,与我的其他项目相对于我的其他项目,它可能是一个相当大的图书馆.我已经尝试尽可能地遵守PEP 8,到目前为止,我什至将lower_case_with_underscores作为PEP 8指示功能和方法名称的指示.但是我必须记住使用骆驼作为twisted,camelcase for logging以及几乎所有其他所有东西都感到困扰. 我应该使用什么命名约定,为什么? 我很关心命名,这可能会让人们惊讶,足以写一个冗长的问题,这也使我感到惊讶.也许在这些事情方面我有一点强迫症.我对此没有太多的"个人观点",就像我倾向于最多使用的任何东西一样,在这种情况下,这是
4 2023-04-20
编程技术问答社区
Python类引用的命名规则是什么?
变量引用python中的班级的命名约定是什么? class MyClass(object): pass # which one is correct? reference_to_class = MyClass # or ReferenceToClass = MyClass 这是一个类似于我的情况的示例: # cars.py class Car(object): pass class Sedan(Car): pass class Coupe(Car): pass class StatonWagon(Car): pass class Van(Car): pass def get_car_class(slug, config): return config.get(slug) # config.py CONFIG = { 'ford-mustang': Coupe, 'buick-rivie
4 2023-04-20
编程技术问答社区
我应该在Python中使用 "骆驼字母 "还是下划线?
那么哪个更好,为什么? def my_function(): 或 def myFunction(): 解决方案 有关与Python风格指南有关的所有内容:我建议您阅读 pep8 . 回答您的问题: 函数名称应该是小写的,单词分开 根据需要提高可读性的必要条件. 其他解决方案 PEP 8建议首先使用可读性.您可以找到它在这里P> 函数名称应该是小写的,单词分开 根据需要提高可读性的必要条件. 其他解决方案 函数名称应该是小写的,单词分开 根据需要提高可读性的必要条件.允许混合箱 仅在已经是普遍样式的上下文中 查看它已经得到回答,单击此处
2 2023-04-20
编程技术问答社区
在Python中,Eclipse中的regex字符串的pep8警告
为什么PEP8在代码中的下一个字符串上抱怨? import re re.compile("\d{3}") 我收到的警告: ID:W1401 Anomalous backslash in string: '\d'. String constant might be missing an r prefix. 您能解释一下消息的含义是什么?我需要更改代码,以便传递警告 w1401 ? 代码通过测试并按预期运行.此外,\d{3}是有效的正则. 解决方案 "\d"与"\\d"相同,因为d没有逃生序列.但是对于代码的读者来说,尚不清楚. 但是,考虑\t. "\t"代表tab chracter,而r"\t"表示字面\和t字符. 当您表示字面\和d时,请使用原始字符串: re.compile(r"\d{3}") 或明确逃脱后斜线: re.compile("\\d{3}") 其他解决方案 python无法解析'\d'作为逃生序列,这就是
14 2023-04-19
编程技术问答社区
内部函数(Python)的文档说明有必要吗?
在python中,我们在开始时指定内部功能/私人甲糖.这些功能是否应该记录在DOCSTRINGS上(是否需要?)? (我的意思是正式文档,不是帮助代码阅读器理解代码的人)什么是常见的做法? 解决方案 lo,我摘自 pep 8 ,其明智的话应该是被认为是法律.关于这个话题,Pep 8说: 为所有公共模块,功能,类和 方法.对于非公共方法不是必需的docstrings,但是您 应该有一个描述该方法的评论.这个评论 应在" def"行之后出现.
8 2023-04-18
编程技术问答社区
PEP8的多行值的多行口令
我将黑色用于python,符合pep8 .它从两行长值字符串的第二行中删除了凹痕: mydict = { 'key0': 'value0', 'key1': 'long-two-lines-string-value1-does-not-fit-in-one-line-has-to-continue' 'value1' } to: mydict = { 'key0': 'value0', 'key1': 'long-two-lines-string-value1-does-not-fit-in-one-line-has-to-continue' 'value1', } 一位同事质疑这一变化,我想知道是否有任何资源/参考可以用来备份Black的决定,以格式化代码,例如? 找不到黑色代码样式. Demo 相关,但没有回答我的问题:在python中格式化多行的正确方法是什么? ps:# f
12 2023-04-14
编程技术问答社区
Python:使用4个空格进行缩进。为什么?
编码python时,我只使用2个空间来缩进,确保 pep-8> pep-8> 真的建议有4个空间,但从历史上看,这是不寻常的. 那么,有人可以说服我使用4个空间而不是2个空间吗?什么优点和缺点? P.S.最后,将所有现有代码库从2个空间转换为4个空间的简便方法是什么? P.P.S. PEP-8还建议不要使用标签进行凹痕. 在这里阅读 p> so,总结: 专利: 在包裹弦长80行时有更多的安排空间. 可以从摘要中复制代码,并且它只是有效的. cons: 使用更深层次的嵌套语句,您的实际代码空间较小. 谢谢. 解决方案 其他所有人都使用4个空间.这是使用我遇到并接受的4个空间的唯一原因.在我的心中,我仍然想使用标签(每个缩进的1个凹痕字符,是有道理的,没有与其他空格分开的.没有句法的差异.最糟糕的情况是,某些评论没有排队.恐怖!)但是我已经接受了,自从Python社区整体上使用4个空间以来,我使用了4个空间.这样,我可以从其他人写的
18 2023-03-31
编程技术问答社区
将三元运算符分割成多行的推荐布局是什么?
要提高代码可读性,我需要将三元运算符的表达式分为多行.我唯一的想法是这样: very_long_function_name( ... very_long_expression_if_the_condition_is_true if the_condition else another_expression_if_the_condition_is_false) 不幸的是,pycharm声称continuation line over-indented for visual indent违反了 pep8> pep8 .当我将操作员用牙套包裹时,Pycharm不会引起任何反对,但是恕我直言,代码不太可读. 是否有任何[半]正式建议将三元操作员分为多行? 辅助函数/方法的声明不是选项. 解决方案 代码格式通常是一个意见问题,因此我认为自以为是且自动化的代码格式是解决方案 - 安装并运行 black 并停止谈论它.
12 2023-03-27
编程技术问答社区
在Python注释中,'# noqa'是什么意思?
在搜索python项目时,我发现了几行评论# noqa. import sys sys.path.append(r'C:\dev') import some_module # noqa noqa在Python中是什么意思?它仅针对Python吗? 解决方案 将# noqa添加到一行中,指示Linter(自动检查代码质量的程序)不应检查此行.任何警告代码可能生成的警告将被忽略. 该行可能对林格有一些"看起来不好"的东西,但是开发人员由于某种原因理解并打算在那里. 有关更多信息,请参见 flake8文档用于选择和忽略违规. 其他解决方案 noqa = no-qa(无质量保证) 通常在python代码中用于忽略 pep8> pep8 warnings. 最终带有#noqa的线条将被林格程序忽略,不会提出任何警告. 其他解决方案 你知道吗?甚至Guido van Rossum(Python的创建者)在:d abit eTemology
52 2023-03-22
编程技术问答社区
Matplotlib.在其他进口与PEP8冲突之前需要使用.忽略还是修复?
我有一个python脚本,以这样的启动: #!/usr/bin/env python import matplotlib matplotlib.use("Agg") from matplotlib.dates import strpdate2num import numpy as np import pylab as pl from cmath import rect, phase 它像魅力一样工作,但我的编辑抱怨:E402 module level import not at top of file [pep8]. 如果我将matplotlib.use("Agg")向下移动,则脚本将不起作用. 我应该忽略错误吗?还是可以解决此问题? 我知道pep8说这只是一个建议,可能会忽略,但是我希望有一种不违反PEP8指南的初始化模块的好方法,因为我认为我无法做出我的编辑忽略了每个文件的规则. (我正在用linter-pylama使用原子.) 解决方案
10 2023-03-21
编程技术问答社区