Subpy adalah perpustakaan untuk mendefinisikan himpunan bagian dari bahasa Python dan meminta AST untuk properti tingkat bahasa yang ditentukan sebagai set fitur.
Banyak proyek bertujuan untuk bekerja dengan himpunan bagian spesifik Python yang setuju dengan analisis statis dan tipe inferensi , subpy hanyalah perpustakaan analisis statis untuk memeriksa himpunan bagian dengan maksud memberikan pelaporan kesalahan yang lebih informatif untuk pengguna akhir.
Input ke checker dapat berupa modul, fungsi atau kode sumber sebagai string. Ini mengembalikan kamus daftar yang dikunci oleh kode enumerasi feature dan nilai -nilai dengan nomor baris tempat fitur terdeteksi.
> >> 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 ]} Mencocokkan kode fitur dengan kunci di kamus kita melihat informasi yang memberi tahu kita bahwa dalam modul io di perpustakaan standar:
Contoh Menggunakan Pemeriksa Level Fungsi:
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!' Misalnya jika kami ingin mengecualikan penggunaan daftar komprehension dan menetapkan komprehension, kami dapat mendefinisikan subset Python yang mengecualikan fitur -fitur ini.
MyPythonSubset = FullPython - { ListComp , SetComp } Perintah validator dapat digunakan untuk menaikkan ketika fitur yang tidak didukung terdeteksi di sumber yang diberikan. Misalnya, kami akan mendukung set fitur Python yang tidak termasuk dalam daftar pemahaman dan mengatur pemahaman.
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 saat ini dapat menguraikan seluruh perpustakaan standar dan dapat digunakan untuk menanyakan beberapa fakta sepele yang menarik.
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
Atau untuk menanyakan eksekusi kode yang berpotensi tidak aman:
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
Fitur yang saat ini didukung adalah enumerasi dengan nilai -nilai yang diberikan di bawah ini:
Untuk menguji coba:
$ python -m unittest discover subpy/tests Logika inti mandiri dalam features.py dan validate.py yang akan berfungsi sebagai modul mandiri tanpa paket subpi, yang mencakup suite tes. Tidak ada dependensi selain perpustakaan standar.
Hak Cipta (C) 2013, Continuum Analytics, Inc. Semua hak dilindungi undang -undang.
Redistribusi dan penggunaan dalam bentuk sumber dan biner, dengan atau tanpa modifikasi, diizinkan dengan ketentuan bahwa kondisi berikut dipenuhi:
Redistribusi kode sumber harus mempertahankan pemberitahuan hak cipta di atas, daftar kondisi ini dan penafian berikut.
Redistribusi dalam bentuk biner harus mereproduksi pemberitahuan hak cipta di atas, daftar kondisi ini dan penafian berikut dalam dokumentasi dan/atau bahan lain yang disediakan dengan distribusi. Perangkat lunak ini disediakan oleh pemegang hak cipta dan kontributor "sebagaimana adanya" dan setiap jaminan tersirat atau tersirat, termasuk, tetapi tidak terbatas pada, jaminan tersirat dari dapat diperjualbelikan dan kebugaran untuk tujuan tertentu ditolak. Dalam hal apa pun pemegang atau kontributor hak cipta tidak akan bertanggung jawab atas kerusakan langsung, tidak langsung, insidental, khusus, teladan, atau konsekuensial (termasuk, tetapi tidak terbatas pada, pengadaan barang atau layanan pengganti; hilang Disarankan tentang kemungkinan kerusakan tersebut.