ื”ื ืชื™ื‘ ืœื‘ื“ื™ืงืช ืกื•ื’ 4 ืžื™ืœื™ื•ืŸ ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ Python. ื—ืœืง 1

ื”ื™ื•ื ืื ื• ืžื‘ื™ืื™ื ืœื™ื“ื™ืขืชื›ื ืืช ื”ื—ืœืง ื”ืจืืฉื•ืŸ ืฉืœ ื”ืชืจื’ื•ื ืฉืœ ื”ื—ื•ืžืจ ืขืœ ื”ืื•ืคืŸ ืฉื‘ื• ื“ืจื•ืคื‘ื•ืงืก ืžืชืžื•ื“ื“ืช ืขื ื‘ืงืจืช ืกื•ื’ื™ื ืฉืœ ืงื•ื“ Python.

ื”ื ืชื™ื‘ ืœื‘ื“ื™ืงืช ืกื•ื’ 4 ืžื™ืœื™ื•ืŸ ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ Python. ื—ืœืง 1

Dropbox ื›ื•ืชื‘ ื”ืจื‘ื” ื‘-Python. ื–ื•ื”ื™ ืฉืคื” ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ื” ื‘ืื•ืคืŸ ื ืจื—ื‘ ื‘ื™ื•ืชืจ, ื”ืŸ ืขื‘ื•ืจ ืฉื™ืจื•ืชื™ ืงืฆื” ื•ื”ืŸ ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ ืœืงื•ื— ืฉื•ืœื—ื ื™ื™ื. ืื ื—ื ื• ื’ื ืžืฉืชืžืฉื™ื ื”ืจื‘ื” ื‘-Go, TypeScript ื•-Rust, ืื‘ืœ Python ื”ื™ื ื”ืฉืคื” ื”ืขื™ืงืจื™ืช ืฉืœื ื•. ื‘ื”ืชื—ืฉื‘ ื‘ืงื ื” ื”ืžื™ื“ื” ืฉืœื ื•, ื•ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ืžื™ืœื™ื•ื ื™ ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ Python, ื”ืชื‘ืจืจ ืฉื”ื”ืงืœื“ื” ื”ื“ื™ื ืžื™ืช ืฉืœ ืงื•ื“ ื›ื–ื” ืกื™ื‘ืš ืืช ื”ื”ื‘ื ื” ืฉืœื• ืฉืœื ืœืฆื•ืจืš ื•ื”ื—ืœื” ืœื”ืฉืคื™ืข ื‘ืื•ืคืŸ ืจืฆื™ื ื™ ืขืœ ืคืจื™ื•ืŸ ื”ืขื‘ื•ื“ื”. ื›ื“ื™ ืœื”ืงืœ ืขืœ ื‘ืขื™ื” ื–ื•, ื”ืชื—ืœื ื• ืœื”ืขื‘ื™ืจ ื‘ื”ื“ืจื’ื” ืืช ื”ืงื•ื“ ืฉืœื ื• ืœื‘ื“ื™ืงืช ืกื•ื’ ืกื˜ื˜ื™ ื‘ืืžืฆืขื•ืช mypy. ื–ื•ื”ื™ ื›ื ืจืื” ืžืขืจื›ืช ื”ื‘ื“ื™ืงื” ื”ืขืฆืžืื™ืช ื”ืคื•ืคื•ืœืจื™ืช ื‘ื™ื•ืชืจ ืขื‘ื•ืจ Python. Mypy ื”ื•ื ืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื—, ื”ืžืคืชื—ื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœื• ืขื•ื‘ื“ื™ื ื‘ื“ืจื•ืคื‘ื•ืงืก.

Dropbox ื”ื™ื™ืชื” ืื—ืช ื”ื—ื‘ืจื•ืช ื”ืจืืฉื•ื ื•ืช ืฉื”ื˜ืžื™ืขื• ื‘ื“ื™ืงืช ืกื•ื’ื™ื ืกื˜ื˜ื™ืช ื‘ืงื•ื“ Python ื‘ืงื ื” ืžื™ื“ื” ื–ื”. Mypy ืžืฉืžืฉ ื‘ืืœืคื™ ืคืจื•ื™ืงื˜ื™ื ื‘ื™ืžื™ื ืืœื”. ื”ื›ืœื™ ื”ื–ื” ืื™ื ืกืคื•ืจ ืคืขืžื™ื, ื›ืžื• ืฉืื•ืžืจื™ื, "ื ื•ืกื” ื‘ืงืจื‘". ืขืฉื™ื ื• ื“ืจืš ืืจื•ื›ื” ื›ื“ื™ ืœื”ื’ื™ืข ืœืžืงื•ื ื‘ื• ืื ื• ื ืžืฆืื™ื ื›ืขืช. ืœืื•ืจืš ื”ื“ืจืš, ื”ื™ื• ื”ืจื‘ื” ื”ืชื—ื™ื™ื‘ื•ื™ื•ืช ืœื ืžื•ืฆืœื—ื•ืช ื•ื ื™ืกื•ื™ื™ื ื›ื•ืฉืœื™ื. ืคื•ืกื˜ ื–ื” ืžื›ืกื” ืืช ื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืœ ื‘ื“ื™ืงืช ืกื•ื’ื™ื ืกื˜ื˜ื™ื™ื ื‘-Python, ืžื”ื”ืชื—ืœื” ื”ืงืฉื” ืฉืœื” ื›ื—ืœืง ืžืคืจื•ื™ืงื˜ ื”ืžื—ืงืจ ืฉืœื™, ื•ืขื“ ื”ื™ื•ื, ื›ืืฉืจ ื‘ื“ื™ืงืช ืกื•ื’ื™ื ื•ืจืžื–ื™ื ืœืกื•ื’ ื”ืคื›ื• ืœื“ื‘ืจ ืฉื‘ืฉื’ืจื” ืขื‘ื•ืจ ืื™ื ืกืคื•ืจ ืžืคืชื—ื™ื ืฉื›ื•ืชื‘ื™ื ื‘-Python. ืžื ื’ื ื•ื ื™ื ืืœื” ื ืชืžื›ื™ื ื›ืขืช ืขืœ ื™ื“ื™ ื›ืœื™ื ืจื‘ื™ื ื›ื’ื•ืŸ IDEs ื•ืžื ืชื—ื™ ืงื•ื“.

