Python Programming for Data Analysis 1st Edition José Unpingco pdf download
Python Programming for Data Analysis 1st Edition José Unpingco pdf download
https://textbookfull.com/product/python-programming-for-data-
analysis-1st-edition-jose-unpingco/
https://textbookfull.com/product/python-for-probability-
statistics-and-machine-learning-jose-unpingco/
https://textbookfull.com/product/python-for-probability-
statistics-and-machine-learning-2nd-edition-jose-unpingco/
https://textbookfull.com/product/vertically-integrated-
architectures-versioned-data-models-implicit-services-and-
persistence-aware-programming-1st-edition-jos-jong/
https://textbookfull.com/product/practical-machine-learning-for-
data-analysis-using-python-1st-edition-abdulhamit-subasi/
Python for Data Analysis Data Wrangling with Pandas
NumPy and IPython Wes Mckinney
https://textbookfull.com/product/python-for-data-analysis-data-
wrangling-with-pandas-numpy-and-ipython-wes-mckinney/
https://textbookfull.com/product/python-for-excel-a-modern-
environment-for-automation-and-data-analysis-1st-edition-felix-
zumstein/
https://textbookfull.com/product/python-for-data-analysis-data-
wrangling-with-pandas-numpy-and-jupyter-3rd-edition-wes-mckinney/
https://textbookfull.com/product/functional-programming-in-r-
advanced-statistical-programming-for-data-science-analysis-and-
finance-1st-edition-thomas-mailund/
https://textbookfull.com/product/python-data-analysis-perform-
data-collection-data-processing-wrangling-visualization-and-
model-building-using-python-3rd-edition-avinash-navlani/
José Unpingco
Python
Programming
for Data
Analysis
Python Programming for Data Analysis
José Unpingco
Python Programming
for Data Analysis
José Unpingco
University of California
San Diego
CA, USA
© The Editor(s) (if applicable) and The Author(s), under exclusive license to Springer Nature Switzerland
AG 2021
This work is subject to copyright. All rights are solely and exclusively licensed by the Publisher, whether
the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse
of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and
transmission or information storage and retrieval, electronic adaptation, computer software, or by similar
or dissimilar methodology now known or hereafter developed.
The use of general descriptive names, registered names, trademarks, service marks, etc. in this publication
does not imply, even in the absence of a specific statement, that such names are exempt from the relevant
protective laws and regulations and therefore free for general use.
The publisher, the authors, and the editors are safe to assume that the advice and information in this book
are believed to be true and accurate at the date of publication. Neither the publisher nor the authors or
the editors give a warranty, expressed or implied, with respect to the material contained herein or for any
errors or omissions that may have been made. The publisher remains neutral with regard to jurisdictional
claims in published maps and institutional affiliations.
This Springer imprint is published by the registered company Springer Nature Switzerland AG
The registered company address is: Gewerbestrasse 11, 6330 Cham, Switzerland
To Irene, Nicholas, and Daniella, for all their
patient support.
Preface
This book grew out of notes for the ECE143 Programming for Data Analysis class
that I have been teaching at the University of California, San Diego, which is a
requirement for both graduate and undergraduate degrees in Machine Learning and
Data Science. The reader is assumed to have some basic programming knowledge
and experience using another language, such as Matlab or Java. The Python idioms
and methods we discuss here focus on data analysis, notwithstanding Python’s
usage across many other topics. Specifically, because raw data is typically a mess
and requires much work to prepare, this text focuses on specific Python language
features to facilitate such cleanup, as opposed to only focusing on particular Python
modules for this.
As with ECE143, here we discuss why things are the way they are in Python
instead of just that they are this way. I have found that providing this kind of
context helps students make better engineering design choices in their codes, which
is especially helpful for newcomers to both Python and data analysis. The text is
sprinkled with little tricks of the trade to make it easier to create readable and
maintainable code suitable for use in both production and development.
The text focuses on using the Python language itself effectively and then moves
on to key third-party modules. This approach improves effectiveness in different
environments, which may or may not have access to such third-party modules. The
Numpy numerical array module is covered in depth because it is the foundation
of all data science and machine learning in Python. We discuss the Numpy array
data structure in detail, especially its memory aspects. Next, we move on to Pandas
and develop its many features for effective and fluid data processing. Because data
visualization is key to data science and machine learning, third-party modules such
as Matplotlib are developed in depth, as well as web-based modules such as Bokeh,
Holoviews, Plotly, and Altair.
On the other hand, I would not recommend this book to someone with no
programming experience at all, but if you can do a little Python already and want to
improve by understanding how and why Python works the way it does, then this is
a good book for you.
vii
viii Preface
To get the most out of this book, open a Python interpreter and type-along with
the many code samples. I worked hard to ensure that all of the given code samples
work as advertised.
Acknowledgments I would like to acknowledge the help of Brian Granger and Fernando Perez,
two of the originators of the Jupyter Notebook, for all their great work, as well as the Python
community as a whole, for all their contributions that made this book possible. Hans Petter
Langtangen was the author of the Doconce [1] document preparation system that was used to
write this text. Thanks to Geoffrey Poore [2] for his work with PythonTeX and LATEX, both key
technologies used to produce this book.
References
1 Basic Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Basic Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Reserved Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.4 Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.5 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.6 Loops and Conditionals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.1.7 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1.8 File Input/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.1.9 Dealing with Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.1.10 Power Python Features to Master . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.1.11 Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.1.12 Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.1.13 Iteration and Iterables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.1.14 Using Python Assertions to Pre-debug Code . . . . . . . . . . . . . . . 60
1.1.15 Stack Tracing with sys.settrace . . . . . . . . . . . . . . . . . . . . . . 61
1.1.16 Debugging Using IPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
1.1.17 Logging from Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2 Object-Oriented Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.1 Properties/Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.2 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.3 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.4 Class Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2.5 Class Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.6 Static Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.7 Hashing Hides Parent Variables from Children . . . . . . . . . . . . . . . . . . . . . . 76
2.8 Delegating Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2.9 Using super for Delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.10 Metaprogramming: Monkey Patching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
ix
x Contents
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Chapter 1
Basic Programming
Before we get into the details, it is a good idea to get a high-level orientation to
Python. This will improve your decision-making later regarding software develop-
ment for your own projects, especially as these get bigger and more complex. Python
grew out of a language called ABC, which was developed in the Netherlands in the
1980s as an alternative to BASIC to get scientists to utilize microcomputers, which
were new at the time. The important impulse was to make non-specialist scientists
able to productively utilize these new computers. Indeed, this pragmatic approach
continues to this day in Python which is a direct descendent of the ABC language.
There is a saying in Python—come for the language, stay for the community.
Python is an open source project that is community driven so there is no corporate
business entity making top-down decisions for the language. It would seem that such
an approach would lead to chaos but Python has benefited over many years from
the patient and pragmatic leadership of Guido van Rossum, the originator of the
language. Nowadays, there is a separate governance committee that has taken over
this role since Guido’s retirement. The open design of the language and the quality
of the source code has made it possible for Python to enjoy many contributions from
talented developers all over the world over many years, as embodied by the richness
of the standard library. Python is also legendary for having a welcoming community
for newcomers so it is easy to find help online for getting started with Python.
The pragmatism of the language and the generosity of the community have long
made Python a great way to develop web applications. Before the advent of data
science and machine learning, upwards of 80% of the Python community were web
developers. In the last five years (at the time of this writing), the balance is tilted to
an almost even split between web developers and data scientists. This is the reason
you find a lot of web protocols and technology in the standard library.
Python is an interpreted language as opposed to a compiled language like C
or FORTRAN. Although both cases start with a source code file, the compiler
© The Editor(s) (if applicable) and The Author(s), under exclusive license 1
to Springer Nature Switzerland AG 2021
J. Unpingco, Python Programming for Data Analysis,
https://doi.org/10.1007/978-3-030-68952-0_1
2 1 Basic Programming
examines the source code end-to-end and produces an executable that is linked to
system-specific library files. Once the executable is created, there is no longer any
need for the compiler. You can just run the executable on the system. On the other
hand, an interpreted language like Python you must always have a running Python
process to execute the code. This is because the Python process is an abstraction on
the platform it is running on and thus must interpret the instructions in the source
code to execute them on the platform. As the intermediary between the source
code on the platform, the Python interpreter is responsible for the platform specific
issues. The advantage of this is that source code can be run on different platforms as
long as there is a working Python interpreter on each platform. This makes Python
source codes portable between platforms because the platform specific details are
handled by the respective Python interpreters. Portability between platforms was
a key advantage of Python, especially in the early days. Going back to compiled
languages, because the platform specific details are embedded in the executable, the
executable is tied to a specific platform and to those specific libraries that have been
linked into the executable. This makes these codes are less portable than Python,
but because the compiler is able to link to the specific platform it has the option
to exploit platform- specific level optimizations and libraries. Furthermore, the
compiler can study the source code file and apply compiler-level optimizations that
accelerate the resulting executable. In broad strokes, those are the key differences
between interpreted and compiled languages. We will later see that there are many
compromises between these two extremes for accelerating Python codes.
It is sometimes said that Python is slow as compared to compiled languages,
and pursuant to the differences we discussed above, that may be expected, but it
is really a question of where the clock starts. If you start the clock to account for
developer time, not just code runtime, then Python is clearly faster, just because
the development iteration cycle does not require a tedious compile and link step.
Furthermore, Python is just simpler to use than compiled languages because so
many tricky elements like memory management are handled automatically. Pythons
quick turnaround time is a major advantage for product development, which requires
rapid iteration. On the other hand, codes that are compute-limited and must run
on specialized hardware are not good use-cases for Python. These include solving
systems of parallel differential equations simulating large-scale fluid mechanics or
other large-scale physics calculations. Note that Python is used in such settings but
mainly for staging these computations or postprocessing the resulting data.
Your primary interface to the Python interpreter is the commandline. You can type
in python in your terminal you should see something like the following,
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
1.1 Basic Language 3
There is a lot of useful information including the version of Python and its
provenance. This matters because sometimes the Python interpreter is compiled to
allow fast access to certain preferred modules (i.e., math module). We will discuss
this more when we talk about Python modules.
Although Python will not stop you, do not use these as variable or function names.
and del from not while
as elif global or with
assert else if pass yield
break except import print
class exec in raise
continue finally is return
def for lambda try
For example, a common mistake is to assign sum=10, not realizing that now the
sum() Python function is no longer available.
1.1.3 Numbers
The operator has many other subtle uses and was introduced to improve readability
in certain situations. You can also cast among the numeric types in a common-sense
way:
>>> int(1.33333)
1
>>> float(1)
1.0
>>> type(1)
<class 'int'>
>>> type(float(1))
<class 'float'>
Importantly, Python integers are of arbitrary length and can handle extremely large
integers. This is because they are stored as a list of digits internally. This means that
they are slower to manipulate than Numpy integers which have fixed bit-lengths,
provided that the integer can fit into allocated memory.
1.1.5 Strings
Python strings have C-style escape characters for newlinewsnewlines, tabs, etc.
String literals defined this way are by default encoded using UTF-8 instead of
ASCII, as in Python 2. The triple single (’) or triple double quote (") denotes a
block with embedded newlines or other quotes. This is particularly important for
function documentation docstrings that we will discussed later.
>>> print( '''Usage: thingy [OPTIONS]
... and more lines
... here and
... here
... ''')
Usage: thingy [OPTIONS]
and more lines
here and
here
Strings can be controlled with a character before the single or double quote. For
example, see the comments (#) below for each step,
>>> # the 'r' makes this a 'raw' string
>>> hello = r"This long string contains newline characters \n, as
→ in C"
>>> print(hello)
This long string contains newline characters \n, as in C
>>> # otherwise, you get the newline \n acting as such
>>> hello = "This long string contains newline characters \n, as
→ in C"
>>> print(hello)
This long string contains newline characters
, as in C
1.1 Basic Language 7
Note that a f-string evaluates (i.e., interpolates) the Python variables in the
current scope,
>>> x = 10
>>> s = f'{x}'
>>> type(s)
<class 'str'>
>>> s
'10'
Beware that an f-string is not resolved until run-time because it has to resolve
the embedded variables. This means that you cannot use f-strings as docstrings.
Importantly, Python strings are immutable which means that once a string is created,
it cannot be changed in-place. For example,
>>> x = 'strings are immutable '
>>> x[0] = 'S' # not allowed!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
This means you have to create new strings to make this kind of change.
Strings vs Bytes In Python 3, the default string encoding for string literals is UTF-
8. The main thing to keep in mind is that bytes and strings are now distinct objects,
as opposed to both deriving from basestring in Python 2. For example, given
the following unicode string,
>>> x='Ø'
>>> isinstance(x,str) # True
True
>>> isinstance(x,bytes) # False
False
>>> x.encode('utf8') # convert to bytes with encode
b'\xc3\x98'
Note the distinction between bytes and strings. We can convert bytes to strings using
decode,
>>> x=b'\xc3\x98'
>>> isinstance(x,bytes) # True
True
>>> isinstance(x,str) # False
False
>>> x.decode('utf8')
'Ø'
8 1 Basic Programming
An important consequence is that you cannot append strings and bytes as in the
following: u"hello"+b"goodbye". This used to work fine in Python 2 because
bytes would automatically be decoded using ASCII, but this no longer works in
Python 3. To get this behavior, you have to explicitly decode/encode. For
example,
>>> x=b'\xc3\x98'
>>> isinstance(x,bytes) # True
True
>>> y='banana'
>>> isinstance(y,str) # True
True
>>> x+y.encode()
b'\xc3\x98banana'
>>> x.decode()+y
'Øbanana'
Slicing Strings Python is a zero-indexed language (like C). The colon (:) character
denotes .
>>> word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
>>> word[-1] # The last character
'A'
>>> word[-2] # The last-but-one character
'p'
>>> word[-2:] # The last two characters
'pA'
>>> word[:-2] # Everything except the last two characters
'Hel'
Python has a built-in and very powerful regular expression module (re) for string
manipulations. String substitution creates new strings.
>>> x = 'This is a string'
>>> x.replace('string','newstring')
'This is a newstring'
>>> x # x hasn't changed
'This is a string'
1.1 Basic Language 9
Formatting Strings There are so many ways to format strings in Python, but here
is the simplest that follows C-language sprintf conventions in conjunction with
the modulo operator %.
>>> 'this is a decimal number %d'%(10)
'this is a decimal number 10'
>>> 'this is a float %3.2f'%(10.33)
'this is a float 10.33'
>>> x = 1.03
>>> 'this is a variable %e' % (x) # exponential format
'this is a variable 1.030000e+00'
The advantage of format is you can reuse the placeholders as in the following,
>>> 'x = {0},{1},{0}; y = {1}'.format(x,y)
'x = 10,20,10; y = 20'
Basic Data Structures Python provides many powerful data structures. The two
most powerful and fundamental are the list and dictionary. Data structures and
10 1 Basic Programming
Lists can also be sorted in-place using the sort() list method,
>>> x = [1,9,8,2]
>>> x.sort()
>>> x
[1, 2, 8, 9]
Both of these use the powerful Timsort algorithm. Later, we will see more
variations and uses for these sorting functions.
Now that we have a feel for how to index and use lists, let us talk about the invariant
that it provides: as long as you index a list within its bounds, it provides the next
ordered element of the list. For example,
>>> x = ['a',10,'c']
>>> x[1] # return 10
10
>>> x.remove(10)
>>> x[1] # next element
'c'
Notice that the list data structure filled in the gap after removing 10. This is extra
work that the list data structure did for you without explicitly programming. Also,
list elements are accessible via integer indices and integers have a natural ordering
and thus so does the list. The work of maintaining the invariant does not come for
free, however. Consider the following,
>>> x = [1,3,'a']
>>> x.insert(0,10) # insert at beginning
12 1 Basic Programming
>>> x
[10, 1, 3, 'a']
Seem harmless? Sure, for small lists, but not so for large lists. This is because
to maintain the invariant the list has to scoot (i.e., memory copy) the remaining
elements over to the right to accommodate the new element added at the beginning.
Over a large list with millions of elements and in a loop, this can take a substantial
amount of time. This is why the default append() and pop() list methods work
at the tail end of the list, where there is no need to scoot items to the right.
Tuples Tuples are another general purpose sequential container in Python, very
similar to lists, but these are immutable. Tuples are delimited by commas (parenthe-
ses are grouping symbols). Here are some examples,
>>> a = 1,2,3 # no parenthesis needed!
>>> type(a)
<class 'tuple'>
>>> pets=('dog','cat','bird')
>>> pets[0]
'dog'
>>> pets + pets # addition
('dog', 'cat', 'bird', 'dog', 'cat', 'bird')
>>> pets*3
('dog', 'cat', 'bird', 'dog', 'cat', 'bird', 'dog', 'cat', 'bird')
>>> pets[0]='rat' # assignment not work!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
It may seem redundant to have tuples which behave in terms of their indexing like
lists, but the key difference is that tuples are immutable, as the last line above shows.
The key advantage of immutability is that it comes with less overhead for Python
memory management. In this sense, they are lighter weight and provide stability for
codes that pass tuples around. Later, we will see this for function signatures, which
is where the major advantages of tuples arise.
(continued)
1.1 Basic Language 13
This is more consequential for mutable data structures like lists. Consider the
following,
>>> x = y = [1,3,4]
>>> x[0] = 'a'
>>> x
['a', 3, 4]
>>> y
['a', 3, 4]
>>> id(x),id(y)
(140271930505344, 140271930505344)
Because x and y are merely two labels for the same underlying list, changes to
one of the labels affects both lists. Python is inherently stingy about allocating
new memory so if you want to have two different lists with the same content,
you can force a copy as in the following,
>>> x = [1,3,4]
>>> y = x[:] # force copy
>>> id(x),id(y) # different ids now!
(140271930004160, 140271929640448)
>>> x[1] = 99
>>> x
[1, 99, 4]
>>> y # retains original data
[1, 3, 4]
Note how the z variable collected the remaining items in the assignment. You can
also change the order of the chunking,
>>> x,*y,z = 1,2,3,4,5
>>> x
1
14 1 Basic Programming
>>> y
[2, 3, 4]
>>> z
5
This unpacking is sometimes called de-structuring, or splat, in case you read this
term elsewhere.
Dictionaries Python dictionaries are central to Python because many other ele-
ments (e.g., functions, classes) are built around them. Effectively programming
Python means using dictionaries effectively. Dictionaries are general containers that
implement the mapping data structure, which is sometimes called a hash table or
associative array. Dictionaries require a key/value pair, which maps the key to the
value.
>>> x = {'key': 'value'}
The curly braces and the colon make the dictionary. To retrieve the value from the
x dictionary, you must index it with the key as shown,
>>> x['key']
'value'
Pretty slick.
The invariant that the dictionary provides is that as long as you provide a valid key,
then it will always retrieve the corresponding value; or, in the case of assignment,
store the value reliably. Recall that lists are ordered data structures in the sense that
when elements are indexed, the next element can be found by a relative offset from
the prior one. This means that these elements are laid out contiguously in memory.
Dictionaries do not have this property because they will put values wherever they
can find memory, contiguous or not. This is because dictionaries do not rely upon
relative offsets for indexing, they rely instead on a hash function. Consider the
following,
>>> x = {0: 'zero', 1: 'one'}
>>> y = ['zero','one']
>>> x[1] # dictionary
'one'
>>> y[1] # list
'one'
Indexing both variables looks notationally the same in both cases, but the process
is different. When given a key, the dictionary computes a hash function and the
stores the value at a memory location based upon the hash function. What is a hash
function? A hash function takes an input and is designed to return, with very high
probability, a value that is unique to the key. In particular, this means that two keys
cannot have the same hash, or, equivalently, cannot store different values in the
same memory location. Here are two keys which are almost identical, but have very
different hashes.
>>> hash('12345')
3973217705519425393
>>> hash('12346')
3824627720283660249
All this is with respect to probability, though. Because memory is finite, it could
happen that the hash function produces values that are the same. This is known
as a hash collision and Python implements fallback algorithms to handle this
16 1 Basic Programming
Let us think about why this happens. Remember that the hash function guarantees
that when given a key it will always be able to retrieve the value. Suppose that it
were possible use mutable keys in dictionaries. In the above code, we would have
hash(a) -> 132334, as an example, and let us suppose the 10 value is inserted
in that memory slot. Later in the code, we could change the contents of a as in
a[0]=3. Now, because the hash function is guaranteed to produce different outputs
for different inputs, the hash function output would be different from 132334 and
thus the dictionary could not retrieve the corresponding value, which would violate
its invariant. Thus we have arrived at a contradiction that explains why dictionary
keys must be immutable.
Sets Python provides mathematical sets and corresponding operations with the
set() data structure, which are basically dictionaries without values.
>>> set([1,2,11,1]) # union-izes elements
{1, 2, 11}
>>> set([1,2,3]) & set([2,3,4]) # bitwise intersection
{2, 3}
>>> set([1,2,3]) and set([2,3,4])
{2, 3, 4}
>>> set([1,2,3]) ^ set([2,3,4]) # bitwise exclusive OR
{1, 4}
>>> set([1,2,3]) | set([2,3,4]) # OR
{1, 2, 3, 4}
>>> set([ [1,2,3],[2,3,4] ]) # no sets of lists
1.1 Basic Language 17
Note that since Python 3.6+, keys can be used as set objects, as in the following,
>>> d = dict(one=1,two=2)
>>> {'one','two'} & d.keys() # intersection
{'one', 'two'}
>>> {'one','three'} | d.keys() # union
{'one', 'two', 'three'}
This also works for dictionary items if the values are hashable,
>>> d = dict(one='ball',two='play')
>>> {'ball','play'} | d.items()
{'ball', 'play', ('one', 'ball'), ('two', 'play')}
Once you create a set, you can add individual elements or remove them as follows:,
>>> s = {'one',1,3,'10'}
>>> s.add('11')
>>> s
{1, 3, 'one', '11', '10'}
>>> s.discard(3)
>>> s
{1, 'one', '11', '10'}
Remember sets are not ordered and you cannot directly index any of the constituent
items. Also, the subset() method is for a proper subset not a partial subset. For
example,
>>> a = {1,3,4,5}
>>> b = {1,3,4,5,6}
>>> a.issubset(b)
True
>>> a.add(1000)
>>> a.issubset(b)
False
And likewise for issuperset. Sets are optimal for fast lookups in Python, as in
the following,
>>> a = {1,3,4,5,6}
>>> 1 in a
True
>>> 11 in a
False
There are two primary looping constructs in Python: the for loop and the while
loop. The syntax of the for loop is straightforward:
18 1 Basic Programming
Note the colon character at the end. This is your hint that the next line should be
indented. In Python, blocks are denoted by whitespace indentation (four spaces
is recommended) which makes the code more readable anyway. The for loop
iterates over items that provided by the iterator, which is the range(3) list
in the above example. Python abstracts the idea of iterable out of the looping
construction so that some Python objects are iterable all by themselves and are just
waiting for an iteration provider like a for or while loop to get them going.
Interestingly, Python has an else clause, which is used to determine whether or
not the loop exited with a break3 or not.
>>> for i in [1,2,3]:
... if i>20:
... break # won't happen
... else:
... print('no break here!')
...
no break here!
The else block is only executed when the loop terminates without breaking.
The while loop has a similar straightforward construct:
>>> i = 0
>>> while i < 3:
... i += 1
... print(i)
...
1
2
3
This also has a corresponding optional else block. Again, note that the presence
of the colon character hints at indenting the following line. The while loop will
continue until the boolean expression (i.e., i<10) evaluates False. Let us consider
boolean and membership in Python.
Logic and Membership Python is a truthy language in the sense that things are
true except for the following:
• None
• False
• zero of any numeric type, for example, 0, 0L, 0.0, 0j.
• any empty sequence, for example, ”, (), [].
3 There is also a continue statement which will jump to the top of the for or while loop.
Another Random Scribd Document
with Unrelated Content
ingerül, dühös lesz; emberek, kiknek semmi mesterségük a háboru,
odahagyják kaptafáikat s lőni, kardot forgatni tanulnak; becsületes
czéhek, iskolai tanulók csapatostul kezdenek egymással hadakozni,
mint legközelebb a brassai vargák és timárok s az enyedi diákok! és
vannak, kikre nézve e dühödt hangulat kivánatos. Bizony mondom
kegyelmednek, hogy e csodák mind a magasból származnak, de még
sem az égből.
Míg a nagytiszteletű urak eként beszélgettek, a vásártéren valami
látvány adta elő magát; a népség egy helyen csoportosulni kezdett s
nehány pillanat alatt oly nagy lett a tolongás, hogy egy almát nem
lehetett volna lehajítani.
– Nini! szólt az elébb figyelmessé lett pópa, ott valami történik.
– Olasz kutyatánczoltatók lesznek, vagy valami török árul
megifjító balzsamot.
Im azonban nagy futva érkezik a tömeg közül egy köpczös, kerek
hasú férfi, s már messziről integet és kiabál.
– Nagytiszteletű uraim, jőjjenek, de gyorsan!
Magyari megismeré a kisded férfiúban az egyházfit s nem tudá
mire vélni e minden formalitásokat mellőző hivogatását, azért is
bevárá, míg egészen odaért.
– Mi lelte kegyelmedet, hogy úgy felháborodott?
– Miért nem jön a tisztelendő úr, mikor hivom? szól ez oly
hangon, mintha ő parancsolna az esperesnek; itt a piaczon egy
ördöngös ember van.
– Lehet ott még több is.
– De ez valóságos ördöngös, olyan, a kit megszállt az ördög, eszi
a földet és túrja a tajtékot, s prófécziákat mond az embereknek;
magister Szénási épen most érkezett oda, de semmire sem megy
vele; mentül jobban exorcisálja, az annál dühödtebben beszél; már
arra is példálózik, hogy Erdély czimeréből a hét vár közül nem marad
meg több, csak kettő, a csillag le fog esni belőle, a félhold pedig tele
holddá fog megnőni.
– De már ez mégis sok! kiálta fel egész méltatlankodással az
esperes. Egyházfi uram, menjen kegyelmed a szobámba s hozza
utánam a nádpálczámat. Collega uram, maradjon addig itt.
Azzal egész tekintély súlyával az összecsődült sokaság közé
lépett, az emberek megismerték s utat nyitottak előtte egész addig a
kisded térségig, mely bámulatuk tárgyai számára volt felhagyva.
Egy lánczokkal körülvett kő-emelvény volt az, melynek legalsó
lépcsőjén egy meghajlott termetű száraz férfi állt, a legtetején pedig
egy hamuszin pofájú siheder feküdt, összekuporodott állapotban.
Ez volt az ördöngös, ama másik pedig magister Szénási, vagy
mint őt felsőbb körökben nevezték: Proteus Transsilvanicus, kivel
bennünket nagytiszteletű Magyari László uram most mindjárt
bővebben meg fog ismertetni.
Az esperes megállt a tér közepén, positurába vágva magát s
kezeit hátra téve, a magisternek fordult:
– Mit mivelsz e helyen te korhely Proteus Transsilvanicus?
A megszólított mellére tevé kezét s arczát földig hajtva, felfordítá
szemeit az égre, hogy alig látszott valami a feketéjükből, s arczát oly
háromszegletűvé húzta, hogy a ki nem ismerte, megszánta volna; és
szólt a legalázatosabb, reszketeg, könyörületre indító hangon:
– Avagy miért nevez engemet kegyelmed korhely Proteus
Transsilvanicusnak, holott az én nevem magister Szénási?
– Micsoda magister? pattant föl a lelkész, ördögök mestere vagy,
pokol orgonistája, Belzebub pedellusa! Kukta voltál Nagy-Váradon,
de elszöktél egy gazdag zsidó leánynyal, s hogy hozzá juthass,
zsidóvá lettél érte. Kiszöktél Törökországba, ott eladtad feleségedet
a thessaliai basának, s hogy ne reclamáljanak, áttértél az Izlam
hitre, onnan megszöktél és voltál czinczár sok ideig Belgrádon, mikor
legutoljára bejöttél Erdélybe, már akkor unitarius voltál, mert pénzt
gyüjtögettél a szamosujvári templom számára; s mi vagy most?
sehonnai, ki sehol sem lakik és mindenütt található; mindenki
szolgája, ki hordod a mendemondát Henczidától Bonczidáig, Béldi
Páltól Teleki Mihályig és visszafelé, te családok összeveszítője, népek
felháborítója, vallásfelekezetek Erynnise! kit mindenféle alakban
láttunk már, jónak, rosznak, kevélynek, alázatosnak, jámbornak és
vérengzőnek, vendégségekben mint tányérnyalót, piaczokon mint
demagogot, békesség idején mint harczi hőst, háboru alatt mint
zarándokot, ki még külső alakodat is úgy tudod kiforgatni,
beforgatni, hogy ha ma soványnak látunk és betegesnek, holnap
kihízott képpel állsz elénk, s ki most mankó után húzod a lábadat,
ősz kopasz fejeddel, holnap kipödrött bajuszszal lovon fogsz
nyargalni, hanem a míg akármivé mássá változhatnál, most megállj
előttem és felelj nekem az összegyűlt nép előtt: ki adott te neked
hatalmat holtakat és rossz lelkeket idézni elő? ki tett tégedet az idők
prófétájává?
A megszólított felemelé kezeit az égre s hosszasan felsóhajtott:
– Oh én uram, én erős kősziklára építtetett váram, ím lássad az
én ellenségem minő vermet ás én alám, hogy benne elejtsen! az én
üldözőim, mint az erős bikák, környűlvettenek engem és kapálják a
földet, és orrlikaikból égő tűz lövell én reám, az én lábaim meg
vannak kötözve kemény tőreikkel, s hasonlatos vagyok a
halottakhoz, kiket az éhes fenevadak sírjokból kiástak, de te, oh
uram, ki világ vagy a sötétségben, oszlasd el az én ellenségeim
elméjének homályát, nyisd meg azoknak ajkait, a kik némák és
azoknak füleit, a kik süketek, és önts félelmet azoknak szíveikbe, a
kik felfuvalkodtanak magukban és orczájuk megtelvén kövérséggel,
így kiáltanak, mondván: kicsoda a mi urunk?
A mint a magister elvégzé patheticus beszédét, fölemelkedék a
kőemelvényre fektetett ördöngös, s rémséges szemforgatással végig
tekintve a sokaságon, csuklások és hörgések által szakgatott hangon
megszólala:
– Jaj! háromszor jaj néked Assurnak és Edomnak népe! Eljön az
urnak rettenetes napja és elvesznek az ég világosságai! elvész
fegyver által, kit a nap készen nem talál és azok, kik megmaradnak,
torkig fognak járni az elhullottak vérében! és a kik elfutnak, olyanok
lesznek, mint a bujdosó madár! Sirjatok Moáb leányai és öltözzetek
zsákruhákba, mert a jajgatás egyik hegytől a másikig fog hangzani s
a hegyek oldalain a kősziklákhoz paskolt kisdedek vére omlik alá!
Azért készüljetek, hogy a ti dárdáitok meg ne rozsdásodjanak és a ti
kézíveitek idege meg ne lankadjon, hogy a midőn eljön a
rettegéseknek napja, a felemelt zászlók ébren találjanak!…
– Tehát dárda és kézív! monda Magyari László. Tisztában
vagyunk; s azzal odalépett az ördöngös elé, ki véres szemeit
ijesztően hordozá végig a megrémült tömegen. Jámbor próféta,
valjon nem tudnád még, hogy a mai világban nem szokás kézíjjal
lövöldözni, hanem puskával?
E comicus észrevétel halk nevetést kezde gerjeszteni a körülállók
bátrabbjai közt, melyet elfojtandó egyszerre fölegyenesedék a
dæmoniacus s összeszedve arcza minden borzasztóságát, a pap felé
fordult s reszketeg tíz újjával felé mutatva, kísértetes hangon kiálta
rá; miközben magister Szénási is kárörvendő arczczal irányzá mutató
újját a megszólított felé.
– Jaj te neked Ákhábnak főpapja, Hámán örököse, Béliálnak fia,
gőgös Akhitófel!
De Magyari László uramnak se kellett több! nosza odaugrék s
minekelőtte más kigondolta volna, úgy ütötte pofon az ördöngöst
egyszer jobbról, másszor balról, hogy az majd lebukott, harmadszor
pedig, hogy egyenesen álljon a kettős igazítás után, belemarkolt
annak üstökébe s megrázá emberűl, mondván:
– Hát ki fia vagyok én, beste kölyke?
– Jajajaj! nagytiszteletű Magyari László uram! ordítá az exorcisált,
elfeledve phrasisokat és kisértetes hangot, s rövidségnek okáért csak
az üstöke eleresztését instálta.
– Hát te ki vagy trifurcifer! riadt rá újra Magyari.
– Nem vagyok én senki, csak a magister kályhafűtője. Ereszsze el
a hajamat, nagytiszteletű uram.
Az exorcisáló e szóra elereszté az ördöngöst s míg az a nép szitka
és kaczaja és ütlegei között elszaladt, Magyari a magisternek fordult.
Futott volna már ez a nyavalyás is, de a pap megragadá köntöse
szélét s épen akkor érkezvén oda az egyházfi a nádpálczával, ilyen
szép tanítást kötött a lelkére:
– Te Istent gúnyoló tarkahitű zsidóból musulmánra fordított
edomita, tudd meg azt, hogy én semmiféle ördögtül nem rettegek,
legkevésbé pedig az olyantól, a ki emberekben lakik. Ha tehát
valahol kóboroltodban még egy ily atyádfiával összetalálkozol,
elmondd neki, hogy adott nekem az ég egy hatalmas ördögűző
eszközt (s itt felemelé a nádpálczát), melylyel a hasonlatos rosz
lelkeket nemcsak az emberekből, hanem az országból is ki tudom
kergetni.
Szénási szeretett volna már menni.
– Még egy szót. Ha a fejedelmi halastóban még valaha ütközetet
mernek tenni a halak, én valamennyi kertészt és halászt mind
elcsapatok a hivatalából. Végtére: mondja meg kegyelmed azoknak a
kísérteteknek, kiknek kegyelmed éjszakánként orgonálni szokott,
hogy ki ne próbálják többet az orrukat ütni a lakásaikból, mert én
magam oda állok egy fustélylyal s fogadom, hogy úgy
helybenhagyom őket, hogy vissza nem kívánkoznak többet az árnyék
világra, a míg én itt vagyok. Ez szóm és mondásom. Többire nézve
az Isten javítsa meg kegyelmedet.
Az elbocsátott renegát köpönyegébe huzódva, iparkodott elveszni
a néptömeg között, mi alatt nagytiszteletű Magyari László uram nagy
diadallal tért vissza a parochiára, melynek lugasa alatt nagy
csendesen üldögélt tisztelendő collegája, nem vévén részt sem pro,
sem contra a viadalban.
AZ ARANYOS KAFTÁNY.
A S*a család egyike volt Oláhország leggazdagabbjainak s
ennélfogva legnevezetesebbjeinek.
A majoresco tizenkét bojárnak parancsolt, ötvennégy faluból
szedte a dézmát és füstpénzt, esztendőn át kilencz hónapig lakott
Stambulban s tartotta a szultán kengyelét, mikor az lóra ült, s
háború idején kétezer lándzsással csatlakozott a macedoniai basa
dandáraihoz s szabad volt neki lehuzni a papucsait, mikor a serail
külső udvarába lépett.
Ennyi kitüntető előny mellett a kisebbik testvér sorsa épen nem
volt valami ragyogó: annak pappá kellett lenni, vagy kiskereskedővé,
vagy valami jó házasságot csinálni, mert azt a család tekintélye meg
nem engedheté, hogy úri bátyja udvarában a többi csatlósokkal
együtt inaskodjék.
Ezerhatszáz és egynehányban S*a György volt a családi első
szülött, kivel nem sok bajunk fog lenni; hanem fel fogjuk keresni S*a
Mihályt, a másod szülöttet, kit ideje korán felküldött a család
Bukarestbe, hogy ott a seminariumban pappá növeltessék; minthogy
azonban az ifjunak igen nehéz feje volt, s a tudományokban igen
kevés előmenetelt tudott tenni, már szinte megvénült az
iskolázásban, midőn elvégre egy hypodiakonus leányát nőül vevén,
valahogy egy kis havasalföldi faluba eldugaték papnak.
Ott vesződött sok éven át az élettel, fizetése ruháira is kevés volt
neki, s ha saját kezeivel nem töri a földet, a málékenyérből sem
látott volna eleget.
Házassága első évében egy kis leánykája született, több nem is
lett aztán; hanem ennek a számára türt, kuporgatott a jó ember
feleségestül együtt: hogy ha ők meg találnak is halni, annak
maradjon valamicskéje. Ilyenformán minden forintjából félretett
egynehány batkát, hogy majd ha abból szép kerek somma lesz, vesz
belőle leányának – egy tehenet.
Egy tehén! Ez volt vágyainak netovábbja. Ha neki egy tehene
volna, ki volna nálánál boldogabb? Vaj és turó kerülne az asztalra
bőséggel, még el is lehetne belőle adni. A borjuját fölnevelné s
eladná a mészárosnak jó drágán, kikötve belőle egy fertályt husvéti
ünnepekre; egy tehén annyi mulatságot adna az egész családnak:
reggel megitatni, megtörölgetni, kivezetni a mezőre, a csengetyűje
szólna egész nap a legelőn; este bejönne az udvarra, odafenné az
oldalát a szederfához, bedugná fejét a konyhaajtón, csillag volna a
homlokán, meg hagyná a fejét vakarni, a nyakát megveregetni, s
elvenné a kis Mariska kezéből a nyújtott málépogácsa-darabot. Csak
ő egy tehenet vehetne valaha! Ez volt a család utópiája, mindennapi
óhajtása, György már szederfát is ültetett az udvarra, hogy legyen a
Csákónak mihez dörzsölni az oldalát s a kis Mari mindennap letört a
pogácsájából egy darabkát s eldugta a fészer alá: majd jó lesz a kis
boczinak.
S ime, midőn már annyira mentek volna a takarékfillérkék, hogy
a legközelebbi vásár alkalmával már megvehették vala a tehenkét:
már mindennap arról beszéltek, milyen lesz? kese lesz? barna lesz?
fehér vagy tarka? előre nevet is adtak neki, s a ház mellé leveles
szint készítettek számára; – ekkor történik, hogy valami kóbor sheik
a Stambulban lakó majorescót, a miért az ruhájához mert érni az
utczán, brevi manu agyonütvén, a szegény pópa egy napon hosszú
levelet kap Drinápolyból, melyben tudtára adatik, hogy megholt
bátyja után ő következik a család elejére s ez órától fogva
hetvenezer arany évi jövedelemnek leend birtokosa.
Hogy megsiratták azt a tehenkét! a mit még meg sem vettek.
Mihály úr rögtön elhagyá régi állomását családostúl együtt,
szekéren utazott egész Bukarestig (először történt vele életében ez a
méltóság), ott átvéve a család okiratait, birtokába helyezé magát a
roppant uradalomnak, melynek kiterjedéséről azelőtt fogalma sem
volt.
Rumnik mellett volt a családnak egy ősi lakhelye, melybe Mihály
úr bele is költözött. A tisztes ősi ház rozzant volt már és
kényelmetlen, hajdani birtokosai szüntelen az országon kívül lakván s
csak látogatni járva bele; ámde palota volt ez az új örökösnek, ki alig
tudott megszokni szűk fagunyhója után e nagy pajtányi szobákban, s
utóbb is beérte egyik felével, a másik szárnyat üresen hagyva,
minthogy nem tudott vele mit csinálni?
Élete delén át sanyaru munka és nélkülözéshez levén szokva, az
annyira második természetévé vált, hogy milliomos létére sem tudott
jó izüen enni másból, mint a málépogácsából, s ünnep volt nála, ha
puliszka került az asztalra.
Korán kelt és munkásaival együtt versenyt dolgozott, s ha a
bérbe szegődött ködmenek közül, a mit a béresei közt kellett volna
kiosztani, egy-egy megtetszett neki, megtartá magának, a béresnek
pedig oda adta az árát, hogy vegyen másikat.
Csizmája töretlen borjubőr volt, s egy-egy báránybőr süveget
évekig elviselt, s drága ló volt alatta, a melyért ő ötven tallért adott.
Tiszttartóit, kasznárait elcsapogatta egyenként, mert hintóban
jártak s nyusztot és asztrakánt viseltek bekecseiken; betölté
helyeiket béresekkel, kiket maga tanított számadolni.
Felesége meghalván, leányát a szomszéd faluba járatta a
kántorhoz abéczét tanulni gyalog, két hajdu kisérte, hogy a kutyák
az úton meg ne tépjék.
Mikor megnőtt a lányka, a konyha és háztartás gondjai bizattak
reá. Néha a szomszéd faluból átjárt egy fiatal hányiveti bojár, ki
szerette volna a leányt elvenni, s úgy is volt, hogy az apja hozzá
adja.
Ily igények mellett azonban csakhamar oly összegre kezde
szaporodni Mihály úr pénzbirtoka, hogy utóbb maga is elszörnyedt
bele. Hisz ő egy századrészét sem birta elkölteni évenkénti
jövedelmének, s akárhová gondolt, hogy mivé fordítsa a megmaradt
tömeget? nem akadt helyére. Vett már teheneket egész gulya
számra, sertéseket vásált ezerével, de az megint mind pénzzé vált
nála, beruházott tőkéi egy év alatt visszafordultak dús kamatban, és
a jámbor ember kétségbe volt esve, ha e minden kivánságán felül
szaporodó kincshalmazra gondolt, melyet sem elkölteni nem tudott,
sem élére verni nem akart.
Szeretett volna már urat is játszani, csak a pénze fogyjon, de az
sehogy sem ment neki. Mikor palotát akart építtetni, annyira utána
járt, hogy miből, mi úton és ki által lehet olcsóbban építtetni? hogy
alig került neki valamibe; hanem az igaz, hogy nem is lett palota.
Mikor vendégséget adott, úgy ki tudta válogatni a legszegényebb
bojárokat s a mi a lakomához kellett, bor, hús, kenyér, méz és dudás,
annyira kitelt saját tárháza és faluiból, hogy szinte kétségbeesék, ha
arra gondolt, miként és mi úton tudták elődei iszonyú jövedelmeiket
nemcsak elkölteni, hanem még adósságokkal is terhelni? Ez
megfejthetlen problema maradt előtte, s miután sokáig törte azon
fejét, hogy mit kövessen el az örökké rászaporodó pénzzel? végre
csakugyan akadt egy jó gondolatja. Rozzant kastélyának nagy
kiterjedésü kertje saját parancsára be lévén ültetve mindennemű
ritka és gyönyörködtető növényekkel, mint bazsalyikom, levendula,
bárzsing, komló, vadsáfrány és uritökkel, mik felett egy béresből
promovealt kertész viselte a felügyelést, egy esztendőben oly
roppant uritökök termettek ugyanott, mint egy-egy akós hordó, hogy
a szomszédság összecsődült bámulására és a fennemlített hányiveti
bojár százszor megesküdött, hogy ilyen derék tököt maga a török
szultán sem látott soha életében!
Ez adta az eszmét Mihály úrnak. Föltevé magában, hogy elküld
egy tököt a szultánnak ajándékba. Kiválasztá tehát közülök a
legszebbet, a leggömbölyűbbet, szép testszinű héjjal, sötétszinű
csíkokkal átreczézve, tetején turbánalakú sipkával s abba egy kis
lyukat furván, azon keresztül a belét kivájta, s tökmag helyett
megtölté azt valóságos jó vert aranyokkal, s ekép föltétetvén a
legjobbik hat ökrös szekerére, kiválasztá két legokosabb béresét s
szájukba rágva jól: hol, kinek, mit mondjanak? elindítá őket az
uritökkel Stambul felé a magas portához.
Három hét telt bele, míg a szekér Byzanczot elérte.
A jó öreg béres mondván, hogy ajándékot hoz a nagyúr számára,
könnyen bebocsáttaték annak orczája elé s miután megcsókolá a
nagyúr köntöse szélét, levette a tarka pokróczot az ajándékba hozott
tökről, s a magas diván előtt letevé.
A szultán dühbe jött az ajándék láttára.
– Hát disznó vagyok én, te hitetlen kutya, hogy nekem tököt
hozasz?
És rögtön parancsot adott a Kiaja bégnek, hogy vitesse ki előle
mind a tököt, mind az embert, a tököt vágják a földhöz, a hozónak
verjenek száz botot a talpára, a küldőnek pedig vágják le a fejét.
A Kiaja bég úgy cselekedék, kinn az udvaron földhöz csapatta a
tököt s csak elbámult, a mint abból tökmag helyett a fényes
aranyokat látta kihullani; mind a mellett parancsához hiven lefogatá
a szegény bérest s olyan százat veretett talpára, hogy nem adta
volna kétszázért.
Csak azután tért vissza a szultánhoz megjelenteni, hogy a tök
földhöz van csapva, a száz pálcza lefizetve, a selyemzsineg
bepakolva, hanem a tök tele van aranynyal.
A nagyúr orczája e szóra ismét felderüle, mint a mosolygó tavaszi
ég, s visszavétetvén a selyemzsinórt, megparancsolá, hogy mind a
megbotozott béresnek, mind az ajándék-küldő bojárnak a
legpompásabb kaftányokat kell kiszolgáltatni, s őket a nagyúr
legkegyelmesebb szemhunyorításáról biztosítani.
A béresnek volt annyi esze, hogy a kapott czifra öltözetet, a mint
Bukarestbe ért, eladta valami zsibárusnak, hanem az uráét szépen
haza vitte s elbeszélve nagy viszontagságait, átadta neki, a szultán
kegyelem-levelével együtt.
Mihály úr megörült a viszontajándéknak, fölvette a hosszú, sarkig
érő kaftányt, mely finom sötét vörös tibeti kelméből volt készítve, s
átszőve arany és selyem virágokkal, s úgy megrakva a két szélén,
vállain és háta közepén arany sujtással és tenyérnyi paszománynyal,
hogy a posztója alig látszott tőle, a szegletébe pompás arabeszkek, s
más aféle czikornyák voltak csodálatosképen hímezve skófiummal és
mindenféle pillangókkal és drágakövekkel.
Mihály úr egészen más embernek érzé magát e kaftányban. A
szultán neki levelet küldött. A szultán világosan megirta neki, hogy
ezt a kaftányt viselje. Ez tehát parancs, s meglehet, hogy a szultán
ma vagy holnap itt terem, hogy meglássa: valjon viseli-e ő a
kaftányt? s haragudni fog, ha nem lesz rajta. Azt tehát viselni kell
szüntelen.
Ugy de az aranyos kaftány alá nem lehete többé fölvenni a
festett bőr-ködment, sem a szíjas bocskort, sem a bárány-süveget
nem lehetett hozzá föltenni. El kelle tehát küldeni Tergovistba
szabóért, a ki selyem dolmányt, mellényt és himzett harisnyát
készítsen az arany kaftány mellé. Brassóból bogláros övet kelle
hozatni, Ibrailból sarut és szattyán papucsot, Tekusból
nyusztkalpagot kócsagtollal együtt.
Ily ékesen fel levén ruházva, azonban többé nem lehetett a fakó
szekérre ülni, sem az ötven talléros mokány paripára; kelle tehát
Bessarabiából hozatni pompás paripákat s készíttetni Erdélyben
aranyos hintót, s mikor hintó, ló megvolt, azokat meg ismét nem
lehetett a vályog akolba s a veréblakta nádtetejű félszerbe eltenni,
hanem jóra való aklot és szint kellett építtetni kőből. Az pedig ismét
nagyon különös lett volna és igen visszatetsző, ha az akol és
kocsiszin különb lett volna a lakó kastélynál, melynek tarka volt a
teteje a zsindely-foltozástól s kilátszottak a téglái a hol a vakolat
lehullott; nem volt mit tenni mást, mint lerontani a régi kastélyt, s a
legelső pallérra rábizni, hogy építsen a helyére egy újat, olyan szépet
és pompásat, a milyenről csak fogalma lehet.
Igy változott meg a világ rendje egy aranyos kaftány miatt.
A pallér elkészíté a kastélyt, aranyos rácsokkal, tornáczokkal,
kandallós pitvarokkal s tekergő lépcsőkkel, a kertbe üvegházat
rakott, s a házszegletekre kiülő rondellákat, dúczos belvedéreket, a
közepére egy formális tornyot, s belül kifestett mindent zöld erdőkkel
s görbe orrú madarakkal.
Ide már most megint nem lehetett a régi falóczákat s paraszt
pokróczokat berakni, hanem be kelle vásárolni a nagy, fényes,
magas hátú karszékeket, az aranynyal préselt bőrpamlagokat és
oroszlán lábú márvány asztalokat, a minők akkor legjobban divatban
voltak.
A pompás asztalok alá újra levantei szőnyegeknek kellett jönni,
rájok ezüst gyertyatartóknak és billikomoknak, a levantei
szőnyegekre ismét nem gázolhattak a béresek sáros csizmáikkal,
tehát újra tiszttartókat kellett fogadni, a kik csézában járnak, meg
szakácsot és az üvegházhoz kertészt, a ki a sok becses czitromfű és
uritök helyett kaktust és egyiptomi bogáncs-kórókat tenyészszen
cserepekben; s miután szakács és kertész volt, a szép Marinak sem
illett többé a konyhával és kerttel vesződni, a falubeli rectorhoz sem
járhatott többé olvasást tanulni, hanem hozatni kellett neki franczia
nevelőnőt, kitől szép izlést, előkelő modort, himzést, hárfázást
tanuljon. És midőn a szép Mari gyönyörű vonásai, termete, szellemi
mivelődése által százszor kellemesebbekké téve, napról napra
nevelték szeretetreméltóságát, ugyan ki tűrhette volna el, hogy
holmi hányiveti bojár ásitozzék utána a szomszédból, ki csak a
kutyáiról, meg a lovairól tud beszélni, s csupán az ivásban virtuoz?
Biz annak kiadta Mihály úr az utat.
– Majd hát! nem neked való az én leányom. Nem adom senkinek,
ha csak herczeg nem jön érte. Még abban is válogatok. Bosznya
herczegnek nem adom, mert az nekem kicsiny. Adom csak Ghyka
herczegnek; az is megköszönheti, ha megkapja. Több pénzem van,
mint az egész országának, s ha akarnám, megvehetnék minden
házat, a mi Moldaviában építve van, hogy neki nem maradna más,
mint az emberek rajta. Ti tehát az én leányom körül ne ólálkodjatok.
… És mind ezen dolgokat egy aranyos kaftány szülte.
HÁROM SZŰZ.
Ugy lőn, miként Mihály úr előre elgondolá.
Alig húzatott fel az új kastély magas tornya felé a czimeres
zászló, alig futott híre Mária szépségének s az apa millióinak, midőn
elkezde udvara a legelőkelőbb supánok, vajdák és herczegek pompás
kiséretétől és hintaitól csillogni, s miként előre azt is meghatározá,
hogy mind ezen urak közül egyhez sem fogja adni leányát, hanem
bevárja, míg a moldován herczeg maga jön érte, aként megtartá
szilárdul kimondott szavát.
A moldvai uralkodó fejedelem legfényesebb neve mellé igen
nevezetes csomó adósságot is örökölvén s zűrzavaros ügyei, az
örökös tatár-zsarolás, basa-ajándékozás és népelszegényedés miatt
évről-évre bonyodalmasabbá kezdvén lenni, nem sokáig hagyott
magára váratni azon jól meghallott hir után, miszerint Oláhországban
egy szép és szellemdús hajadont tartanak számára, ki férjéhez
romlatlan szivén és ó-nemes czímerén kívül egy pár millióra menő
menyasszonyi hozományt fog vinni.
Fölkerekedvén tehát udvarához tartozó minden boérjaival,
násznagyaival és vőfélyeivel együtt, elment háztűznézni Rumnikba, a
holott is igen jól fogadtatván az apa által, s meg levén elégedve a
menyasszony kellemeivel, azt megkérte, jegyet váltott vele s
elegendő időt hagyván az esküvői előkészületekre, kitűzé azt zöld
farsangra, a husvét utáni hetekre.
Mihály urnak mind ez idő alatt nem volt egyéb gondja, mint hogy
kitelhetőképen kitegyen magáért. Összehivatta a lakodalomra
Moldva, Szerbia és Erdély minden celebritásait s nem restelte
Versaillesból elhozatni XIV. Lajos egyik szakácsát, hogy a lakoma
ételeit elrendezze: «mint fog majd Bethlen Miklós uram csodálkozni,
ha meglátja, hogy nem csak ő járt Franczaországban, hanem más
ember is tudja, hogy szoktak a franczia király asztalára főzni?»
A lakoma napján a jó úr mindenütt volt látható, mindent ő maga
rendezett. Már korán reggel fölvevé aranyos kaftányát, kócsagos
kalpagját, bogláros övét, úgy járt udvaron, tornáczon és termekben
parancsokat osztva, vendégeket fogadva, s a lelke repesett, midőn
udvarát látta megtelni fényesnél fényesebb hintókkal, miket aranyos,
bogláros lovagok kisértek s mikből gyöngyökkel és kösöntyűkkel ékes
uri hölgyeket emelgetének ki ezüst zsinóros hajdúk; a selyem ruhák
úgy suhogtak, a kardok úgy csörömpöltek s e pompás, deli alakok
oly délczegen léptettek végig a tornáczokon, hogy csupa
gyönyörűség volt nézni.
Mihály úr majd ide, majd oda futott, arczán csodálatos keveréke
volt az alázatnak és büszkeségnek. Mindenkit azzal fogadott, hogy
végtelen szerencsésnek érzi magát az által, hogy kegyeskedett őt
szegény lakában meglátogatni; de a hang, melyen mondva volt,
elárulá, miszerint nem hiszi, hogy «szegény» lakánál pompásabbat
hagyott volna valaki otthon.
Majd befutott a menyasszony öltöző teremébe, hol Máriát reggel
óta öltöztették Bécsből hozott frajjai. Nyakára, karjaira gyöngyöket
és kösöntyüket illesztgetett. «Ezt, nem ezt. Ezt a függőt, ezt a
lánczot, ezt az opálköves kötőt. Hát a hajba? hát a nyakra?» Ha azt
mind felrakta volna a szép menyasszony, a mit apja hordott neki,
nem birt volna megmozdulni az ékszerek súlya alatt.
Innen az ebédlőkbe futott a jó úr, hol cselédjei terítettek; öt
hosszú terem volt két soros asztalokkal elrendezve.
– Itt fog ülni a menyasszony! Jobb felől azt a nagy karos széket a
patriarchának! őt illeti ez a hely; emitt balfelől Apafi Mihály uram fog
ülni! Azt a zöld préselt bőrszéket kell neki adni az arany
kerubimokkal; a vőlegény a patriarcha jobbján ül, azt a gömbölyű
támasztalan széket kell neki adni, hogy meg ne vethesse a hátát,
hanem büszkén tartsa magát; amoda Béldi Pál uramnak a felesége
mellé kell teríteni, mert együtt szoktak ülni; nem, nem! Aranka
leányuk is itt lesz, annak kettőjök közé azt a kék bársony széket. Ide
átellenbe egy selyem zófát Ahmed basa és Feriz bég számára, nem
kell nekik se villa, se kés. A diakonusnak azt a festett keményfa
lóczát, mert más letörik alatta, s egy széken el nem fér maga.
Amoda együvé annak a harminczhárom pópának, nem kell közéjük
mást ültetni, mert szégyenleni fognak enni! El ne felejtsetek az ezüst
tálakra virágkoszorukat rakni; Teleki Mihály uram elé különös okoknál
fogva nem kell boros vedret tenni; Ahmed basának pedig sorbethes
csészét kell a kanta mellé tenni, abból iszsza a bort, akkor azt hiszi,
hogy nem vét a Korán ellen. Az asszonyságok elé velenczei kristály
poharakat kell rakni, az uraknak arany billikomokat, a szebbeket
Teleki és Bethlen elé, másoknak a tartósabbakat, mert a falhoz
szokták vágni. A vőlegénynek azt a legkarcsúbbat, hogy baja ne
essék, mert neki mindenkivel kell koczczintani. Igy ni!
Felgyülekeztek már a menyegzői vendégek, csak két családra
vártak még, Apafi és Telekiére, kiket Mihály úr büszkesége
úgyszólván legjobban óhajtott asztalánál látni. Nyugtalanul tekinte ki
mindannyiszor udvarára, a hányszor egy hintó gördülését hallá, s a
határon taraczkok voltak felállítva, hogy a mint meglátják az őrök a
fejedelem hintaját, azonnal adjanak jelt velök.
Végre hallatszott a durrogás. Mihály úr törte magát a kapuhoz,
vendégeit elfogadni, faroltatta az útban álló hintókat, kiabált a
toronyőrökre, hogy mihelyt hintót látnak az úton, trombitáljanak; a
pompás vendégsereg is kicsődült a tornáczra, erkélyekre és
rondellákra a várt vendégeket meglátni, midőn nem sokára két négy
lovas hintó tünt fel a fákkal beszegett úton, melyeket gyalog
csatlósok fogtak kétfelől a lejtőn, hogy fel ne düljenek, utánuk és
mellettük fényes lovasságból álló banderium poroszkált.
Mindjárt megismerték bennök a fejedelem és főtanácsosa hintait
s a trombiták szája be nem állt addig, míg a pompás aranyozású
selyemfüggönyös járművek az udvarra nem hajtattak, a holott
mindjárt a kapubálványnál várakozék a várkastély ura, s maga
sietvén kinyitni a hintó ajtaját, előre levevé nyusztprémes kalpagját;
de elhüledezve tevé azt fel ismét, midőn a hintó kinyilván, abból egy
szakáltalan hetyke fiatal embert lát egyes egyedül kiszállni, s a
fejedelmet nem szemlélheté a kocsiban, hanemha kiszállt volna az
ereszkedőnél, hogy gyalog jőjön le? miként maga Mihály úr szokta
volt, valahányszor kocsin jött haza, félvén a feldüléstől.
A kiugrott ifjú azonban nem sokára felmenté kétségei alól,
bemutatván előtte magát.
– Én Thököli Imre vagyok, kit a fejedelem ő nagysága saját
személye képében küld kegyelmedhez, részt venni az ünnepélyben s
egyúttal kinyilatkoztatni a fölötti sajnálkozását, miszerint
személyesen meg nem jelenhetett, csak őszinte áldáskivánatai által,
miután a fejedelemasszony e napokban Isten kegyelméből jó
reményben lévén, a fejedelem ő nagysága nem érzi magát elég
erősnek kiállani ugyanazon aggodalmakat, melyekre hasonló
körülmények között Ali basa kényszeríté egy időben. Egyébiránt
Istentől minden jót kiván kegyelmednek.
Mihály úr nem tudta, hogy azt mondja-e, hogy «nagyon örülök»,
vagy azt, hogy «nagyon sajnálom» s várakozásteljesen fordult az
utóbb érkező hintó felé, midőn Thököli Imre még egyszer eléállt.
– Még azt is megbizatásom van kegyelmességednek tudtára adni,
miszerint Teleki Mihály uram véletlenül parancsot kapván az összes
erdélyi hadakkal kiindulni Magyarországra, maga helyett Flóra
leányát küldé kegyelmed tiszteletére, igen sajnálván, hogy a vett
parancs miatt, mely sem kifogást, sem haladékot nem tűr, kénytelen
magát azon gyönyörűségtől megfosztani, hogy kegyelmeddel kezet
szorítván, egy buzgó atyafiságos csókot váltson; hanem, ha kegyed
rám meri bizni, adja át nekem a kézszorítást és csókot, én átadom
kegyelmednek az övét s visszaviszem a kegyelmedét neki.
A jó öreg úr egészen elragadtatva az ifjúnak e patriarchalis ötlete
által, elfeledé a savanyú képet, melyet a fejedelem tiszteletére
tartogatott s nyalábra kapva a karcsú leventét, úgy össze-
visszacsókolá, hogy alig szabadult tőle, azután pedig annak hír
szerinti jegyesét Teleki Flórát az egyik, Imrét a másik karjára fűzve,
úgy vezeté őket fel vendégei közé, s csaknem legelső pár voltak ők,
kiknek leányát bemutatá, egész menyasszonyi díszében.
Gyönyörű karcsú barna lányka volt a szép Mária, arcza halovány
mint a liliom, szemei félénken lesütve, midőn társnéi karján,
ünnepien felpiperézve, a váró sokaság elé lépett, gazdag
bársonyfekete fürtei szépségét emelék a közé fonott igaz
gyöngyfüzérek, termete, melynek formáit sejteni engedé a pompás
keleties öltözet, a nájászok szépségei közé beillett volna tökéletes
idomaival, s oly jól illett szemérmes tekintetéhez, félénk
mozdulataihoz e délczeg alak, e büszke szemöldök, ez élvezet-igérő
ajkak.
A vendég-sereg közt állt egy férfi elvegyülve a többi közé; egy
valódi antinousi alak, magas, erőteljes termetű, széles vállak,
domború mell, emelt fő, melyről hosszú, gazdag, sötét hajsátor
omolt alá a vállakra, két sötét és sürű szemöld s a szénfekete bajusz
erős határozott kifejezést adtak sötét olajszin arczának, mely arcz-
élben feltünő római jelleget hordott magán.
Ez a vőlegény.
Midön az örömapa bevezeti vendégei elé az ujon érkező párt,
első dolga őket Ghyka herczegnek bemutatni, nem mulasztván el
elbeszélni, mily módosan teljesíté az ifjú gróf megbizatását a csókok
átadásával, mi is közderülettel fogadtatván, sajátszerű merész
gondolatot költött a szeles ifjúban.
Míg mindenkitől öleltetve, úgy szólván kézről kézre adaték,
egyszerre a remegő menyasszony elé járult, ki alig mert egy
pillantást lopva vetni reá, s a leglovagiasabb franczia courtoisie
modorában üdvözölvén őt, negédes, sőt csaknem büszke mosolylyal
fordula a körülállókhoz, a mit csak egyedül neki bocsátának meg,
szeretetre méltó kaczérsággal mondva:
– Miután ünnepélyesen hitelesíttetém, mint csókok postája, úgy
hiszem, teljes jogot érezhetek magamban azon testvéri csókok
átadására, melyeket Telekiné és Apafiné asszonyságok a bájos
menyasszony számára küldének általam.
S mielőtt valaki végig gondolhatott volna szavain, a szép ifjú
azzal az elragadó impertinentiával, melylyel ő férfiakat és nőket
hódítani szokott, oda hajlék a bájos menyasszonyhoz, s míg annak
arcza egy pillanat alatt biborvörösre gyuladt, márványtiszta
homlokára egy hangtalan csókot nyomott. És ezt annyi kellemmel,
oly gyöngéd pajkossággal tevé, hogy a legszigorúbb arczokon sem
idéze elő egyebet egy könnyű mosolygásnál.
S még azzal, mintha tette egy részét a tisztelet, másikát a tréfa
rovására akarná hajtani, nemes büszkeséggel fordult a társasághoz,
túlbecsült önbizalmat vegyítve arcza mosolyába.
– Reménylem, úgy monda, Teleki Flóra kezét karjába öltve,
miszerint menyasszonyom jelenléte elég biztosítéka azon
tiszteletnek, melylyel küldetésem e pontjának megfeleltem.
A vendégek erre általánosan felkaczagtak. Imrének sok
bohóságot meg lehete és kell bocsátani, mert hisz ő azokat oly
szeretetreméltó módon tudta elkövetni, hogy lehetetlen volt rá
haragudni.
De két hölgy arcza mégis pirulva maradt. Az egyik Máriáé, a
másik Flóráé. Nők egy dologban nem értik a tréfát.
A vőlegény félmosolylyal, félboszúval monda, megsimítva szép
bajuszát:
– Adta fia, hamarább megcsókolta a menyasszonyomat, mint
saját magam.
Hanem azután csakhamar közbejöttek a tisztelendő urak,
megszólaltak a harangok, a násznagyok, nyoszolyók és vőfélyek
lefoglaltak menyasszonyt és vőlegényt, elkezdődött a szertartás s
nem gondolt senki a tréfás eseményre többé.
Kivéve talán két hölgyet, kiknek szivében szúrást ejtett a
könnyelmű tréfa; egyikében a rózsa tövisével, másikéban a kigyó
fulánkjával.
***
Azon másfél óra alatt mig az esketési szertartások a főtisztelendő
patriarcha, a nagytiszteletű archidiaconus és a tisztelendő
harminczhárom pópa és ugyanannyi előénekes közreműködése
mellett a legnagyobb áhitat és ünnepélyesség közben véghez
mennek, maradjunk mi az előteremben, s kövessük el azt az
indiscretiót, hogy tudjuk meg, mit tartalmaz ama két jól lepecsételt
levél, melyet épen most hozott nagy sietve Brassóból egy sebes
hírnök Thököli Imre számára s szörnyen dobog a lábával, midőn azt
mondják neki, hogy várjon, mert a gróf a templomban van.
Egyike ezen leveleknek Teleki Mihálytól jő s tartalma körülbelül ez
lehet:
«Kedves fiam uram. Minden dolgaink a legjobb rendben vannak.
E napokban nyolcz ezer főnyi rendes hadaink Gyulafehérvárt
elhagyván, Déva alatt bevárják Amhát basa seregeit s azonnal
megindulnak a Kiuprili táborával egyesülni. A harcz többé
visszavonhatatlan, s ezúttal is Erdélynek jutand a dicsőség,
előlvihetni a zászlót. Ne sokáig időzzön kegyelmed, hanem
iparkodjék bennünket utólérni. Fölösleges lenne kegyelmedet arra
figyelmeztetni, hogy Flóra leányomra vigyázzon az úton. Az Isten
áldja meg kegyelmességedet. Datum Albæ Juliæ stb.»
«P. S. A fejedelemasszony ugyanitt várja Istentől való
megáldatását, a fejedelem úr ő nagysága ma végzett be egy igen
szép értekezést az üstökösök háromszáz esztendős útjairól. Datum,
ut supra. T. M.»
A második levél finom női kéz irása volt, meglátszott rajta, hogy
az a kéz nem csak a tollat, hanem a kardot is megtudta nyomni.
Tartalma így hangzott:
É
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com