Subpy ist eine Bibliothek zur Definition von Teilmengen der Python-Sprache und zur Abfragetation von ASTS für Eigenschaften auf Sprachebene, die als Merkmalssätze angegeben sind.
Viele Projekte zielen darauf ab, mit bestimmten Untergruppen von Python zusammenzuarbeiten, die für statische Analysen und Typinferenz zugänglich sind.
Die Eingabe in den checker kann entweder ein Modul, eine Funktion oder ein Quellcode als Zeichenfolge sein. Es gibt ein Wörterbuch mit Listen zurück, die vom feature -Aufzählungscode und den Werten mit den Zeilennummern, in denen die Funktion erkannt wird, gekennzeichnet ist.
> >> from subpy import checker
> >> import io
> >> print checker ( io )
{ 3 : [ 98 ],
5 : [ 78 , 81 , 84 , 87 ],
9 : [ 78 , 81 , 84 , 87 ],
10 : [ 81 , 84 , 87 ],
32 : [ 92 , 96 ],
34 : [ 79 ]} Übereinstimmung mit den Feature -Codes mit den Schlüssel im Wörterbuch sehen wir die Informationen, die uns im io -Modul in der Standardbibliothek erfahren:
Ein Beispiel unter Verwendung des Funktionsniveausprüfers:
from subpy import checker
from subpy . features import ListComp
def example1 ():
return [ x ** 2 for x in range ( 25 )]
def example2 ():
return 'hello'
features = checker ( example1 )
if ListComp in features :
print 'You used a list comprehension on lines %r' % ( features [ ListComp ])
features = checker ( example2 )
if ListComp not in features :
print 'You did not use any list comprehensions!' Wenn wir beispielsweise die Verwendung von Listen -Verständnissen ausschließen und Verständnisse festlegen möchten, können wir eine Untergruppe von Python definieren, die diese Funktionen ausschließt.
MyPythonSubset = FullPython - { ListComp , SetComp } Der Befehl validator kann verwendet werden, um zu erhöhen, wenn nicht unterstützte Funktionen in der angegebenen Quelle erkannt werden. Zum Beispiel unterstützen wir den Python -Funktionssatz mit Ausnahme von List -Verständnissen und Set -Set -Verständnis.
from subpy import validator , FullPython , FeatureNotSupported
from subpy . features import ListComp , SetComp
def example ():
return [ x ** 2 for x in range ( 25 )]
my_features = FullPython - { ListComp , SetComp }
validator ( example , features = my_features ) File "<stdin>" , line 2
return [ x ** 2 for x in range ( 25 )]
^
subpy . validate . FeatureNotSupported : ListCompSubpy ist derzeit in der Lage, die gesamte Standardbibliothek zu analysieren, und kann verwendet werden, um einige interessante Trivia -Fakten abzufragen.
from subpy import detect
from subpy . stdlib import libraries
from subpy . features import Metaclasses , MInheritance , Exec
import importlib
print ( 'Libraries with Multiple Inheritance and Metaclasses:' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Metaclasses in features and MInheritance in features :
print ( lib ) Libraries with Multiple Inheritance and Metaclasses:
io
Oder nach einer potenziell unsicheren Codeausführung abfragen:
print ( 'Libraries with Exec' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Exec in features :
print ( lib ) Libraries with Exec
ihooks
site
cgi
rexec
Bastion
imputil
trace
timeit
cProfile
doctest
code
bdb
runpy
profile
collections
Derzeit unterstützte Funktionen sind eine Aufzählung mit den unten angegebenen Werten:
Zum Testen von Lauf:
$ python -m unittest discover subpy/tests Die Kernlogik ist validate.py den features.py . Es gibt keine anderen Abhängigkeiten als die Standardbibliothek.
Copyright (C) 2013, Continuum Analytics, Inc. Alle Rechte vorbehalten.
Umverteilung und Verwendung in Quellen- und Binärformen mit oder ohne Modifikation sind zulässig, sofern die folgenden Bedingungen erfüllt sind:
Umverteilungen des Quellcode müssen die oben genannte Copyright -Mitteilung, diese Liste der Bedingungen und den folgenden Haftungsausschluss behalten.
Umverteilungen in binärer Form müssen die oben genannte Copyright -Mitteilung, diese Liste der Bedingungen und den folgenden Haftungsausschluss in der Dokumentation und/oder anderen mit der Verteilung bereitgestellten Materialien reproduzieren. Diese Software wird von den Inhabern und Mitwirkenden des Urheberrechts "wie sie" bereitgestellt, und alle ausdrücklichen oder impliziten Garantien, einschließlich, aber nicht beschränkt auf die impliziten Garantien für Handelsfähigkeit und Eignung für einen bestimmten Zweck, werden abgelehnt. In keinem Fall haftet der Urheberrechtsinhaber oder die Mitwirkenden für direkte, indirekte, zufällige, besondere, beispielhafte oder Folgeschäden (einschließlich, aber nicht beschränkt auf die Beschaffung von Ersatzgütern oder -dienstleistungen; Verlust des Verlusts des Verwendungsverlusts, Daten oder Gewinne; Gewinne oder geschäftliche Unterbrechung). Beraten über die Möglichkeit eines solchen Schadens.