我想知道Python中这些有什么区别?
self._var1
self._var1_
self.__var1
self.__var1__
Run Code Online (Sandbox Code Playgroud) 有什么区别__method__,method和_method__?
是否有任何或一些随机的原因人们认为__doc__应该是正确的,而不是doc.是什么让一种方法比另一种更特别?
可能重复:
如何在for循环中声明未使用的变量?
在Python中,命名一个不会被使用的变量的最佳实践是什么?这是一个奇怪的问题,但对于我的具体情况,我有一个(键,值)元组,我只对值感兴趣.我的用例的基本演示:
some_stuff = [("key", "value"), ("key2", "value")]
for _, value in some_stuff:
pass # TODO: do something really important with value
Run Code Online (Sandbox Code Playgroud)
我在Eclipse中注意到,命名变量_或带_前缀(例如_k)将不会显示未使用的变量警告,并且删除_前缀会导致警告被引发,但这可能只是一个奇怪的/"功能"在Eclipse中而不是Python最佳实践..
这可能是一个蹩脚的问题,但无论如何.在RStudio中,我只是注意到键入一个数字,......和另一个数字会将字符的语法高亮显示从海军蓝变为淡蓝色以及...之后的数字.
例如,这是一个具有这种独特颜色的数字:
4..4
Run Code Online (Sandbox Code Playgroud)
部分"..4"具有浅蓝色.
我使用默认语法着色.我尝试在解释器中引入这样的常量但我只得到错误"错误:"4..5"中的意外数字常量,并且带有"两个点"或...的查询似乎不是非常友好的谷歌.
有谁知道".."的用法是什么,如果有的话?
这个问题建立在这一个刚才问也是这一个,但是解决了更微妙的一点,具体而言,"内部类"什么罪名?
这是我的情况.我正在构建一个用于操作MS Office文件的Python库,其中许多类不是要在外部构造的,但是他们的许多方法都是API的重要部分.例如:
class _Slide(object):
def add_shape(self):
...
Run Code Online (Sandbox Code Playgroud)
_Slide不要在外部构建,作为库的最终用户,您可以通过调用获得新的幻灯片Presentation.add_slide().但是,一旦你有幻灯片,你肯定希望能够打电话add_shape().所以该方法是API的一部分,但构造函数不是.这种情况在库中出现了几十次,因为只有Presentation类有一个外部/ API构造函数.
PEP8在这一点上含糊不清,引用了"内部类"而没有详细说明什么算作内部类.在这种情况下,我想可以说这个课程是"部分内部的".
问题是我只有两个符号来区分至少三种不同的情况:
我注意到,从通信角度来看,外部API(库最终用户受众)的清晰表达与内部API(开发人员受众)之间存在冲突.对于最终用户,呼叫_Slide()是verboten/at-own-risk.然而,它是内部API的一个快乐成员,并且_random_helper_method()应该只从内部调用_Slide().
你对这个问题有什么看法可能对我有帮助吗?惯例是否规定我在类名上使用我的"单引导下划线"弹药来争取最终用户API的清晰度,或者我是否能够保留它以便与我和其他开发人员沟通关于何时真正使用类API私有而不被使用,例如,它所在的模块之外的对象,因为它是一个可能会改变的实现细节?
更新:经过几年的进一步反思,我已经确定了在命名类时使用前导下划线的约定,这些类不是作为模块(文件)之外的类访问的.这种访问通常用于实例化该类的对象或访问类方法等.
这为模块的用户(当然通常是你自己:)提供了基本的指示:"如果导入语句中出现带有前导下划线的类名,那你就做错了." (单元测试模块是此规则的一个例外,此类导入可能经常出现在"内部"类的单元测试中.)
请注意,这是对类的访问.在模块外部访问该类(类型)的对象,可能由工厂或其他任何人提供,这是非常好的,也许是预期的.我认为将类与从它们创建的对象区分开来的失败导致了我最初的困惑.
该约定还具有在进行from module import *声明时不包括这些类的附带好处.虽然我从不在自己的代码中使用这些并建议避免使用它们,但这是一种合适的行为,因为这些类标识符并不是模块接口的一部分.
经过多年的试验,这是我个人的"最佳实践",当然不是"正确"的方式.你的旅费可能会改变.
我们知道在类中,使用以下函数时__function__不会导入:
from module import *
Run Code Online (Sandbox Code Playgroud)
有人问什么是_variable?我从来没有一个.
它们存在吗?这是一个变量的概念,无法使用类对象或其他东西访问?
我已经在Codeacademy.com上开始了13天的网络编程,并且发现它是一个学习的好地方.但我有时还会误解事情.我总是在w3school.com上查看它们,但这次我找不到我需要的信息.因此,据我所知,首先有两种类型的创建对象:对象文字符号和第二种:对象构造函数.我已经了解到还有方法和函数,但我无法理解如何用对象文字表示法创建方法?在对象构造函数中,我只写:`
var bob = new Object();
bob.age = 30;
bob.setAge = function (newAge)
{
bob.age = newAge;
};
Run Code Online (Sandbox Code Playgroud)
在编写对象文字表示法时,能否告诉我如何做同样的事情.
var bob = {
age: 30
};
Run Code Online (Sandbox Code Playgroud) 它的惯例是什么?
class IndexedText(object):
def __init__(self, stemmer, text):
self._text = text
self._stemmer = stemmer
self._index = nltk.Index((self._stem(word), i) for (i, word) in enumerate(text))
Run Code Online (Sandbox Code Playgroud) 在Python中,存在单个前导下划线,双前导下划线,双前导+双尾下划线和单尾随下划线的约定.其中许多内容在对象名称之前的单个和双下划线的含义中是什么?.
但单一领先+单尾跟下划线的意义或惯例是什么?我第一次看到他们在enum模块中的使用:
8.13.15.3.2.支持的
_sunder_名称
_name_- 会员姓名_value_- 会员价值; 可以在新的设置/修改_missing_- 未找到值时使用的查找函数; 可能会被覆盖_ignore_- 作为list()或str()的名称列表,不会转换为成员,并将从最终类中删除_order_- 在Python 2/3代码中使用以确保成员顺序一致(类属性,在类创建期间删除)_generate_next_value_- 由Functional API和auto用于获取枚举成员的适当值; 可能会被覆盖
我还没有见过这样的单龙头单结尾下划线破甲之前的名字.它们是以任何特殊方式处理,还是具有与任何其他与下划线相关的命名约定不同的隐含含义?它们与没有下划线有何不同?
我argparse用来解析命令行参数.在浏览文档时,argparse我只能看到使用不同程序名称的规定.
我希望能够使用默认程序名称而无需导入sys.argparse根据我的意见,没有任何内容会返回程序名称.
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args()
print(dir(args))
Run Code Online (Sandbox Code Playgroud)
这是输出:
['__class__', '__contains__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_args', '_get_kwargs']
有没有其他方法可以检索程序名称而无需导入sys模块?