โ†’ ืงืจื ืืช ื”ื—ืœืง ื”ืฉื ื™

ืžื“ื•ืข ื™ืฉ ืฆื•ืจืš ื‘ื‘ื“ื™ืงืช ืกื•ื’?

ืื ืื™ ืคืขื ื”ืฉืชืžืฉืช ื‘-Python ืžื•ืงืœื“ืช ื“ื™ื ืžื™ืช, ืื•ืœื™ ื™ืฉ ืœืš ืงืฆืช ื‘ืœื‘ื•ืœ ืžื“ื•ืข ื™ืฉ ื›ืœ ื›ืš ืžื”ื•ืžื” ืกื‘ื™ื‘ ื”ืงืœื“ื” ืกื˜ื˜ื™ืช ื•-mypy ืœืื—ืจื•ื ื”. ืื• ืฉืื•ืœื™ ืืชื” ืื•ื”ื‘ ืืช Python ื‘ื“ื™ื•ืง ื‘ื’ืœืœ ื”ื”ืงืœื“ื” ื”ื“ื™ื ืžื™ืช ืฉืœื•, ื•ืžื” ืฉืงื•ืจื” ืคืฉื•ื˜ ืžืจื’ื™ื– ืื•ืชืš. ื”ืžืคืชื— ืœืขืจืš ืฉืœ ื”ืงืœื“ื” ืกื˜ื˜ื™ืช ื”ื•ื ืงื ื” ื”ืžื™ื“ื” ืฉืœ ื”ืคืชืจื•ื ื•ืช: ื›ื›ืœ ืฉื”ืคืจื•ื™ืงื˜ ืฉืœืš ื’ื“ื•ืœ ื™ื•ืชืจ, ื›ืš ืืชื” ื ื•ื˜ื” ื™ื•ืชืจ ืœื›ื™ื•ื•ืŸ ื”ืงืœื“ื” ืกื˜ื˜ื™ืช, ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ืืชื” ื‘ืืžืช ืฆืจื™ืš ืืช ื–ื” ื™ื•ืชืจ.

ื ื ื™ื— ืฉืคืจื•ื™ืงื˜ ืžืกื•ื™ื ื”ื’ื™ืข ืœื’ื•ื“ืœ ืฉืœ ืขืฉืจื•ืช ืืœืคื™ ืฉื•ืจื•ืช, ื•ื”ืชื‘ืจืจ ืฉืขื•ื‘ื“ื™ื ืขืœื™ื• ื›ืžื” ืžืชื›ื ืชื™ื. ื‘ื”ืกืชื›ืœื•ืช ืขืœ ืคืจื•ื™ืงื˜ ื“ื•ืžื”, ื‘ื”ืชื‘ืกืก ืขืœ ื”ื ื™ืกื™ื•ืŸ ืฉืœื ื•, ืื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืฉื”ื‘ื ืช ื”ืงื•ื“ ืฉืœื• ืชื”ื™ื” ื”ืžืคืชื— ืœืฉืžื™ืจื” ืขืœ ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืฉืœ ืžืคืชื—ื™ื. ืœืœื ื”ืขืจื•ืช ืกื•ื’, ื™ื›ื•ืœ ืœื”ื™ื•ืช ืงืฉื” ืœื”ื‘ื™ืŸ, ืœืžืฉืœ, ืื™ืœื• ืืจื’ื•ืžื ื˜ื™ื ืœื”ืขื‘ื™ืจ ืœืคื•ื ืงืฆื™ื”, ืื• ืื™ืœื• ืกื•ื’ื™ื ืคื•ื ืงืฆื™ื” ื™ื›ื•ืœื” ืœื”ื—ื–ื™ืจ. ืœื”ืœืŸ ืฉืืœื•ืช ื˜ื™ืคื•ืกื™ื•ืช ืฉืœืขืชื™ื ืงืจื•ื‘ื•ืช ืงืฉื” ืœืขื ื•ืช ืขืœื™ื”ืŸ ืžื‘ืœื™ ืœื”ืฉืชืžืฉ ื‘ื”ืขืจื•ืช ืกื•ื’:

  • ื”ืื ืคื•ื ืงืฆื™ื” ื–ื• ื™ื›ื•ืœื” ืœื—ื–ื•ืจ None?
  • ืžื” ืฆืจื™ืš ืœื”ื™ื•ืช ื”ื˜ื™ืขื•ืŸ ื”ื–ื”? items?
  • ืžื”ื• ืกื•ื’ ื”ืชื›ื•ื ื” id: int ื”ืื ื–ื”, str, ืื• ืื•ืœื™ ืกื•ื’ ืžื•ืชืื ืื™ืฉื™ืช?
  • ื”ืื ื”ื˜ื™ืขื•ืŸ ื”ื–ื” ืฆืจื™ืš ืœื”ื™ื•ืช ืจืฉื™ืžื”? ื”ืื ืืคืฉืจ ืœื”ืขื‘ื™ืจ ืœื–ื” ื˜ื•ืคืœื”?

