Python 3 print without parenthesis

前端 未结 8 1672
一整个雨季
一整个雨季 2020-11-30 01:27

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 par

相关标签:
8条回答
  • 2020-11-30 01:56

    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
    
    0 讨论(0)
  • 2020-11-30 02:00

    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 "<stdin>", 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.

    0 讨论(0)
  • 2020-11-30 02:00

    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
    
    0 讨论(0)
  • 2020-11-30 02:04

    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.

    0 讨论(0)
  • 2020-11-30 02:05

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

    0 讨论(0)
  • 2020-11-30 02:09

    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
    
    0 讨论(0)
提交回复
热议问题