Subpy เป็นไลบรารีสำหรับการกำหนดชุดย่อยของภาษา Python และการสืบค้น ASTS สำหรับคุณสมบัติระดับภาษาที่ระบุเป็นชุดของคุณสมบัติ
หลายโครงการมีจุดมุ่งหมายที่จะทำงานกับชุดย่อยเฉพาะของ Python ที่คล้อยตาม การวิเคราะห์แบบคงที่ และ การอนุมานประเภท SubPY เป็นเพียงไลบรารีการวิเคราะห์แบบคงที่สำหรับการตรวจสอบชุดย่อยที่มีความตั้งใจที่จะให้การรายงานข้อผิดพลาดที่ให้ข้อมูลมากขึ้นสำหรับผู้ใช้ปลายทาง
อินพุตไปยัง checker สามารถเป็นโมดูลฟังก์ชันหรือซอร์สโค้ดเป็นสตริง มันส่งคืนพจนานุกรมของรายการคีย์โดยรหัสการแจงนับ feature และค่าที่มีหมายเลขบรรทัดที่ตรวจพบคุณลักษณะ
> >> 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 ]} การจับคู่รหัสคุณสมบัติกับคีย์ในพจนานุกรมเราเห็นข้อมูลที่บอกเราว่าในโมดูล io ในไลบรารีมาตรฐาน:
ตัวอย่างการใช้ตัวตรวจสอบระดับฟังก์ชั่น:
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!' ตัวอย่างเช่นหากเราต้องการยกเว้นการใช้ ความเข้าใจในรายการ และ ตั้งค่าความเข้าใจ เราสามารถกำหนดชุดย่อยของ Python ที่ไม่รวมคุณสมบัติเหล่านี้
MyPythonSubset = FullPython - { ListComp , SetComp } คำสั่ง validator สามารถใช้เพื่อเพิ่มเมื่อตรวจพบคุณสมบัติที่ไม่ได้รับการสนับสนุนในแหล่งที่มา ตัวอย่างเช่นเราจะสนับสนุนชุดคุณสมบัติ Python ยกเว้นความเข้าใจรายการและตั้งค่าความเข้าใจ
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 สามารถแยกวิเคราะห์ห้องสมุดมาตรฐานทั้งหมดและสามารถใช้ในการสอบถามข้อเท็จจริงเรื่องเล็กน้อยที่น่าสนใจ
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
หรือเพื่อสอบถามสำหรับการดำเนินการรหัสที่ไม่ปลอดภัย:
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
คุณสมบัติที่รองรับในปัจจุบันคือการแจกแจงพร้อมค่าที่ได้รับด้านล่าง:
เพื่อทดสอบการทำงาน:
$ python -m unittest discover subpy/tests ตรรกะหลักมีอยู่ในตัวเองใน features.py และ validate.py ซึ่งจะทำหน้าที่เป็นโมดูลแบบสแตนด์อโลนโดยไม่มีแพ็คเกจย่อยซึ่งรวมถึงชุดทดสอบ ไม่มีการพึ่งพาอื่นนอกเหนือจากห้องสมุดมาตรฐาน
ลิขสิทธิ์ (c) 2013, Continuum Analytics, Inc. สงวนลิขสิทธิ์
อนุญาตให้แจกจ่ายและใช้งานในรูปแบบแหล่งที่มาและไบนารีโดยมีหรือไม่มีการแก้ไขได้รับอนุญาตหากเป็นไปตามเงื่อนไขต่อไปนี้:
การแจกจ่ายซ้ำของซอร์สโค้ดจะต้องรักษาประกาศลิขสิทธิ์ข้างต้นรายการเงื่อนไขและข้อจำกัดความรับผิดชอบต่อไปนี้
การแจกจ่ายซ้ำในรูปแบบไบนารีจะต้องทำซ้ำประกาศลิขสิทธิ์ข้างต้นรายการเงื่อนไขและข้อจำกัดความรับผิดชอบต่อไปนี้ในเอกสารและ/หรือวัสดุอื่น ๆ ที่ได้รับการแจกจ่าย ซอฟต์แวร์นี้จัดทำโดยผู้ถือลิขสิทธิ์และผู้มีส่วนร่วม "ตามที่เป็นอยู่" และการรับประกันโดยชัดแจ้งหรือโดยนัยใด ๆ รวมถึง แต่ไม่ จำกัด เพียงการรับประกันโดยนัยของความสามารถในการค้าและความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ไม่ว่าในกรณีใดผู้ถือลิขสิทธิ์หรือผู้มีส่วนร่วมจะต้องรับผิดชอบต่อความเสียหายทางตรงทางอ้อม, โดยบังเอิญ, พิเศษ, เป็นแบบอย่าง, หรือความเสียหายที่ตามมา (รวมถึง แต่ไม่ จำกัด เพียงการจัดหาสินค้าทดแทนหรือบริการการสูญเสียข้อมูลหรือผลกำไรหรือการหยุดชะงักของธุรกิจ แนะนำถึงความเป็นไปได้ของความเสียหายดังกล่าว