ืื ืืชื” ืžืกืชื›ืœ ืขืœ ืงื˜ืข ื”ืงื•ื“ ื”ื‘ื ืขื ื”ืขืจื•ืช ื˜ื™ืคื•ืก ื•ืžื ืกื” ืœืขื ื•ืช ืขืœ ืฉืืœื•ืช ื“ื•ืžื•ืช, ืžืชื‘ืจืจ ืฉื–ื• ื”ืžืฉื™ืžื” ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ:

class Resource:
    id: bytes
    ...
    def read_metadata(self, 
                      items: Sequence[str]) -> Dict[str, MetadataItem]:
        ...

  • read_metadata ืœื ื—ื•ื–ืจ None, ืžื›ื™ื•ื•ืŸ ืฉืกื•ื’ ื”ื”ื—ื–ืจื” ืื™ื ื• Optional[โ€ฆ].
  • ื˜ื™ืขื•ืŸ items ื”ื•ื ืจืฆืฃ ืฉืœ ืงื•ื•ื™ื. ืื™ ืืคืฉืจ ืœื—ื–ื•ืจ ืขืœ ื–ื” ื‘ืื•ืคืŸ ืืงืจืื™.
  • ืชื›ื•ื ื” id ื”ื•ื ืžื—ืจื•ื–ืช ืฉืœ ื‘ืชื™ื.

ื‘ืขื•ืœื ืื™ื“ื™ืืœื™, ืืคืฉืจ ื”ื™ื” ืœืฆืคื•ืช ืฉื›ืœ ื”ื“ืงื•ื™ื•ืช ื”ืœืœื• ื™ืชื•ืืจื• ื‘ืชื™ืขื•ื“ ื”ืžื•ื‘ื ื” (ื“ื•ืงstring). ืื‘ืœ ื”ื ื™ืกื™ื•ืŸ ื ื•ืชืŸ ื”ืจื‘ื” ื“ื•ื’ืžืื•ืช ืœืขื•ื‘ื“ื” ืฉืœืขื™ืชื™ื ืงืจื•ื‘ื•ืช ืชื™ืขื•ื“ ื›ื–ื” ืื™ื ื• ื ืฆืคื” ื‘ืงื•ื“ ืฉืื™ืชื• ืืชื” ืฆืจื™ืš ืœืขื‘ื•ื“. ื’ื ืื ืชื™ืขื•ื“ ื›ื–ื” ืงื™ื™ื ื‘ืงื•ื“, ืื™ ืืคืฉืจ ืœืกืžื•ืš ืขืœ ื ื›ื•ื ื•ืชื• ื”ืžื•ื—ืœื˜ืช. ืชื™ืขื•ื“ ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืขื•ืจืคืœ, ืœื ืžื“ื•ื™ืง ื•ืคืชื•ื— ืœืื™ ื”ื‘ื ื•ืช. ื‘ืฆื•ื•ืชื™ื ื’ื“ื•ืœื™ื ืื• ื‘ืคืจื•ื™ืงื˜ื™ื ื’ื“ื•ืœื™ื, ื‘ืขื™ื” ื–ื• ืขืœื•ืœื” ืœื”ื™ื•ืช ื—ืจื™ืคื” ื‘ื™ื•ืชืจ.

ื‘ืขื•ื“ ืฉ-Python ืžืฆื˜ื™ื™ื ืช ื‘ืฉืœื‘ื™ื ืžื•ืงื“ืžื™ื ืื• ื‘ื™ื ื™ื™ื ืฉืœ ืคืจื•ื™ืงื˜ื™ื, ื‘ืฉืœื‘ ืžืกื•ื™ื ืคืจื•ื™ืงื˜ื™ื ืžื•ืฆืœื—ื™ื ื•ื—ื‘ืจื•ืช ื”ืžืฉืชืžืฉื•ืช ื‘-Python ืขืœื•ืœื™ื ืœื”ืชืžื•ื“ื“ ืขื ื”ืฉืืœื” ื”ื—ื™ื•ื ื™ืช: "ื”ืื ืขืœื™ื ื• ืœืฉื›ืชื‘ ื”ื›ืœ ื‘ืฉืคื” ืžื•ืงืœื“ืช ืกื˜ื˜ื™ืช?".

ืžืขืจื›ื•ืช ื‘ื“ื™ืงืช ืกื•ื’ื™ื ื›ืžื• mypy ืคื•ืชืจื•ืช ืืช ื”ื‘ืขื™ื” ืฉืœืขื™ืœ ืขืœ ื™ื“ื™ ืžืชืŸ ืฉืคื” ืจืฉืžื™ืช ืœืžืคืชื— ืœืชื™ืื•ืจ ื˜ื™ืคื•ืกื™ื, ื•ืขืœ ื™ื“ื™ ื‘ื“ื™ืงื” ืฉื”ืฆื”ืจื•ืช ื”ืกื•ื’ ืชื•ืืžื•ืช ืœื™ื™ืฉื•ื ื”ืชื•ื›ื ื™ืช (ื•ืื•ืคืฆื™ื•ื ืœื™, ื‘ื“ื™ืงืช ืงื™ื•ืžืŸ). ื‘ืื•ืคืŸ ื›ืœืœื™, ืื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืฉืžืขืจื›ื•ืช ืืœื• ืžืขืžื™ื“ื•ืช ืœืจืฉื•ืชื ื• ืžืฉื”ื• ื›ืžื• ืชื™ืขื•ื“ ืฉื ื‘ื“ืง ื‘ืงืคื™ื“ื”.

ืœืฉื™ืžื•ืฉ ื‘ืžืขืจื›ื•ืช ื›ืืœื” ื™ืฉ ื™ืชืจื•ื ื•ืช ื ื•ืกืคื™ื, ื•ื”ื ื›ื‘ืจ ืœื’ืžืจื™ ืœื ื˜ืจื™ื•ื•ื™ืืœื™ื™ื:

  • ืžืขืจื›ืช ื‘ื“ื™ืงืช ื”ืกื•ื’ ื™ื›ื•ืœื” ืœื–ื”ื•ืช ื›ืžื” ืฉื’ื™ืื•ืช ืงื˜ื ื•ืช (ื•ืœื ื›ืœ ื›ืš ืงื˜ื ื•ืช). ื“ื•ื’ืžื” ื˜ื™ืคื•ืกื™ืช ื”ื™ื ื›ืืฉืจ ื”ื ืฉื•ื›ื—ื™ื ืœืขื‘ื“ ืขืจืš None ืื• ืžืฆื‘ ืžื™ื•ื—ื“ ืื—ืจ.
  • ืฉื™ื ื•ื™ ืงื•ื“ ืžื—ื“ืฉ ืžืคื•ืฉื˜ ืžืื•ื“ ืžื›ื™ื•ื•ืŸ ืฉืžืขืจื›ืช ื‘ื“ื™ืงืช ื”ืกื•ื’ื™ื ืœืจื•ื‘ ืžื“ื•ื™ืงืช ืžืื•ื“ ืœื’ื‘ื™ ื”ืงื•ื“ ืฉืฆืจื™ืš ืœืฉื ื•ืช. ื™ื—ื“ ืขื ื–ืืช, ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœืงื•ื•ืช ืœื›ื™ืกื•ื™ ืงื•ื“ ืฉืœ 100% ืขื ื‘ื“ื™ืงื•ืช, ืฉื‘ื›ืœ ืžืงืจื”, ื‘ื“ืจืš ื›ืœืœ ืœื ื ื™ืชืŸ ืœื‘ื™ืฆื•ืข. ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื”ืชืขืžืง ื‘ืžืขืžืงื™ ืขืงื‘ื•ืช ื”ืขืจื™ืžื” ื›ื“ื™ ืœื’ืœื•ืช ืืช ื”ืกื™ื‘ื” ืœื‘ืขื™ื”.
  • ืืคื™ืœื• ื‘ืคืจื•ื™ืงื˜ื™ื ื’ื“ื•ืœื™ื, mypy ื™ื›ื•ืœื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืœื‘ืฆืข ื‘ื“ื™ืงืช ืกื•ื’ื™ื ืžืœืื” ื‘ืฉื‘ืจื™ืจ ืฉื ื™ื™ื”. ื•ื‘ื™ืฆื•ืข ื”ื‘ื“ื™ืงื•ืช ืœื•ืงื— ื‘ื“ืจืš ื›ืœืœ ืขืฉืจื•ืช ืฉื ื™ื•ืช ืื• ืืคื™ืœื• ื“ืงื•ืช. ืžืขืจื›ืช ื‘ื“ื™ืงืช ื”ืกื•ื’ ื ื•ืชื ืช ืœืžืชื›ื ืช ืžืฉื•ื‘ ืžื™ื™ื“ื™ ื•ืžืืคืฉืจืช ืœื• ืœื‘ืฆืข ืืช ืขื‘ื•ื“ืชื• ืžื”ืจ ื™ื•ืชืจ. ื”ื•ื ื›ื‘ืจ ืœื ืฆืจื™ืš ืœื›ืชื•ื‘ ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื” ืฉื‘ืจื™ืจื™ื•ืช ื•ืงืฉื•ืช ืœืชื—ื–ื•ืงื” ืฉืžื—ืœื™ืคื•ืช ื™ืฉื•ื™ื•ืช ืืžื™ืชื™ื•ืช ื‘ืœืขื’ ื•ืชื™ืงื•ื ื™ื ืจืง ื›ื“ื™ ืœืงื‘ืœ ืชื•ืฆืื•ืช ื‘ื“ื™ืงื•ืช ืงื•ื“ ืžื”ืจ ื™ื•ืชืจ.

IDE ื•ืขื•ืจื›ื™ื ื›ื’ื•ืŸ PyCharm ืื• Visual Studio Code ืžืฉืชืžืฉื™ื ื‘ื›ื•ื—ื ืฉืœ ื”ืขืจื•ืช ืกื•ื’ื™ื ื›ื“ื™ ืœืกืคืง ืœืžืคืชื—ื™ื ื”ืฉืœืžืช ืงื•ื“, ื”ื“ื’ืฉืช ืฉื’ื™ืื•ืช ื•ืชืžื™ื›ื” ื‘ื‘ื ื™ื™ืช ืฉืคื” ื ืคื•ืฆื”. ื•ืืœื” ืจืง ื—ืœืง ืžื”ื™ืชืจื•ื ื•ืช ืฉืœ ื”ื”ืงืœื“ื”. ืขื‘ื•ืจ ื—ืœืง ืžื”ืžืชื›ื ืชื™ื, ื›ืœ ื–ื” ื”ื•ื ื”ื˜ื™ืขื•ืŸ ื”ืขื™ืงืจื™ ื‘ืขื“ ื”ืงืœื“ื”. ื–ื” ืžืฉื”ื• ืฉืžืจื•ื•ื™ื— ืžื™ื“ ืœืื—ืจ ื”ื™ื™ืฉื•ื. ืžืงืจื” ืฉื™ืžื•ืฉ ื–ื” ืขื‘ื•ืจ ื˜ื™ืคื•ืกื™ื ืื™ื ื• ืžืฆืจื™ืš ืžืขืจื›ืช ื ืคืจื“ืช ืœื‘ื“ื™ืงืช ืกื•ื’ื™ื ื›ื’ื•ืŸ mypy, ืื ื›ื™ ื™ืฉ ืœืฆื™ื™ืŸ ื›ื™ mypy ืžืกื™ื™ืข ืœืฉืžื•ืจ ืขืœ ื”ืขืจื•ืช ืกื•ื’ ืขืงื‘ื™ื•ืช ืขื ืงื•ื“.

ืจืงืข ืฉืœ mypy

ื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืœ mypy ื”ืชื—ื™ืœื” ื‘ื‘ืจื™ื˜ื ื™ื”, ื‘ืงื™ื™ืžื‘ืจื™ื“ื’', ื›ืžื” ืฉื ื™ื ืœืคื ื™ ืฉื”ืฆื˜ืจืคืชื™ ืœื“ืจื•ืคื‘ื•ืงืก. ื”ื™ื™ืชื™ ืžืขื•ืจื‘, ื›ื—ืœืง ืžืžื—ืงืจ ื”ื“ื•ืงื˜ื•ืจื˜ ืฉืœื™, ื‘ืื™ื—ื•ื“ ืฉืœ ืฉืคื•ืช ืžื•ืงืœื“ื•ืช ืกื˜ื˜ื™ื•ืช ื•ื“ื™ื ืžื™ื•ืช. ืงื™ื‘ืœืชื™ ื”ืฉืจืื” ืžืžืืžืจ ืขืœ ื”ืงืœื“ื” ืžืฆื˜ื‘ืจืช ืฉืœ ื’'ืจืžื™ ืกื™ื™ืง ื•-ื•ื•ืืœื™ื“ ื˜ืื”ื, ื•ืžืคืจื•ื™ืงื˜ ื”ืžื—ื‘ื˜ ื”ืงืœื“. ื ื™ืกื™ืชื™ ืœืžืฆื•ื ื“ืจื›ื™ื ืœื”ืฉืชืžืฉ ื‘ืื•ืชื” ืฉืคืช ืชื›ื ื•ืช ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ื™ื ืฉื•ื ื™ื โ€“ ืžืกืงืจื™ืคื˜ื™ื ืงื˜ื ื™ื ื•ืขื“ ื‘ืกื™ืกื™ ืงื•ื“ ื”ืžื•ืจื›ื‘ื™ื ืžืžื™ืœื™ื•ื ื™ื ืจื‘ื™ื ืฉืœ ืฉื•ืจื•ืช. ื™ื—ื“ ืขื ื–ืืช, ืจืฆื™ืชื™ ืœื”ื‘ื˜ื™ื— ืฉื‘ืคืจื•ื™ืงื˜ ื‘ื›ืœ ืงื ื” ืžื™ื“ื” ืœื ื™ืฆื˜ืจืš ืœื”ืชืคืฉืจ ื™ื•ืชืจ ืžื“ื™. ื—ืœืง ื—ืฉื•ื‘ ืžื›ืœ ื–ื” ื”ื™ื” ื”ืจืขื™ื•ืŸ ืœืขื‘ื•ืจ ื‘ื”ื“ืจื’ื” ืžืคืจื•ื™ืงื˜ ืื‘ ื˜ื™ืคื•ืก ืœื ืžื•ื“ืคืก ืœืžื•ืฆืจ ืžื•ื’ืžืจ ืžื•ื“ืคืก ืกื˜ื˜ื™ ืฉื ื‘ื“ืง ืžืงื™ืฃ. ื‘ื™ืžื™ื ืืœื”, ื”ืจืขื™ื•ื ื•ืช ื”ืœืœื• ืžื•ื‘ื ื™ื ืžืืœื™ื”ื, ืื‘ืœ ื‘-2010 ื–ื• ื”ื™ื™ืชื” ื‘ืขื™ื” ืฉืขื“ื™ื™ืŸ ื ื—ืงืจื” ื‘ืื•ืคืŸ ืคืขื™ืœ.

