 [det]py_call(+Call)
[det]py_call(+Call)
Arguments to Python functions use the Python conventions. Both
positional and keyword arguments are supported. Keyword 
arguments are written as Name = Value and must appear after 
the positional arguments.
Below are some examples.
% call a built-in
?- py_call(print("Hello World!\n")).
true.
% call a built-in (alternative)
?- py_call(builtins:print("Hello World!\n")).
true.
% call function in a module
?- py_call(sys:getsizeof([1,2,3]), Size).
Size = 80.
% call function on an attribute of a module
?- py_call(sys:path:append("/home/bob/janus")).
true
% get attribute from a module
?- py_call(sys:path, Path)
Path = ["dir1", "dir2", ...]
Given a class in a file dog.py such as the following 
example from the Python documentation
class Dog:
    tricks = []
    def __init__(self, name):
        self.name = name
    def add_trick(self, trick):
        self.tricks.append(trick)
We can interact with this class as below. Note that $Doc 
in the SWI-Prolog toplevel refers to the last toplevel binding for the 
variable Dog.
?- py_call(dog:'Dog'("Fido"), Dog).
Dog = <py_Dog>(0x7f095c9d02e0).
?- py_call($Dog:add_trick("roll_over")).
Dog = <py_Dog>(0x7f095c9d02e0).
?- py_call($Dog:tricks, Tricks).
Dog = <py_Dog>(0x7f095c9d02e0),
Tricks = ["roll_over"]
If the principal term of the first argument is not Target:Func, 
The argument is evaluated as the initial target, i.e., it must be an 
object reference or a module. For example:
?- py_call(dog:'Dog'("Fido"), Dog),
   py_call(Dog, X).
   Dog = X, X = <py_Dog>(0x7fa8cbd12050).
?- py_call(sys, S).
   S = <py_module>(0x7fa8cd582390).
Options processed:
true (default false), translate the return 
as a Python object reference. Some objects are always translated 
to Prolog, regardless of this flag. These are the Python constants
None, True and False as well as 
instances of the Python base classes int, float, str 
or tuple. Instances of sub classes of these base classes 
are controlled by this option.atom (default), translate a Python 
String into a Prolog atom. If Type is string, 
translate into a Prolog string. Strings are more efficient if they are 
short lived.dict (default) to map a Python dict to a SWI-Prolog 
dict if all keys can be represented. If {} or not all keys 
can be represented, Return is unified to a term {k:v, ...} 
or py({}) if the Python dict is empty.py_string_as and py_dict_as 
are SWI-Prolog specific, where SWI-Prolog Janus represents Python 
strings as atoms as required by the PIP and it represents Python dicts 
by default as SWI-Prolog dicts. The predicates values/3,
keys/2, etc. provide portable access 
to the data in the dict.