Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed4a.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.002 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'python.': 0.02; 'syntax': 0.04; 'run-time': 0.05; "subject:' ": 0.07; 'function:': 0.09; 'subject:string': 0.09; 'cc:addr:python-list': 0.11; 'python': 0.11; 'def': 0.12; 'ah!': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'literals': 0.16; 'literals,': 0.16; 'literals.': 0.16; 'matters,': 0.16; 'notation': 0.16; 'notations': 0.16; "skip:' 60": 0.16; 'sorts': 0.16; 'such,': 0.16; 'wrote:': 0.18; '>>>': 0.22; 'cc:addr:python.org': 0.22; 'convenient': 0.24; 'integer': 0.24; 'cc:2**0': 0.24; 'header:In- Reply-To:1': 0.27; 'point': 0.28; 'function': 0.29; 'chris': 0.29; 'am,': 0.29; 'message-id:@mail.gmail.com': 0.30; '(unless': 0.31; 'though.': 0.31; 'subject:with': 0.35; "can't": 0.35; 'definition': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'seconds': 0.37; 'skip:- 10': 0.38; 'does': 0.39; 'even': 0.60; 'negative': 0.60; 'skip:a 30': 0.61; 'numbers': 0.61; 'you.': 0.62; 'between': 0.67; 'mar': 0.68; '5:15': 0.84; 'bare': 0.84; 'proves': 0.84; 'absolutely': 0.87; 'to:none': 0.92; 'outcome': 0.93 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:cc :content-type; bh=r0cgfml7aMM/0ahFfPUZez/Px2TSBTebttyExJ13s3E=; b=KniTlMzgqZYFtDfm+8nFxhD8mGeuLanWwzzBBMgCMvmOFrgS6ZpLN59O6LeO2uGLWG +SEBhxaKfvFIGp58DF9cpDBSvD+a+Bepft/gozyPNRM2YS2tre+0ZLDkGB/vqIcuv+wQ LTj0tu4rbGhSAEAonPv1U3MSRYiRUAbKIgwMW12TFHRMy/84WCWhF4PHUS6i/m54w79n oN3yWnRtZu8PYRB9KzXr9MuU3F3b353WSb7CflgGt2zTyXPf6hOAh3m2+HWLJlX71szQ JVhlNfnHD3LJ2viNnrIsbp2pdtywVbIiAjGMFeZ1x3i2dGBG3j+X/1bFEaQzgz7wXi9j cYbA== MIME-Version: 1.0 X-Received: by 10.66.102.39 with SMTP id fl7mr27007299pab.43.1395084738337; Mon, 17 Mar 2014 12:32:18 -0700 (PDT) In-Reply-To: <87siqgr5p1.fsf@elektro.pacujo.net> References: <8c862bec-815e-424c-81e2-8f37ebab1c35@googlegroups.com> <87y508r8ro.fsf@elektro.pacujo.net> <87siqgr5p1.fsf@elektro.pacujo.net> Date: Tue, 18 Mar 2014 06:32:18 +1100 Subject: Re: 'complex' function with string argument. From: Chris Angelico Cc: "python-list@python.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 45 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1395084747 news.xs4all.nl 2874 [2001:888:2000:d::a6]:53377 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:68456 On Tue, Mar 18, 2014 at 6:22 AM, Marko Rauhamaa wrote: > Chris Angelico : > >> On Tue, Mar 18, 2014 at 5:15 AM, Marko Rauhamaa wrote: >>> Is "-2.0" a literal? >>> >>> What's the outcome of >>> >>> -2.0.__str__() >> >> If you mean (-2.0).__str__(), then it returns '-2.0', but that proves >> nothing. > > The point is, you don't need to "philosophize" about complex literals > when even negative numbers don't have literals in Python. Ah! I get you. The difference between literals and constants is one that almost never matters, though. Python may not have a syntax for negative or complex literals, but it does have notations for various sorts of constants, which function the same way. (Literals are by definition constants.) So Python may not have a convenient notation for "number of seconds in a week" (unless you work with DNS and find the bare integer 604800 convenient), but you can write 7*24*60*60 and it's just as good in a function: >>> ast.dump(ast.parse("7*24*60*60")) 'Module(body=[Expr(value=BinOp(left=BinOp(left=BinOp(left=Num(n=7), op=Mult(), right=Num(n=24)), op=Mult(), right=Num(n=60)), op=Mult(), right=Num(n=60)))])' >>> def f(x): return x + 7*24*60*60 >>> dis.dis(f) 2 0 LOAD_FAST 0 (x) 3 LOAD_CONST 6 (604800) 6 BINARY_ADD 7 RETURN_VALUE There's absolutely no run-time cost to writing it out, and you get to be flexible with whitespace and such, which you can't do with literals. ChrisA