ื”ืขื‘ื•ื“ื” ื”ืžืงื•ืจื™ืช ืฉืœื™ ื‘ื‘ื“ื™ืงืช ืกื•ื’ื™ื ืœื ื”ื™ื™ืชื” ืžื›ื•ื•ื ืช ืœืคื™ื™ืชื•ืŸ. ื‘ืžืงื•ื ื–ืืช, ื”ืฉืชืžืฉืชื™ ื‘ืฉืคื” ืงื˜ื ื” "ืชื•ืฆืจืช ื‘ื™ืช". ืขื•ื“. ื”ื ื” ื“ื•ื’ืžื” ืฉืชืืคืฉืจ ืœืš ืœื”ื‘ื™ืŸ ืขืœ ืžื” ืื ื—ื ื• ืžื“ื‘ืจื™ื (ื”ืขืจื•ืช ืกื•ื’ ื”ืŸ ืื•ืคืฆื™ื•ื ืœื™ื•ืช ื›ืืŸ):

def Fib(n as Int) as Int
  if n <= 1
    return n
  else
    return Fib(n - 1) + Fib(n - 2)
  end
end

ืฉื™ืžื•ืฉ ื‘ืฉืคืช ืื ืžืคื•ืฉื˜ืช ื”ื™ื ื’ื™ืฉื” ื ืคื•ืฆื” ื‘ืžื—ืงืจ ืžื“ืขื™. ื–ื” ื›ืš, ืœื ืžืขื˜ ื‘ื’ืœืœ ื”ืขื•ื‘ื“ื” ืฉื–ื” ืžืืคืฉืจ ืœืš ืœื‘ืฆืข ื‘ืžื”ื™ืจื•ืช ื ื™ืกื•ื™ื™ื, ื•ื’ื ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื ื™ืชืŸ ืœื”ืชืขืœื ื‘ืงืœื•ืช ืžืžื” ืฉืื™ืŸ ืœื• ืฉื•ื ืงืฉืจ ืœืžื—ืงืจ. ืฉืคื•ืช ืชื›ื ื•ืช ื‘ืขื•ืœื ื”ืืžื™ืชื™ ื ื•ื˜ื•ืช ืœื”ื™ื•ืช ืชื•ืคืขื•ืช ื‘ืงื ื” ืžื™ื“ื” ื’ื“ื•ืœ ืขื ื™ื™ืฉื•ืžื™ื ืžื•ืจื›ื‘ื™ื, ืžื” ืฉืžืื˜ ืืช ื”ื ื™ืกื•ื™ื™ื. ืขื ื–ืืช, ื›ืœ ืชื•ืฆืื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ ืฉืคื” ืžืคื•ืฉื˜ืช ื ืจืื•ืช ืžืขื˜ ื—ืฉื•ื“ื•ืช, ืฉื›ืŸ ื‘ื”ืฉื’ืช ืชื•ืฆืื•ืช ืืœื• ื”ื—ื•ืงืจ ืื•ืœื™ ื”ืงืจื™ื‘ ืฉื™ืงื•ืœื™ื ื—ืฉื•ื‘ื™ื ืœืฉื™ืžื•ืฉ ืžืขืฉื™ ื‘ืฉืคื•ืช.

ื‘ื•ื“ืง ื”ืกื•ื’ ืฉืœื™ ืขื‘ื•ืจ Alore ื ืจืื” ืžื‘ื˜ื™ื— ืžืื•ื“, ืื‘ืœ ืจืฆื™ืชื™ ืœื‘ื“ื•ืง ืื•ืชื• ืขืœ ื™ื“ื™ ื ื™ืกื•ื™ ืขื ืงื•ื“ ืืžื™ืชื™, ืฉืืคืฉืจ ืœื•ืžืจ ืฉืœื ื ื›ืชื‘ ื‘-Alore. ืœืžื–ืœื™, ืฉืคืช Alore ื”ืชื‘ืกืกื” ื‘ืžื™ื“ื” ืจื‘ื” ืขืœ ืื•ืชื ืจืขื™ื•ื ื•ืช ื›ืžื• ืคื™ื™ืชื•ืŸ. ื”ื™ื” ืงืœ ืžืกืคื™ืง ืœืฉื ื•ืช ืืช ื‘ื•ื“ืง ื”ืกื•ื’ ื›ื“ื™ ืฉื™ื•ื›ืœ ืœืขื‘ื•ื“ ืขื ื”ืชื—ื‘ื™ืจ ื•ื”ืกืžื ื˜ื™ืงื” ืฉืœ Python. ื–ื” ืื™ืคืฉืจ ืœื ื• ืœื ืกื•ืช ืœื”ืงืœื™ื“ ืฆ'ืง ื‘ืงื•ื“ ืงื•ื“ ืคืชื•ื— ืฉืœ Python. ื‘ื ื•ืกืฃ, ื›ืชื‘ืชื™ ื˜ืจื ืกืคื™ืœืจ ื›ื“ื™ ืœื”ืžื™ืจ ืงื•ื“ ืฉื ื›ืชื‘ ื‘-Alore ืœืงื•ื“ Python ื•ื”ืฉืชืžืฉืชื™ ื‘ื• ื›ื“ื™ ืœืชืจื’ื ืืช ืงื•ื“ ื”-typechecker ืฉืœื™. ืขื›ืฉื™ื• ื”ื™ื™ืชื” ืœื™ ืžืขืจื›ืช ื‘ื“ื™ืงืช ืกื•ื’ื™ื ืฉื ื›ืชื‘ื” ื‘ืคื™ื™ืชื•ืŸ ืฉืชืžื›ื” ื‘ืชืช-ืงื‘ื•ืฆื” ืฉืœ ืคื™ื™ืชื•ืŸ, ืื™ื–ื•ืฉื”ื™ ืฉืคื” ื›ื–ื•! (ื”ื—ืœื˜ื•ืช ืืจื›ื™ื˜ืงื˜ื•ื ื™ื•ืช ืžืกื•ื™ืžื•ืช ืฉื”ื™ื• ื”ื’ื™ื•ื ื™ื•ืช ืขื‘ื•ืจ Alore ืœื ื”ืชืื™ืžื• ืœืคื™ื™ืชื•ืŸ, ื•ื–ื” ืขื“ื™ื™ืŸ ืžื•ืจื’ืฉ ื‘ื—ืœืงื™ื ืžื‘ืกื™ืก ื”ืงื•ื“ ืฉืœ mypy.)

