我四处寻找,但我没有找到这个问题的答案。
是否有任何美学,pythonic方法在任意范围内创建临时变量,所以我相信他们不会出现在这个范围之外?
例如,在OCaml中,我可以写:
let x = 3 and y = 5 in z = x + y
我喜欢在Python中做这样的事情。例如,让我们设想我创建一个具有许多有用功能的模块talker.py
,并且每个模块都使用一个我不想一次又一次复制的变量。
# talker.py
sentance = ( 'Has provinciae has dictione emergunt sorte aptae'
'iuris navigerum nusquam iuris in natura sorte aptae visitur'
'in verum dictione flumen.' )
def talk() :
print sentance
def talk_loudly() :
print sentance.upper()
def any_other_useful_function :
# do stuff using sentance
然后我想在另一个文件中使用所有这些精彩的功能,但是:
sentance
:这个变量完成了它的工作,现在我希望它落入黑暗中并被遗忘但如果我将此模块称为import talk
或from talk import *
,则第二个条件不会得到尊重。
这是我可以使用"临时变量"的特殊范围的例子,即使它不是我希望我在范围内的唯一情况。
我考虑过使用with ... :
语句,但我对结果并不满意。
欢迎任何想法,但我正在寻找最美观和最不罗嗦的方式来继续。
答案 0 :(得分:2)
您可以在模块上定义__all__
名称,以控制使用from talk import *
时可用的名称。
答案 1 :(得分:1)
首先,sentance
不是暂时的。这些功能依赖于它的存在。你可以del sentance
它会消失,但函数会抛出错误。
常见的Python约定是在名称前加下划线。这表示变量受到保护'。它没有做任何事情,但程序员知道他们可能不应该从模块(或类)之外访问它。