2016-02-08 122 views
0

我想有一個別名來打印語句。下面的方法將失敗,SyntaxError將變量設置爲「打印」python 2

>>> a = print 

我如何,如果在所有設置打印語句一個新的別名? Python版本 - > 2.7

+1

你真的不應該這樣做。只需定義你的特殊'my_print()'函數並使用它來代替'print'。原因之一是很多其他代碼使用'print',例如顯示錯誤信息,並且您可能無法看到這些錯誤。 – taleinat

+0

你可以做到這一點,但首先你必須在你的模塊中導入'print_function'。 –

回答

3

通常情況下,你不能影子蟒蛇關鍵字(這是用來使Python 「聲明」,如printforexecif,...)。但是,print是特別的。爲了緩和與python3.x的兼容性,可以使用

from __future__ import print_function 

在模塊的頂部跌落打印語句(在任何其他進口其他非__future__進口)。

這將禁用print語句並取消對print function(然後您可以再次使用您想要的任何用戶定義的函數進行遮蔽)。例如(來自REPL):

Python 2.7.10 (default, Oct 23 2015, 18:05:06) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from __future__ import print_function 
>>> def foo(): pass 
... 
>>> print = foo 
>>> 
>>> print('foo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: foo() takes no arguments (1 given) 

雖這麼說,我認爲走樣內建函數通常是一個壞主意。未來的代碼讀者(包括您自己)在嘗試使用此代碼時可能會感到困惑,並且他們不會做他們有條件相信的事情。記住蟒(import this)禪:

...

可讀性計數。

...

+0

很好的答案!我還會添加一個[手冊鏈接](https://docs.python.org/2/library/functions.html?highlight=print#print) – alfasin

+0

@alfasin - 已添加。我還詳細闡述了這裏實際發生的事情,儘管我不確定這是否有必要(並且我希望不會因爲細節而對實際答案模糊不清 - 思考?) – mgilson