ืœืžืขืฉื”, ื”ืฉืคื” ื”ื ืชืžื›ืช ืขืœ ื™ื“ื™ ืžืขืจื›ืช ื”ืกื•ื’ ืฉืœื™ ืœื ืžืžืฉ ื™ื›ื•ืœื” ืœื”ื™ืงืจื Python ื‘ืฉืœื‘ ื–ื”: ื”ื™ื ื”ื™ื™ืชื” ื’ืจืกื” ืฉืœ Python ืขืงื‘ ืžื’ื‘ืœื•ืช ืžืกื•ื™ืžื•ืช ืฉืœ ืชื—ื‘ื™ืจ ื”ื”ืขืจื•ืช ืžืกื•ื’ Python 3.

ื–ื” ื ืจืื” ื›ืžื• ืชืขืจื•ื‘ืช ืฉืœ ื’'ืื•ื•ื” ื•ืคื™ื™ืชื•ืŸ:

int fib(int n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

ืื—ื“ ื”ืจืขื™ื•ื ื•ืช ืฉืœื™ ื‘ืื•ืชื” ืชืงื•ืคื” ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ื”ืขืจื•ืช ืกื•ื’ ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ืขืœ ื™ื“ื™ ืงื•ืžืคื™ืœืฆื™ื” ืžืกื•ื’ ื–ื” ืฉืœ Python ืœ-C, ืื• ืื•ืœื™ JVM bytecode. ื”ื’ืขืชื™ ืœืฉืœื‘ ืฉืœ ื›ืชื™ื‘ืช ืื‘ ื˜ื™ืคื•ืก ืžื”ื“ืจ, ืื‘ืœ ื ื˜ืฉืชื™ ืืช ื”ืจืขื™ื•ืŸ ื”ื–ื”, ืžื›ื™ื•ื•ืŸ ืฉื‘ื“ื™ืงืช ื”ืกื•ื’ ืขืฆืžื• ื ืจืืชื” ืฉื™ืžื•ืฉื™ืช ืœืžื“ื™.

ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื”ืฆื’ืชื™ ืืช ื”ืคืจื•ื™ืงื˜ ืฉืœื™ ื‘-PyCon 2013 ื‘ืกื ื˜ื” ืงืœืจื”. ื“ื™ื‘ืจืชื™ ืขืœ ื–ื” ื’ื ืขื ื’ื•ื•ื™ื“ื• ื•ืืŸ ืจื•ืกื•ื, ื“ื™ืงื˜ื˜ื•ืจ ื”ืคื™ื™ืชื•ืŸ ื”ื ื“ื™ื‘ ืœื›ืœ ื”ื—ื™ื™ื. ื”ื•ื ืฉื›ื ืข ืื•ืชื™ ืœื”ื•ืจื™ื“ ืืช ื”ืชื—ื‘ื™ืจ ืฉืœื™ ื•ืœื”ื™ืฉืืจ ืขื ื”ืชื—ื‘ื™ืจ ื”ืกื˜ื ื“ืจื˜ื™ ืฉืœ Python 3. Python 3 ืชื•ืžืš ื‘ื”ืขืจื•ืช ืคื•ื ืงืฆื™ื•ืช, ื›ืš ืฉื ื™ืชืŸ ืœืฉื›ืชื‘ ืืช ื”ื“ื•ื’ืžื” ืฉืœื™ ื›ืคื™ ืฉืžื•ืฆื’ ืœื”ืœืŸ, ื•ื›ืชื•ืฆืื” ืžื›ืš ืชื•ื›ื ื™ืช Python ืจื’ื™ืœื”:

def fib(n: int) -> int:
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืขืฉื•ืช ื›ืžื” ืคืฉืจื•ืช (ืงื•ื“ื ื›ืœ, ืื ื™ ืจื•ืฆื” ืœืฆื™ื™ืŸ ืฉื”ืžืฆืืชื™ ืืช ื”ืชื—ื‘ื™ืจ ืฉืœื™ ื‘ื“ื™ื•ืง ืžื”ืกื™ื‘ื” ื”ื–ื•). ื‘ืžื™ื•ื—ื“, Python 3.3, ื”ื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ืฉืœ ื”ืฉืคื” ื‘ืื•ืชื” ืชืงื•ืคื”, ืœื ืชืžื›ื” ื‘ื”ืขืจื•ืช ืžืฉืชื ื•ืช. ืฉื•ื—ื—ืชื™ ืขื Guido ื‘ื“ื•ืืจ ืืœืงื˜ืจื•ื ื™ ืขืœ ืืคืฉืจื•ื™ื•ืช ืฉื•ื ื•ืช ืœืขื™ืฆื•ื‘ ืชื—ื‘ื™ืจื™ ืฉืœ ื”ืขืจื•ืช ื›ืืœื”. ื”ื—ืœื˜ื ื• ืœื”ืฉืชืžืฉ ื‘ื”ืขืจื•ืช ืžืกื•ื’ ืขื‘ื•ืจ ืžืฉืชื ื™ื. ื–ื” ืฉื™ืจืช ืืช ื”ืžื˜ืจื” ื”ืžื™ื•ืขื“ืช, ืื‘ืœ ื”ื™ื” ืงืฆืช ืžืกื•ืจื‘ืœ (Python 3.6 ื ืชืŸ ืœื ื• ืชื—ื‘ื™ืจ ื™ืคื” ื™ื•ืชืจ):

products = []  # type: List[str]  # Eww

ื”ืขืจื•ืช ืกื•ื’ ื”ื•ืขื™ืœื• ื’ื ืœืชืžื™ื›ื” ื‘-Python 2, ืฉืื™ืŸ ืœื” ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘ื”ืขืจื•ืช ืกื•ื’:

f fib(n):
    # type: (int) -> int
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

ื”ืชื‘ืจืจ ืฉื”ื—ื™ืœื•ืคื™ื ื”ืœืœื• (ื•ืื—ืจื™ื) ืœื ืžืžืฉ ื—ืฉื•ื‘ื™ื - ื”ื™ืชืจื•ื ื•ืช ืฉืœ ื”ืงืœื“ื” ืกื˜ื˜ื™ืช ื’ืจืžื• ืœื›ืš ืฉื”ืžืฉืชืžืฉื™ื ืฉื›ื—ื• ื‘ืžื”ืจื” ืืช ื”ืชื—ื‘ื™ืจ ื”ืคื—ื•ืช ืžืžื•ืฉืœื. ืžื›ื™ื•ื•ืŸ ืฉืœื ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืžื‘ื ื™ื ืชื—ื‘ื™ืจื™ื™ื ืžื™ื•ื—ื“ื™ื ื‘ืงื•ื“ Python ืฉื ื‘ื“ืง ืขืœ ื™ื“ื™ ืกื•ื’ื™ื, ื”ื›ืœื™ื ื”ืงื™ื™ืžื™ื ืฉืœ Python ื•ืชื”ืœื™ื›ื™ ืขื™ื‘ื•ื“ ื”ืงื•ื“ ื”ืžืฉื™ื›ื• ืœืขื‘ื•ื“ ื›ืจื’ื™ืœ, ืžื” ืฉื”ืงืœ ื”ืจื‘ื” ื™ื•ืชืจ ืขืœ ืžืคืชื—ื™ื ืœืœืžื•ื“ ืืช ื”ื›ืœื™ ื”ื—ื“ืฉ.

ื’ื™ื“ื• ื’ื ืฉื›ื ืข ืื•ืชื™ ืœื”ืฆื˜ืจืฃ ืœื“ืจื•ืคื‘ื•ืงืก ืœืื—ืจ ืฉืกื™ื™ืžืชื™ ืืช ืขื‘ื•ื“ืช ื”ืชื•ืืจ ืฉืœื™. ื›ืืŸ ืžืชื—ื™ืœ ื”ื—ืœืง ื”ืžืขื ื™ื™ืŸ ื‘ื™ื•ืชืจ ื‘ืกื™ืคื•ืจ mypy.

ืœื”ืžืฉืš ...

ืงื•ืจืื™ื ื™ืงืจื™ื! ืื ืืชื” ืžืฉืชืžืฉ ื‘-Python, ืื ื ืกืคืจ ืœื ื• ืขืœ ื”ื™ืงืฃ ื”ืคืจื•ื™ืงื˜ื™ื ืฉืืชื” ืžืคืชื— ื‘ืฉืคื” ื–ื•.

ื”ื ืชื™ื‘ ืœื‘ื“ื™ืงืช ืกื•ื’ 4 ืžื™ืœื™ื•ืŸ ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ Python. ื—ืœืง 1
ื”ื ืชื™ื‘ ืœื‘ื“ื™ืงืช ืกื•ื’ 4 ืžื™ืœื™ื•ืŸ ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ Python. ื—ืœืง 1

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”