Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
9ff4fb36
Commit
9ff4fb36
authored
Aug 24, 2016
by
Steven D'Aprano
Browse files
Options
Browse Files
Download
Plain Diff
Automated merge with
ssh://hg.python.org/cpython
parents
f06c7b6f
0a21c729
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
104 additions
and
26 deletions
+104
-26
Doc/library/code.rst
Doc/library/code.rst
+13
-5
Doc/library/statistics.rst
Doc/library/statistics.rst
+58
-0
Lib/code.py
Lib/code.py
+13
-4
Lib/statistics.py
Lib/statistics.py
+0
-17
Lib/test/test_code_module.py
Lib/test/test_code_module.py
+20
-0
No files found.
Doc/library/code.rst
View file @
9ff4fb36
...
...
@@ -30,15 +30,19 @@ build applications which provide an interactive interpreter prompt.
``sys.ps1`` and ``sys.ps2``, and input buffering.
.. function:: interact(banner=None, readfunc=None, local=None)
.. function:: interact(banner=None, readfunc=None, local=None
, exitmsg=None
)
Convenience function to run a read-eval-print loop. This creates a new
instance of :class:`InteractiveConsole` and sets *readfunc* to be used as
the :meth:`InteractiveConsole.raw_input` method, if provided. If *local* is
provided, it is passed to the :class:`InteractiveConsole` constructor for
use as the default namespace for the interpreter loop. The :meth:`interact`
method of the instance is then run with *banner* passed as the banner to
use, if provided. The console object is discarded after use.
method of the instance is then run with *banner* and *exitmsg* passed as the
banner and exit message to use, if provided. The console object is discarded
after use.
.. versionchanged:: 3.6
Added *exitmsg* parameter.
.. function:: compile_command(source, filename="<input>", symbol="single")
...
...
@@ -136,7 +140,7 @@ The :class:`InteractiveConsole` class is a subclass of
interpreter objects as well as the following additions.
.. method:: InteractiveConsole.interact(banner=None)
.. method:: InteractiveConsole.interact(banner=None
, exitmsg=None
)
Closely emulate the interactive Python console. The optional *banner* argument
specify the banner to print before the first interaction; by default it prints a
...
...
@@ -144,11 +148,15 @@ interpreter objects as well as the following additions.
by the class name of the console object in parentheses (so as not to confuse
this with the real interpreter -- since it's so close!).
The optional *exitmsg* argument specifies an exit message printed when exiting.
Pass the empty string to suppress the exit message. If *exitmsg* is not given or
None, a default message is printed.
.. versionchanged:: 3.4
To suppress printing any banner, pass an empty string.
.. versionchanged:: 3.6
Now prints a brief
message when exiting.
Print an exit
message when exiting.
.. method:: InteractiveConsole.push(line)
...
...
Doc/library/statistics.rst
View file @
9ff4fb36
...
...
@@ -39,6 +39,8 @@ or sample.
======================= =============================================
:func:`mean` Arithmetic mean ("average") of data.
:func:`geometric_mean` Geometric mean of data.
:func:`harmonic_mean` Harmonic mean of data.
:func:`median` Median (middle value) of data.
:func:`median_low` Low median of data.
:func:`median_high` High median of data.
...
...
@@ -111,6 +113,62 @@ However, for reading convenience, most of the examples show sorted sequences.
``mean(data)`` is equivalent to calculating the true population mean μ.
.. function:: geometric_mean(data)
Return the geometric mean of *data*, a sequence or iterator of
real-valued numbers.
The geometric mean is the *n*-th root of the product of *n* data points.
It is a type of average, a measure of the central location of the data.
The geometric mean is appropriate when averaging quantities which
are multiplied together rather than added, for example growth rates.
Suppose an investment grows by 10% in the first year, falls by 5% in
the second, then grows by 12% in the third, what is the average rate
of growth over the three years?
.. doctest::
>>> geometric_mean([1.10, 0.95, 1.12])
1.0538483123382172
giving an average growth of 5.385%. Using the arithmetic mean will
give approximately 5.667%, which is too high.
:exc:``StatisticsError`` is raised if *data* is empty, or any
element is less than zero.
.. function:: harmonic_mean(data)
Return the harmonic mean of *data*, a sequence or iterator of
real-valued numbers.
The harmonic mean, sometimes called the subcontrary mean, is the
reciprocal of the arithmetic :func:``mean`` of the reciprocals of the
data. For example, the harmonic mean of three values *a*, *b* and *c*
will be equivalent to ``3/(1/a + 1/b + 1/c)``.
The harmonic mean is a type of average, a measure of the central
location of the data. It is often appropriate when averaging quantities
which are rates or ratios, for example speeds. For example:
Suppose an investor purchases an equal value of shares in each of
three companies, with P/E (price/earning) ratios of 2.5, 3 and 10.
What is the average P/E ratio for the investor's portfolio?
.. doctest::
>>> harmonic_mean([2.5, 3, 10]) # For an equal investment portfolio.
3.6
Using the arithmetic mean would give an average of about 5.167, which
is too high.
:exc:``StatisticsError`` is raised if *data* is empty, or any element
is less than zero.
.. function:: median(data)
Return the median (middle value) of numeric data, using the common "mean of
...
...
Lib/code.py
View file @
9ff4fb36
...
...
@@ -186,7 +186,7 @@ class InteractiveConsole(InteractiveInterpreter):
"""Reset the input buffer."""
self
.
buffer
=
[]
def
interact
(
self
,
banner
=
None
):
def
interact
(
self
,
banner
=
None
,
exitmsg
=
None
):
"""Closely emulate the interactive Python console.
The optional banner argument specifies the banner to print
...
...
@@ -196,6 +196,11 @@ class InteractiveConsole(InteractiveInterpreter):
to confuse this with the real interpreter -- since it's so
close!).
The optional exitmsg argument specifies the exit message
printed when exiting. Pass the empty string to suppress
printing an exit message. If exitmsg is not given or None,
a default message is printed.
"""
try
:
sys
.
ps1
...
...
@@ -230,7 +235,10 @@ class InteractiveConsole(InteractiveInterpreter):
self
.
write
(
"
\
n
KeyboardInterrupt
\
n
"
)
self
.
resetbuffer
()
more
=
0
if
exitmsg
is
None
:
self
.
write
(
'now exiting %s...
\
n
'
%
self
.
__class__
.
__name__
)
elif
exitmsg
!=
''
:
self
.
write
(
'%s
\
n
'
%
exitmsg
)
def
push
(
self
,
line
):
"""Push a line to the interpreter.
...
...
@@ -268,7 +276,7 @@ class InteractiveConsole(InteractiveInterpreter):
def
interact
(
banner
=
None
,
readfunc
=
None
,
local
=
None
):
def
interact
(
banner
=
None
,
readfunc
=
None
,
local
=
None
,
exitmsg
=
None
):
"""Closely emulate the interactive Python interpreter.
This is a backwards compatible interface to the InteractiveConsole
...
...
@@ -280,6 +288,7 @@ def interact(banner=None, readfunc=None, local=None):
banner -- passed to InteractiveConsole.interact()
readfunc -- if not None, replaces InteractiveConsole.raw_input()
local -- passed to InteractiveInterpreter.__init__()
exitmsg -- passed to InteractiveConsole.interact()
"""
console
=
InteractiveConsole
(
local
)
...
...
@@ -290,7 +299,7 @@ def interact(banner=None, readfunc=None, local=None):
import
readline
except
ImportError
:
pass
console
.
interact
(
banner
)
console
.
interact
(
banner
,
exitmsg
)
if
__name__
==
"__main__"
:
...
...
Lib/statistics.py
View file @
9ff4fb36
## Module statistics.py
##
## Copyright (c) 2013 Steven D'Aprano <steve+python@pearwood.info>.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
"""
Basic statistics module.
...
...
Lib/test/test_code_module.py
View file @
9ff4fb36
...
...
@@ -80,6 +80,7 @@ class TestInteractiveConsole(unittest.TestCase):
self
.
assertEqual
(
len
(
self
.
stderr
.
method_calls
),
2
)
def
test_exit_msg
(
self
):
# default exit message
self
.
infunc
.
side_effect
=
EOFError
(
'Finished'
)
self
.
console
.
interact
(
banner
=
''
)
self
.
assertEqual
(
len
(
self
.
stderr
.
method_calls
),
2
)
...
...
@@ -87,6 +88,25 @@ class TestInteractiveConsole(unittest.TestCase):
expected
=
'now exiting InteractiveConsole...
\
n
'
self
.
assertEqual
(
err_msg
,
[
'write'
,
(
expected
,),
{}])
# no exit message
self
.
stderr
.
reset_mock
()
self
.
infunc
.
side_effect
=
EOFError
(
'Finished'
)
self
.
console
.
interact
(
banner
=
''
,
exitmsg
=
''
)
self
.
assertEqual
(
len
(
self
.
stderr
.
method_calls
),
1
)
# custom exit message
self
.
stderr
.
reset_mock
()
message
=
(
'bye!
\
N{GREEK SMALL LETTER ZETA}
\
N{CYRILLIC SMALL LETTER ZHE}
'
)
self
.
infunc
.
side_effect
=
EOFError
(
'Finished'
)
self
.
console
.
interact
(
banner
=
''
,
exitmsg
=
message
)
self
.
assertEqual
(
len
(
self
.
stderr
.
method_calls
),
2
)
err_msg
=
self
.
stderr
.
method_calls
[
1
]
expected
=
message
+
'
\
n
'
self
.
assertEqual
(
err_msg
,
[
'write'
,
(
expected
,),
{}])
def
test_cause_tb
(
self
):
self
.
infunc
.
side_effect
=
[
"raise ValueError('') from AttributeError"
,
EOFError
(
'Finished'
)]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment