Python Questions

Daniel Duffy

C++ author, trainer
I am interested in Python design issues. Any good books on Design Patterns in Python?
I am also looking for a precise/compact treatment of how Python does the Functional Programming model.

Thanks!

@pingu
@APalley
 
Last edited:

vertigo

Member
I am looking for books on Numpy and Scipy, with focus on the numerical algorithms and background. I am not interested in having to wade in syntax before getting to these topics.

Any suggestions? Thx!
some good books on python that focus on mathematics

amit saha - doing math with python
yahya osais - computer simulation
jose garrido - computational models with python
jose unpingco - python for probability, statistics and machine learning
anything written by yves hilpsich (e.g., python for finance - analyze big financial data)
fabio nelli - python data analytics
jaan kiusalaas - numerical methods in engineering with python
ivan idris - numpy cookbook
 

Daniel Duffy

C++ author, trainer
some good books on python that focus on mathematics

amit saha - doing math with python
yahya osais - computer simulation
jose garrido - computational models with python
jose unpingco - python for probability, statistics and machine learning
anything written by yves hilpsich (e.g., python for finance - analyze big financial data)
fabio nelli - python data analytics
jaan kiusalaas - numerical methods in engineering with python
ivan idris - numpy cookbook
I had a look at the contents; the price spread is $[39,118]. The price seems to be a monotonic function on how fancy the title seems to be.

A general remark/question; is it necessary to devote the first X chapter to basic stuff. Can we not just assume stuf like variables, loops etc.?
 

Daniel Duffy

C++ author, trainer
How about
1. "Python for Option Pricing (analytical, binomial, PDE, SDE, MC etc.)". Build on all those lovely libraries.
2. "42"
3. "Creating Object and Functional Programming Applications in Python A Design Patterns Approach" with focus the stuff in 1.
 

Daniel Duffy

C++ author, trainer
Stupid question:
I use VS2017 and I have all Python libraries installed, including anaconda etc.

I want to run anaconda navigator but

1. I don't see it on my desktop
2. I don't know how to run it from VS2017 (I don't even know if it is even possible)

Any ideas? Thanks!

//
Solved.
 
Last edited:

Daniel Duffy

C++ author, trainer
This code does not build because it cannot find pyconfig.h
Any ideas (Visual Studio 2017 and Python 3.6)?

Code:
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>

char const* greet()
{
   return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}
 
Numerical Python by Robert Johansson. It covers a broad range of numerical methods from ODE, PDE to optimization, probability, statistics, data science.

I am looking for books on Numpy and Scipy, with focus on the numerical algorithms and background. I am not interested in having to wade in syntax before getting to these topics.

Any suggestions? Thx!
 
Last edited:

Daniel Duffy

C++ author, trainer
Python does have its own view of what private attributes/member data are..

Code:
class PointTest: 
# Counterexample: class with "private" attributes
    def __init__(self,x=-10, y=0): #default values
        self.move(x,y)

    def move(self, x, y):   
        self._x = x
        self._y = y
        self.__x = x
        self.__y = y

    def printI(self):
         print (self._x, self._y)
 
    def printII(self):
         print (self.__x, self.__y)

pp = PointTest(1,2)
pp._x = -1; pp._y = -2
print("Private in name only? (PINO)")
print(pp._x); print(pp._y); #-1, -2
#print(pp.__x); print(pp.__y); #AttributeError

pp.printI() #(-1,-2)
pp.printII() #(1,2)
 

Daniel Duffy

C++ author, trainer
Is this a bug in Python?
(in fairness, using 'range' in 3 different ways is real bad programming style)

Code:
import pandas as pd
from pandas import datetime, period_range

#compiles
#myRange = pd.period_range('2000-01-01', periods=12, freq='T')
#ts  = pd.Series(range(12), index=myRange)

#NOT compile
range = pd.period_range('2000-01-01', periods=12, freq='T')
ts  = pd.Series(range(12), index=range)

ts.index = ts.index.astype('datetime64[ns]')
data_higher_freq = ts.resample('5T').sum()
 

pingu

Well-Known Member
You are redefining range in line 9. So in line 10 when you call range(12) now you are trying to call the PeriodIndex range, not the function range. That's why it fails.
 

Daniel Duffy

C++ author, trainer
'range' is ambiguous. The issue can be resolved if we could put the function range() in a namespace (like std::range()), which is better programming practice. But I don't know if this I possible.
Plan B: call it range1 and be done with it.

Fair enough.
 

Daniel Duffy

C++ author, trainer
Even this doesn't compile (BTW I am trying to break the compiler). I am accidentally or deliberately overriding what is in essence an (undocumented) Python keyword 'range'.

Code:
range = 12
range1 = pd.date_range('2000-01-01', periods=12, freq='T')
ts  = pd.Series(range(12), index=range1)
 
Last edited:

Daniel Duffy

C++ author, trainer
Even more interesting I accidentally had a range() function and this is the one that resample() sees. Ouch
Very bad.

Code:
def range(i):
    print ("range")
    return 1/0
 

longgamma

Member
C++ Student
Even this doesn't compile (BTW I am trying to break the compiler). I am accidentally or deliberately overriding what is in essence an (undocumented) Python keyword 'range'.

Code:
range = 12
range1 = pd.date_range('2000-01-01', periods=12, freq='T')
ts  = pd.Series(range(12), index=range1)
range in Python is a generator object actually. So, its defined as range(start,stop=Null,step=Null) and yields start+step*index when its iterated over.
What helped me from moving from C++ to Python was this book (first two chapters) Data Structures and Algorithms in Python: Amazon.in: Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser: Books

Its not a keyword like lambda
 

pingu

Well-Known Member
Even this doesn't compile (BTW I am trying to break the compiler). I am accidentally or deliberately overriding what is in essence an (undocumented) Python keyword 'range'.

Code:
range = 12
range1 = pd.date_range('2000-01-01', periods=12, freq='T')
ts  = pd.Series(range(12), index=range1)
again, you are re-defining what range is. Python allows you to do that. Functions are first class citizens.
 

pingu

Well-Known Member
Even this doesn't compile (BTW I am trying to break the compiler). I am accidentally or deliberately overriding what is in essence an (undocumented) Python keyword 'range'.

Code:
range = 12
range1 = pd.date_range('2000-01-01', periods=12, freq='T')
ts  = pd.Series(range(12), index=range1)
This is not an undocumented keyword. It's a library function and you are allowed in python to do rename/re-define anything that is not a reserved keyword. Here is the list of keywords 2. Lexical analysis — Python 3.8.0 documentation

This is very well documented. You need to learn the standard library first.
 
Top