Why does python 3 use parentheses?

The print used to be a statement in Python 2, but now it became a function that requires parenthesis in Python 3.

Is there anyway to suppress these parenthesis in Python 3? Maybe by re-defining the print function?

So, instead of

print ("Hello stack over flowers")

I could type:

print "Hello stack over flowers"

Why does python 3 use parentheses?

Yu Hao

117k44 gold badges228 silver badges283 bronze badges

asked Aug 20, 2015 at 15:53

9

Although you need a pair of parentheses to print in Python 3, you no longer need a space after print, because it's a function. So that's only a single extra character.

If you still find typing a single pair of parentheses to be "unnecessarily time-consuming," you can do p = print and save a few characters that way. Because you can bind new references to functions but not to keywords, you can only do this print shortcut in Python 3.

Python 2:

>>> p = print
  File "", line 1
    p = print
            ^
SyntaxError: invalid syntax

Python 3:

>>> p = print
>>> p('hello')
hello

It'll make your code less readable, but you'll save those few characters every time you print something.

answered Aug 20, 2015 at 17:17

Why does python 3 use parentheses?

TigerhawkT3TigerhawkT3

47.5k6 gold badges56 silver badges89 bronze badges

7

Using print without parentheses in Python 3 code is not a good idea. Nor is creating aliases, etc. If that's a deal breaker, use Python 2.

However, print without parentheses might be useful in the interactive shell. It's not really a matter of reducing the number of characters, but rather avoiding the need to press Shift twice every time you want to print something while you're debugging. IPython lets you call functions without using parentheses if you start the line with a slash:

Python 3.6.6 (default, Jun 28 2018, 05:43:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: var = 'Hello world'

In [2]: /print var
Hello world

And if you turn on autocall, you won't even need to type the slash:

In [3]: %autocall
Automatic calling is: Smart

In [4]: print var
------> print(var)
Hello world

answered May 15, 2019 at 18:06

michaumichau

1,99120 silver badges15 bronze badges

1

Use Autohotkey to make a macro. AHK is free and dead simple to install. www.autohotkey.com

You could assign the macro to, say, alt-p:

!p::send print(){Left}

That will make alt-p put out print() and move your cursor to inside the parens.

Or, even better, to directly solve your problem, you define an autoreplace and limit its scope to when the open file has the .py extension:

#IfWinActive .py            ;;; scope limiter
:b*:print ::print(){Left}   ;;; I forget what b* does. The rest should be clear 
#IfWinActive                ;;; remove the scope limitation

This is a guaranteed, painless, transparent solution.

answered Feb 2, 2017 at 18:37

Why does python 3 use parentheses?

No. That will always be a syntax error in Python 3. Consider using 2to3 to translate your code to Python 3

answered Aug 20, 2015 at 15:56

holdenwebholdenweb

29.2k7 gold badges51 silver badges73 bronze badges

4

The AHK script is a great idea. Just for those interested I needed to change it a little bit to work for me:

SetTitleMatchMode,2         ;;; allows for a partial search 
#IfWinActive, .py           ;;; scope limiter to only python files
:b*:print ::print(){Left}   ;;; I forget what b* does
#IfWinActive                ;;; remove the scope limitation

answered Aug 29, 2017 at 1:28

I finally figured out the regex to change these all in old Python2 example scripts. Otherwise use 2to3.py.

Try it out on Regexr.com, doesn't work in NP++(?):

find:     (?<=print)( ')(.*)(')
replace: ('$2')

for variables:

(?<=print)( )(.*)(\n)
('$2')\n

for label and variable:

(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n

answered Dec 24, 2018 at 21:34

alchemyalchemy

8609 silver badges16 bronze badges

2

You can use operator oveloading:

class Print:
    def __lt__(self, thing):
    print(thing)

p = Print()

p < 'hello'   #  ->  hello 

Or if you like use << like in c++ iostreams.

answered Oct 21, 2021 at 15:23

nadapeznadapez

2,3831 gold badge18 silver badges25 bronze badges

You can't, because the only way you could do it without parentheses is having it be a keyword, like in Python 2. You can't manually define a keyword, so no.

answered Aug 20, 2015 at 15:57

In Python 3, print is a function, whereas it used to be a statement in previous versions. As @holdenweb suggested, use 2to3 to translate your code.

answered Aug 20, 2015 at 15:59

I have configured vim to auto-add the parens around my debug def calls when I write the file. I use a simple watcher that auto-runs my updates when the timestamp changes. And I defined CTRL+p to delete them all. The only caveat is that I have to have them alone on a line, which I pretty much always do. I thought about trying to save and restore my previous search-highlight. And I did find a solution on Stack. But it looked a little too deep for now. Now I can finally get back to debugging Ruby-style with a quick p.

function! PyAddParensToDebugs()
  execute "normal! mZ"
  execute "%s/^\\(\\s*\\)\\(p\\|pe\\|pm\\|pp\\|e\\|ppe\\)\\( \\(.*\\)\\)\\{-}$/\\1\\2(\\4)/"
  execute "normal! `Z"
endfunction

autocmd BufWrite *.py silent! call PyAddParensToDebugs()

map  :g/^\\s*\\(p\\\|pe\\\|pm\\\|pp\\\|e\\\|ppe\\)\\( \\\|\(\\)/d

I use these Python defs to do my debug printing.

def e():
    exit()
def pp(obj):
    pprint.PrettyPrinter(indent=4).pprint(obj)
def ppe(obj):
    pprint.PrettyPrinter(indent=4).pprint(obj)
    exit()
def p(obj):
    print(repr(obj))
def pe(obj):
    print(repr(obj))
    exit()
def pm():
    print("xxx")

answered Mar 29 at 19:42

Why does Python use parentheses?

Broadly speaking, the primary use of parentheses in Python is to call an object. That is the reason why standard parentheses are sometimes called the "call operator." Aside from their main use, parentheses are also used to define generator expressions.

How do you print without parentheses in Python 3?

There's no way in Python 3 to print without parentheses. However, you can print with parentheses in Python 2 by adding the line “ from __future__import print_function ” to the top of your code snippet.

What do the brackets mean in Python?

Index brackets ([]) have many uses in Python. First, they are used to define "list literals," allowing you to declare a list and its contents in your program. Index brackets are also used to write expressions that evaluate to a single item within a list, or a single character in a string.

Why do we use square brackets in Python?

The indexing operator (Python uses square brackets to enclose the index) selects a single character from a string. The characters are accessed by their position or index value.