在Python

时间:2016-05-20 15:22:41

标签: python python-2.7

我四处寻找,但我没有找到这个问题的答案。

是否有任何美学,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 talkfrom talk import *,则第二个条件不会得到尊重。

这是我可以使用"临时变量"的特殊范围的例子,即使它不是我希望我在范围内的唯一情况。

我考虑过使用with ... :语句,但我对结果并不满意。

欢迎任何想法,但我正在寻找最美观和最不罗嗦的方式来继续。

2 个答案:

答案 0 :(得分:2)

您可以在模块上定义__all__名称,以控制使用from talk import *时可用的名称。

Documented here

答案 1 :(得分:1)

首先,sentance不是暂时的。这些功能依赖于它的存在。你可以del sentance它会消失,但函数会抛出错误。

常见的Python约定是在名称前加下划线。这表示变量受到保护'。它没有做任何事情,但程序员知道他们可能不应该从模块(或类)之外访问它。