L’une des raisons du succès de Python est son incroyable communauté : large & active. Ainsi, en plus des dizaines de modules de la bibliothèque standard qui sont livrés avec ce langage, on dénombre des dizaines de milliers de packages dans PyPI (Python Package Index).

Aujourd’hui, je vais vous présenter l’un de ces modules : Wikipedia. Il permet d’accéder, via des commandes, au contenu de la célèbre encyclopédie en ligne.

Les sources de la motivation…

Mais avant de commencer, j’ai d’abord une petite histoire à vous raconter 🙂

Elle est extraite du livre La vérité sur ce qui nous motive. Je vous la raconte avec mes mots car il n’y a pas de duplicate content sur Data Science Mania !

On est en l’an 2000. L’encyclopédie Encarta existe depuis 7 ans. Elle est la propriété de Microsoft qui est déjà un mastodonte à l’époque. La firme de Bill Gates paie des auteurs pour rédiger des milliers d’articles.

Encarta est un produit commercial : pour accéder à son contenu il faut l’acheter sous forme de CD-ROM. Plus tard, elle sera aussi commercialisée en ligne.

A la même époque, un certain Jimmy Wales est sur le point de lancer un projet au nom de Wikipedia : une encyclopédie en ligne gérée par des bénévoles (donc non payés) et accessible gratuitement. De plus, il n’y aura pas de publicité sur ses pages !

Question : sur laquelle des ces deux encyclopédies parierez-vous ?

En comparant les modèles économiques de ces deux projets, toute personne sensée miserait sur Encarta. Quant au projet de Jimmy Wales, il apparaît, à coup sûr, comme non viable.

Dix ans plus tard (2010) : Wikipédia est la plus célèbre encyclopédie en ligne. C’est aussi l’un des sites Web les plus visités au monde. Quant à Encarta, elle a tout simplement disparu : Microsoft a décidé d’y mettre fin en 2009.

Moralité : cette histoire prouve que le gain matériel n’est pas l’unique facteur de motivation humaine et que d’autres éléments sont à prendre en considération comme la fierté de contribuer à un projet utile à la société, ou encore la plaisir qu’on éprouve à exercer une activité qui nous plaît.

Ce dernier point n’est pas sans rappeler le concept « d’expérience autotélique » développé par le célèbre psychologue Mihály Csíkszentmihályi :

Dans une expérience autotélique, le moyen est la fin : l’activité est sa propre récompense.

Remarque : si ce sujet vous intéresse, je vous recommande Vivre : La psychologie du bonheur, un excellent ouvrage écrit par cet auteur au nom de famille imprononçable 🙂

Le cas de Wikipédia n’est pas isolé : les logiciels et les langages de programmation libres sont aussi de belles réussites, fruit du travail de nombreuses communautés actives, bénévoles et motivées.

Passons maintenant à notre module…

A vous les millions de pages des toutes les encyclopédies Wikipédia de la terre

Pour pouvoir utiliser le package Wikipedia, il nous faut d’abord, comme pour tout module externe, l’installer avec « pip » (ou « pip3 ») :

# Install Wikipedia module
pip install wikipedia

Une fois l’installation terminée, on va pouvoir « importer » notre module :

# Import Wikipedia module
import wikipedia

A présent, il nous faut sélectionner la langue de l’encyclopédie qui nous intéresse. Listons d’abord les langues disponibles :

# List available Wikipedia languages
wikipedia.languages()
{'aa': 'Qafár af',
 'ab': 'Аҧсшәа',
 'abs': 'bahasa ambon',
 'ace': 'Acèh',
 'ady': 'адыгабзэ',
 'ady-cyrl': 'адыгабзэ',
 'aeb': 'تونسي/Tûnsî',
 'aeb-arab': 'تونسي',
 'aeb-latn': 'Tûnsî',
 'af': 'Afrikaans',
 'ak': 'Akan',
 'aln': 'Gegë',
 'als': 'Alemannisch',
 'am': 'አማርኛ',
 'an': 'aragonés',
 'ang': 'Ænglisc',
 'anp': 'अङ्गिका',
 'ar': 'العربية',
 'arc': 'ܐܪܡܝܐ',
 'arn': 'mapudungun',
 'arq': 'جازايرية',
 'ary': 'Maġribi',
 'arz': 'مصرى',
 'as': 'অসমীয়া',
 'ase': 'American sign language',
 'ast': 'asturianu',
 'atj': 'Atikamekw',
 'av': 'авар',
 'avk': 'Kotava',
 'awa': 'अवधी',
 'ay': 'Aymar aru',
 'az': 'azərbaycanca',
 'azb': 'تۆرکجه',
 'ba': 'башҡортса',
 'ban': 'Bali',
 'bar': 'Boarisch',
 'bat-smg': 'žemaitėška',
 'bbc': 'Batak Toba',
 'bbc-latn': 'Batak Toba',
 'bcc': 'جهلسری بلوچی',
 'bcl': 'Bikol Central',
 'be': 'беларуская',
 'be-tarask': 'беларуская (тарашкевіца)\u200e',
 'be-x-old': 'беларуская (тарашкевіца)\u200e',
 'bg': 'български',
 'bgn': 'روچ کپتین بلوچی',
 'bh': 'भोजपुरी',
 'bho': 'भोजपुरी',
 'bi': 'Bislama',
 'bjn': 'Banjar',
 'bm': 'bamanankan',
 'bn': 'বাংলা',
 'bo': 'བོད་ཡིག',
 'bpy': 'বিষ্ণুপ্রিয়া মণিপুরী',
 'bqi': 'بختیاری',
 'br': 'brezhoneg',
 'brh': 'Bráhuí',
 'bs': 'bosanski',
 'btm': 'Batak Mandailing',
 'bto': 'Iriga Bicolano',
 'bug': 'ᨅᨔ ᨕᨘᨁᨗ',
 'bxr': 'буряад',
 'ca': 'català',
 'cbk-zam': 'Chavacano de Zamboanga',
 'cdo': 'Mìng-dĕ̤ng-ngṳ̄',
 'ce': 'нохчийн',
 'ceb': 'Cebuano',
 'ch': 'Chamoru',
 'cho': 'Choctaw',
 'chr': 'ᏣᎳᎩ',
 'chy': 'Tsetsêhestâhese',
 'ckb': 'کوردی',
 'co': 'corsu',
 'cps': 'Capiceño',
 'cr': 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',
 'crh': 'qırımtatarca',
 'crh-cyrl': 'къырымтатарджа (Кирилл)\u200e',
 'crh-latn': 'qırımtatarca (Latin)\u200e',
 'cs': 'čeština',
 'csb': 'kaszëbsczi',
 'cu': 'словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ',
 'cv': 'Чӑвашла',
 'cy': 'Cymraeg',
 'da': 'dansk',
 'de': 'Deutsch',
 'de-at': 'Österreichisches Deutsch',
 'de-ch': 'Schweizer Hochdeutsch',
 'de-formal': 'Deutsch (Sie-Form)\u200e',
 'din': 'Thuɔŋjäŋ',
 'diq': 'Zazaki',
 'dsb': 'dolnoserbski',
 'dtp': 'Dusun Bundu-liwan',
 'dty': 'डोटेली',
 'dv': 'ދިވެހިބަސް',
 'dz': 'ཇོང་ཁ',
 'ee': 'eʋegbe',
 'egl': 'Emiliàn',
 'el': 'Ελληνικά',
 'eml': 'emiliàn e rumagnòl',
 'en': 'English',
 'en-ca': 'Canadian English',
 'en-gb': 'British English',
 'eo': 'Esperanto',
 'es': 'español',
 'es-419': 'español de América Latina',
 'es-formal': 'español (formal)\u200e',
 'et': 'eesti',
 'eu': 'euskara',
 'ext': 'estremeñu',
 'fa': 'فارسی',
 'ff': 'Fulfulde',
 'fi': 'suomi',
 'fit': 'meänkieli',
 'fiu-vro': 'Võro',
 'fj': 'Na Vosa Vakaviti',
 'fo': 'føroyskt',
 'fr': 'français',
 'frc': 'français cadien',
 'frp': 'arpetan',
 'frr': 'Nordfriisk',
 'fur': 'furlan',
 'fy': 'Frysk',
 'ga': 'Gaeilge',
 'gag': 'Gagauz',
 'gan': '贛語',
 'gan-hans': '赣语(简体)\u200e',
 'gan-hant': '贛語(繁體)\u200e',
 'gcr': 'kriyòl gwiyannen',
 'gd': 'Gàidhlig',
 'gl': 'galego',
 'glk': 'گیلکی',
 'gn': "Avañe'ẽ",
 'gom': 'गोंयची कोंकणी / Gõychi Konknni',
 'gom-deva': 'गोंयची कोंकणी',
 'gom-latn': 'Gõychi Konknni',
 'gor': 'Bahasa Hulontalo',
 'got': '𐌲𐌿𐍄𐌹𐍃𐌺',
 'grc': 'Ἀρχαία ἑλληνικὴ',
 'gsw': 'Alemannisch',
 'gu': 'ગુજરાતી',
 'gv': 'Gaelg',
 'ha': 'Hausa',
 'hak': '客家語/Hak-kâ-ngî',
 'haw': 'Hawaiʻi',
 'he': 'עברית',
 'hi': 'हिन्दी',
 'hif': 'Fiji Hindi',
 'hif-latn': 'Fiji Hindi',
 'hil': 'Ilonggo',
 'ho': 'Hiri Motu',
 'hr': 'hrvatski',
 'hrx': 'Hunsrik',
 'hsb': 'hornjoserbsce',
 'ht': 'Kreyòl ayisyen',
 'hu': 'magyar',
 'hu-formal': 'magyar (formal)\u200e',
 'hy': 'հայերեն',
 'hyw': 'Արեւմտահայերէն',
 'hz': 'Otsiherero',
 'ia': 'interlingua',
 'id': 'Bahasa Indonesia',
 'ie': 'Interlingue',
 'ig': 'Igbo',
 'ii': 'ꆇꉙ',
 'ik': 'Iñupiak',
 'ike-cans': 'ᐃᓄᒃᑎᑐᑦ',
 'ike-latn': 'inuktitut',
 'ilo': 'Ilokano',
 'inh': 'ГӀалгӀай',
 'io': 'Ido',
 'is': 'íslenska',
 'it': 'italiano',
 'iu': 'ᐃᓄᒃᑎᑐᑦ/inuktitut',
 'ja': '日本語',
 'jam': 'Patois',
 'jbo': 'la .lojban.',
 'jut': 'jysk',
 'jv': 'Jawa',
 'ka': 'ქართული',
 'kaa': 'Qaraqalpaqsha',
 'kab': 'Taqbaylit',
 'kbd': 'Адыгэбзэ',
 'kbd-cyrl': 'Адыгэбзэ',
 'kbp': 'Kabɩyɛ',
 'kg': 'Kongo',
 'khw': 'کھوار',
 'ki': 'Gĩkũyũ',
 'kiu': 'Kırmancki',
 'kj': 'Kwanyama',
 'kjp': 'ဖၠုံလိက်',
 'kk': 'қазақша',
 'kk-arab': 'قازاقشا (تٴوتە)\u200f',
 'kk-cn': 'قازاقشا (جۇنگو)\u200f',
 'kk-cyrl': 'қазақша (кирил)\u200e',
 'kk-kz': 'қазақша (Қазақстан)\u200e',
 'kk-latn': 'qazaqşa (latın)\u200e',
 'kk-tr': 'qazaqşa (Türkïya)\u200e',
 'kl': 'kalaallisut',
 'km': 'ភាសាខ្មែរ',
 'kn': 'ಕನ್ನಡ',
 'ko': '한국어',
 'ko-kp': '조선말',
 'koi': 'Перем Коми',
 'kr': 'Kanuri',
 'krc': 'къарачай-малкъар',
 'kri': 'Krio',
 'krj': 'Kinaray-a',
 'krl': 'karjal',
 'ks': 'कॉशुर / کٲشُر',
 'ks-arab': 'کٲشُر',
 'ks-deva': 'कॉशुर',
 'ksh': 'Ripoarisch',
 'ku': 'kurdî',
 'ku-arab': 'كوردي (عەرەبی)\u200f',
 'ku-latn': 'kurdî (latînî)\u200e',
 'kum': 'къумукъ',
 'kv': 'коми',
 'kw': 'kernowek',
 'ky': 'Кыргызча',
 'la': 'Latina',
 'lad': 'Ladino',
 'lb': 'Lëtzebuergesch',
 'lbe': 'лакку',
 'lez': 'лезги',
 'lfn': 'Lingua Franca Nova',
 'lg': 'Luganda',
 'li': 'Limburgs',
 'lij': 'Ligure',
 'liv': 'Līvõ kēļ',
 'lki': 'لەکی',
 'lmo': 'lumbaart',
 'ln': 'lingála',
 'lo': 'ລາວ',
 'loz': 'Silozi',
 'lrc': 'لۊری شومالی',
 'lt': 'lietuvių',
 'ltg': 'latgaļu',
 'lus': 'Mizo ţawng',
 'luz': 'لئری دوٙمینی',
 'lv': 'latviešu',
 'lzh': '文言',
 'lzz': 'Lazuri',
 'mai': 'मैथिली',
 'map-bms': 'Basa Banyumasan',
 'mdf': 'мокшень',
 'mg': 'Malagasy',
 'mh': 'Ebon',
 'mhr': 'олык марий',
 'mi': 'Māori',
 'min': 'Minangkabau',
 'mk': 'македонски',
 'ml': 'മലയാളം',
 'mn': 'монгол',
 'mni': 'ꯃꯤꯇꯩ ꯂꯣꯟ',
 'mnw': 'ဘာသာ မန်',
 'mo': 'молдовеняскэ',
 'mr': 'मराठी',
 'mrj': 'кырык мары',
 'ms': 'Bahasa Melayu',
 'mt': 'Malti',
 'mus': 'Mvskoke',
 'mwl': 'Mirandés',
 'my': 'မြန်မာဘာသာ',
 'myv': 'эрзянь',
 'mzn': 'مازِرونی',
 'na': 'Dorerin Naoero',
 'nah': 'Nāhuatl',
 'nan': 'Bân-lâm-gú',
 'nap': 'Napulitano',
 'nb': 'norsk bokmål',
 'nds': 'Plattdüütsch',
 'nds-nl': 'Nedersaksies',
 'ne': 'नेपाली',
 'new': 'नेपाल भाषा',
 'ng': 'Oshiwambo',
 'niu': 'Niuē',
 'nl': 'Nederlands',
 'nl-informal': 'Nederlands (informeel)\u200e',
 'nn': 'norsk nynorsk',
 'no': 'norsk',
 'nov': 'Novial',
 'nqo': 'ߒߞߏ',
 'nrm': 'Nouormand',
 'nso': 'Sesotho sa Leboa',
 'nv': 'Diné bizaad',
 'ny': 'Chi-Chewa',
 'nys': 'Nyunga',
 'oc': 'occitan',
 'olo': 'Livvinkarjala',
 'om': 'Oromoo',
 'or': 'ଓଡ଼ିଆ',
 'os': 'Ирон',
 'pa': 'ਪੰਜਾਬੀ',
 'pag': 'Pangasinan',
 'pam': 'Kapampangan',
 'pap': 'Papiamentu',
 'pcd': 'Picard',
 'pdc': 'Deitsch',
 'pdt': 'Plautdietsch',
 'pfl': 'Pälzisch',
 'pi': 'पालि',
 'pih': 'Norfuk / Pitkern',
 'pl': 'polski',
 'pms': 'Piemontèis',
 'pnb': 'پنجابی',
 'pnt': 'Ποντιακά',
 'prg': 'Prūsiskan',
 'ps': 'پښتو',
 'pt': 'português',
 'pt-br': 'português do Brasil',
 'qu': 'Runa Simi',
 'qug': 'Runa shimi',
 'rgn': 'Rumagnôl',
 'rif': 'Tarifit',
 'rm': 'rumantsch',
 'rmy': 'romani čhib',
 'rn': 'Kirundi',
 'ro': 'română',
 'roa-rup': 'armãneashti',
 'roa-tara': 'tarandíne',
 'ru': 'русский',
 'rue': 'русиньскый',
 'rup': 'armãneashti',
 'ruq': 'Vlăheşte',
 'ruq-cyrl': 'Влахесте',
 'ruq-latn': 'Vlăheşte',
 'rw': 'Kinyarwanda',
 'sa': 'संस्कृतम्',
 'sah': 'саха тыла',
 'sat': 'ᱥᱟᱱᱛᱟᱲᱤ',
 'sc': 'sardu',
 'scn': 'sicilianu',
 'sco': 'Scots',
 'sd': 'سنڌي',
 'sdc': 'Sassaresu',
 'sdh': 'کوردی خوارگ',
 'se': 'davvisámegiella',
 'sei': 'Cmique Itom',
 'ses': 'Koyraboro Senni',
 'sg': 'Sängö',
 'sgs': 'žemaitėška',
 'sh': 'srpskohrvatski / српскохрватски',
 'shi': 'Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ',
 'shi-latn': 'Tašlḥiyt',
 'shi-tfng': 'ⵜⴰⵛⵍⵃⵉⵜ',
 'shn': 'ၽႃႇသႃႇတႆး ',
 'shy-latn': 'tacawit',
 'si': 'සිංහල',
 'simple': 'Simple English',
 'sk': 'slovenčina',
 'skr': 'سرائیکی',
 'skr-arab': 'سرائیکی',
 'sl': 'slovenščina',
 'sli': 'Schläsch',
 'sm': 'Gagana Samoa',
 'sma': 'Åarjelsaemien',
 'sn': 'chiShona',
 'so': 'Soomaaliga',
 'sq': 'shqip',
 'sr': 'српски / srpski',
 'sr-ec': 'српски (ћирилица)\u200e',
 'sr-el': 'srpski (latinica)\u200e',
 'srn': 'Sranantongo',
 'ss': 'SiSwati',
 'st': 'Sesotho',
 'stq': 'Seeltersk',
 'sty': 'cебертатар',
 'su': 'Sunda',
 'sv': 'svenska',
 'sw': 'Kiswahili',
 'szl': 'ślůnski',
 'szy': 'Sakizaya',
 'ta': 'தமிழ்',
 'tay': 'Tayal',
 'tcy': 'ತುಳು',
 'te': 'తెలుగు',
 'tet': 'tetun',
 'tg': 'тоҷикӣ',
 'tg-cyrl': 'тоҷикӣ',
 'tg-latn': 'tojikī',
 'th': 'ไทย',
 'ti': 'ትግርኛ',
 'tk': 'Türkmençe',
 'tl': 'Tagalog',
 'tly': 'толышә зывон',
 'tn': 'Setswana',
 'to': 'lea faka-Tonga',
 'tpi': 'Tok Pisin',
 'tr': 'Türkçe',
 'tru': 'Ṫuroyo',
 'ts': 'Xitsonga',
 'tt': 'татарча/tatarça',
 'tt-cyrl': 'татарча',
 'tt-latn': 'tatarça',
 'tum': 'chiTumbuka',
 'tw': 'Twi',
 'ty': 'reo tahiti',
 'tyv': 'тыва дыл',
 'tzm': 'ⵜⴰⵎⴰⵣⵉⵖⵜ',
 'udm': 'удмурт',
 'ug': 'ئۇيغۇرچە / Uyghurche',
 'ug-arab': 'ئۇيغۇرچە',
 'ug-latn': 'Uyghurche',
 'uk': 'українська',
 'ur': 'اردو',
 'uz': 'oʻzbekcha/ўзбекча',
 'uz-cyrl': 'ўзбекча',
 'uz-latn': 'oʻzbekcha',
 've': 'Tshivenda',
 'vec': 'vèneto',
 'vep': 'vepsän kel’',
 'vi': 'Tiếng Việt',
 'vls': 'West-Vlams',
 'vmf': 'Mainfränkisch',
 'vo': 'Volapük',
 'vot': 'Vaďďa',
 'vro': 'Võro',
 'wa': 'walon',
 'war': 'Winaray',
 'wo': 'Wolof',
 'wuu': '吴语',
 'xal': 'хальмг',
 'xh': 'isiXhosa',
 'xmf': 'მარგალური',
 'xsy': 'saisiyat',
 'yi': 'ייִדיש',
 'yo': 'Yorùbá',
 'yue': '粵語',
 'za': 'Vahcuengh',
 'zea': 'Zeêuws',
 'zgh': 'ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ',
 'zh': '中文',
 'zh-classical': '文言',
 'zh-cn': '中文(中国大陆)\u200e',
 'zh-hans': '中文(简体)\u200e',
 'zh-hant': '中文(繁體)\u200e',
 'zh-hk': '中文(香港)\u200e',
 'zh-min-nan': 'Bân-lâm-gú',
 'zh-mo': '中文(澳門)\u200e',
 'zh-my': '中文(马来西亚)\u200e',
 'zh-sg': '中文(新加坡)\u200e',
 'zh-tw': '中文(台灣)\u200e',
 'zh-yue': '粵語',
 'zu': 'isiZulu'}

Le résultat est affiché sous la forme d’un dictionnaire : chaque clé représente le préfixe associé à une langue. Calculons la longueur de ce dictionnaire :

# Return the number of available languages
len(wikipedia.languages())
444

Il y aurait donc 444 encyclopédies Wikipédia, chacune dans une langue différente. En réalité, il y en a moins, environ 300, un nombre qui demeure néanmoins impressionnant !

Le choix de la langue s’effectue en utilisant le préfixe associé :

# Set Wikipedia language
wikipedia.set_lang("fr")

On est maintenant prêt pour effectuer notre première recherche :

# Search "python" in FR Wikipedia
wikipedia.search("python")
['Python (langage)',
 'Monty Python',
 'Python',
 'Python royal',
 'Python (mythologie)',
 'Python (serpent)',
 'Liste de logiciels Python',
 'Python réticulé',
 'Python (genre)',
 'IDLE (Python)']

Par défaut, on obtient une liste des titres de 10 pages Wikipédia correspondant à notre recherche avec le mot « python ». On peut modifier ce nombre avec l’option « results » :

# Search "python" in FR Wikipédia (print 3 results only)
wikipedia.search("python", results=3)
['Python (langage)',
'Monty Python',
'Python']

Pour accéder au sommaire d’un page donnée, on procède comme suit :

# Get page summary
wikipedia.summary("Python (langage)")
"Python (/ˈpaɪ.θɑn/) est un langage de programmation interprété, multi-paradigme et multiplateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.\nLe langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plates-formes informatiques, des smartphones aux ordinateurs centraux, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser.\nIl est également apprécié par certains pédagogues qui y trouvent un langage où la syntaxe, clairement séparée des mécanismes de bas niveau, permet une initiation aisée aux concepts de base de la programmation.\n\n"

Il s’agit bien du sommaire de la page Wikipédia « Python (langage) » encadré ici en bleu :

Le sommaire c’est bien, le contenu de toute la page c’est encore mieux. Pour cela, on va d’abord créer un objet « WikipediaPage » :

# Create a WikipediaPage object
wikipedia.page("Python (langage)")
<WikipediaPage 'Python (langage)'>

L’attribut « content » nous permettra ensuite d’accéder à tout le contenu de la page :

# Get page content
wikipedia.page("Python (langage)").content
'Python (/ˈpaɪ.θɑn/) est un langage de programmation interprété, multi-paradigme et multiplateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d\'un typage dynamique fort, d\'une gestion automatique de la mémoire par ramasse-miettes et d\'un système de gestion d\'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.\nLe langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plates-formes informatiques, des smartphones aux ordinateurs centraux, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser.\nIl est également apprécié par certains pédagogues qui y trouvent un langage où la syntaxe, clairement séparée des mécanismes de bas niveau, permet une initiation aisée aux concepts de base de la programmation.\n\n\n== Utilisation ==\nPython est un langage qui peut s\'utiliser dans de nombreux contextes et s\'adapter à tout type d\'utilisation grâce à des bibliothèques spécialisées. Il est cependant particulièrement utilisé comme langage de script pour automatiser des tâches simples mais fastidieuses, comme un script qui récupérerait la météo sur Internet ou qui s\'intégrerait dans un logiciel de conception assistée par ordinateur afin d\'automatiser certains enchaînements d\'actions répétitives (voir la section Adoption). On l\'utilise également comme langage de développement de prototype lorsqu\'on a besoin d\'une application fonctionnelle avant de l\'optimiser avec un langage de plus bas niveau. Il est particulièrement répandu dans le monde scientifique, et possède de nombreuses bibliothèques optimisées destinées au calcul numérique.\n\n\n== Historique ==\n\n\n=== Au CWI ===\n\nÀ la fin des années 1980, le programmeur Guido van Rossum participe au développement du langage de programmation ABC au Centrum voor Wiskunde en Informatica (CWI) d\'Amsterdam, aux Pays-Bas. Il travaillait alors dans l’équipe du système d’exploitation Amoeba dont les appels systèmes étaient difficilement interfaçables avec le Bourne shell utilisé comme interface utilisateur. Il estime alors qu’un langage de script inspiré d’ABC pourrait être intéressant comme interpréteur de commandes pour Amoeba.\nEn 1989, profitant d’une semaine de vacances durant les fêtes de Noël, il utilise son ordinateur personnel pour écrire la première version du langage. Fan de la série télévisée Monty Python\'s Flying Circus, il décide de baptiser ce projet Python. Il s’est principalement inspiré d’ABC, par exemple pour l’indentation comme syntaxe ou les types de haut niveau mais aussi de Modula-3 pour la gestion des exceptions, du langage C et des outils UNIX.\nDurant l’année suivante, le langage commence à être adopté par l’équipe du projet Amoeba, Guido poursuivant son développement principalement pendant son temps libre. En février 1991, la première version publique, numérotée 0.9.0, est postée sur le forum Usenet alt.sources. La dernière version sortie au CWI fut Python 1.2.\n\n\n=== Au CNRI ===\nEn 1995, Van Rossum continua son travail sur Python au CNRI (en) à Reston, aux États-Unis, où il sortit plusieurs versions du logiciel.\nÀ partir d\'août 1995, l\'équipe Python travaille au CNRI sur Grail un navigateur web utilisant Tk. Il est l\'équivalent pour Python du navigateur HotJava, permettant d\'exécuter des applets dans un environnement sécurisé. La première version publique, disponible en novembre, est la 0.2. Il a entraîné le développement de modules pour la bibliothèque standard comme rexec, htmllib ou urllib. La version 0.6 sera la dernière de Grail ; elle est publiée en avril 1999.\nEn 1999, le projet Computer Programming for Everybody (CP4E) est lancé avec collaboration entre le CNRI et la DARPA. Il s\'agit d\'utiliser Python comme langage d\'enseignement de la programmation. Cette initiative conduira à la création de l\'environnement de développement IDLE. Cependant, du fait du manque de financement du projet par la DARPA, et du départ de nombreux développeurs Python du CNRI (dont Guido van Rossum), le projet s’éteint en 2000. Python 1.6 fut la dernière version sortie au CNRI.\n\n\n=== À BeOpen ===\nEn 2000, l\'équipe principale de développement de Python déménagea à BeOpen.com pour former l\'équipe PythonLabs de BeOpen. Python 2.0 fut la seule version sortie à BeOpen.com. Après cette version, Guido Van Rossum et les autres développeurs de PythonLabs rejoignirent Digital Creations (à présent connue sous le nom de Zope Corporation).\nAndrew M. Kuchling a publié en décembre 1999 un texte nommé Python Warts qui synthétise les griefs les plus fréquents exprimés à l\'encontre du langage. Ce document aura une influence certaine sur les développements futurs du langage.\n\n\n=== La Python Software Foundation ===\nPython 2.1 fut une version dérivée de Python 1.6.1, ainsi que de Python 2.0. Sa licence fut renommée Python Software Foundation License. Tout code, documentation et spécification ajouté, depuis la sortie de Python 2.1 alpha, est détenu par la Python Software Foundation (PSF), une association sans but lucratif fondée en 2001, modelée d\'après l\'Apache Software Foundation.\nAfin de réparer certains défauts du langage (par exemple l\'orienté objet avec deux types de classes), et pour nettoyer la bibliothèque standard de ses éléments obsolètes et redondants, Python a choisi de casser la compatibilité ascendante dans la nouvelle version majeure, Python 3.0, publié en décembre 2008. Cette version a été suivie rapidement par une version 3.1 qui corrige les erreurs de jeunesse de la version 3.0.\n\n\n== Caractéristiques ==\n\n\n=== Syntaxe ===\nPython a été conçu pour être un langage lisible. Il vise à être visuellement épuré. Par exemple, il possède moins de constructions syntaxiques que de nombreux langages structurés tels que C, Perl, ou Pascal. Les commentaires sont indiqués par le caractère croisillon (#).\nLes blocs sont identifiés par l\'indentation, au lieu d\'accolades comme en C ou C++ ; ou de begin ... end comme en Pascal ou Ruby. Une augmentation de l\'indentation marque le début d\'un bloc, et une réduction de l\'indentation marque la fin du bloc courant. Par convention (actuellement PEP8), l\'indentation est habituellement de quatre espaces en Python.\n\nNB : l\'indentation pourrait être modifiée ou supprimée dans la version en C sans modifier son comportement. De même la fonction Python peut être écrite avec une expression conditionnelle. Cependant, une indentation correcte permet de détecter plus aisément des erreurs en cas d\'imbrication de plusieurs blocs et facilite donc l\'élimination de ces erreurs. C\'est pourquoi il est préférable d\'indenter convenablement les programmes en C. La version courte s\'écrirait ainsi :\n\n\n==== Mots-clés du langage ====\nLes mots-clés sont fournis dans la liste keyword.kwlist du module keyword. Les mots-clés de Python 2.7.5 sont les suivants : and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield.\nÀ partir de Python 3.0, print et exec ne sont plus des mots-clés du langage, mais des fonctions du module builtins. Sont ajoutés aux mots-clés : True, False, None et nonlocal. Les trois premiers étaient déjà présents dans les versions précédentes, mais ils ne sont plus modifiables (auparavant, l\'affectation True = 1 était possible). nonlocal a été introduit par le PEP 3104, et permet, dans une fonction définie à l\'intérieur d\'une autre fonction, de modifier une variable d\'un niveau supérieur de portée. Avant cela, seules les variables locales à la fonction, et globales (niveau module) étaient modifiables. Toutefois, il était possible, et ça l\'est toujours sans le mot-clé nonlocal, de modifier un objet affecté à une variable d\'un niveau de portée supérieur, par exemple une liste avec la méthode append - c\'est évidemment impossible pour un objet immuable.\n\n\n==== Types de base ====\nLes types de base en Python sont relativement complets et puissants. Il y a, entre autres :\n\nLes objets numériques\nint est un entier. Avant la version 3.0, ce type était dénommé long, et le type int correspondait à un entier de 32 ou 64 bits. Néanmoins, une conversion automatique évitait tout débordement. Maintenant, ce type correspond à un entier codé sur 32 bits ou moins.\nlong est un entier illimité de plus de 32 bits en Python 3.\nfloat est un flottant équivalent au type double du C, soit un nombre entre −1,7×10308 et 1,7×10308 sur les plateformes en conformité avec l\'IEEE 754.\ncomplex est une approximation d\'un nombre complexe (typiquement deux float).\nLes objets « itérables »\nLes objets tuple (n-uplet) sont des listes immuables d\'objets hétérogènes.\nLes objets list sont des tableaux dynamiques (ils étendent automatiquement leur taille lorsque nécessaire) et acceptent des types de données hétérogènes.\nLes objets set sont des ensembles non ordonnés d\'objets.\nLes objets frozenset forment une variante immuable des set.\nLes objets dict sont des tableaux associatifs (ou dictionnaires) permettant d\'associer un objet (une clef) à un autre.\nLes objets str sont des chaînes de caractères. À partir de la version 3.0, les caractères sont en Unicode sur 16 ou 32 bits ; les chaines d\'octets sont des objets bytes. Dans les versions précédentes, ces objets étaient respectivement de type unicode et str. Les objets str et bytes sont immuables.\nLes objets bytearray sont des chaînes d\'octets modifiables. La version d\'Unicode employée par Python peut être déterminée à l\'aide de la variable unidata_version du module unicodedata.\nLes objets file correspond à un fichier obtenu grâce à la méthode open()\nIl existe aussi d\'autres types d\'objets itérables, notamment xrange obtenu via la méthode range(), et les types liés aux méthodes de dictionnaires .keys(), .values() et .items(). La plupart d\'entre eux sont immuables.\nLes autres objets, n\'étant ni numériques ni itérables\nNone est simplement le type d\'un "vide". Il sert à dénoter qu\'une variable est vide.\ntype est le type du type des objets, obtenu grâce à la méthode type().\nobject est le type basique dont tous les autres types "héritent"\nslice est une partie de type ou un objet extensible\nNotImplementedType est, comme son nom l\'indique, une absence d\'implémentation du type auquel on essaie d\'accéder.\nbool est un booléen, soit le type de True et False renvoyés par exemple lors de comparaisons or de l\'utilisation de méthodes is_x().\nexception est le type d\'un message d\'erreur lancé lorsque le code lève une exception.\nfunction est le type d\'une fonction, utilisé lors de l\'appel des mots-clef def et lambda.\nmodule est le type d\'un module, utilisé lors de l\'appel des mots-clef import et from.Les objets itérables sont parcourus à l\'aide d\'une boucle for de la manière suivante :\n\nPour une chaîne de caractères, l\'itération procède caractère par caractère.\nIl est possible de dériver les classes des types de base pour créer ses propres types.\nOn peut également fabriquer ses propres types d\'objets itérables sans hériter des itérables de base en utilisant le protocole d\'itération du langage.\n\n\n==== Programmation fonctionnelle ====\nPython permet de programmer dans un style fonctionnel. Il dispose également des compréhensions de listes, et plus généralement les compréhensions peuvent produire des générateurs, des dictionnaires ou des ensembles. Par exemple, pour construire la liste des carrés des entiers naturels plus petits que 10, on peut utiliser l\'expression :\n\nLa liste des nombres pairs :\n\nUne table de passage des lettres de l\'alphabet vers leur code ASCII :\n\nL\'ensemble des lettres d\'un mot (produit l\'ensemble {\'r\', \'c\', \'d\', \'b\', \'a\'}) :\n\nUne compréhension peut comprendre plusieurs boucles et filtres, et il existe une correspondance avec le code réalisant le même calcul à l\'aide d\'instructions for et if :\n\nUne forme limitée de fonction anonyme est possible :\n\nLes fonctions lambda peuvent être définies en ligne et utilisées comme arguments dans des expressions fonctionnelles :  retournera une liste constituée des éléments de une_liste inférieurs à 5. Le même résultat peut être obtenu avec \nLes lambdas de Python n\'admettent que des expressions et ne peuvent être utilisées comme fonctions anonymes généralisées ; mais en Python, toutes les fonctions sont des objets, elles peuvent donc être passées en arguments à d\'autres fonctions, et appelées lorsque c\'est nécessaire. En effet, une fonction définie avec def peut être créée à l\'intérieur d\'une autre fonction et on obtient ainsi une définition de fonction dans une variable locale, par exemple :\n\nUne fonction locale peut modifier l\'environnement de la fonction qui l\'a créée, grâce au mot-clé nonlocal (voir Fermeture (informatique)) :\n\nOn peut ainsi créer plusieurs accumulateurs, faisant chacun référence à son propre total. Il est possible d\'accéder à l\'environnement d\'une fonction locale à l\'aide de l\'attribut __closure__.\n\n\n==== Programmation objet ====\nTous les types de base, les fonctions, les instances de classes (les objets « classiques » des langages C++ et Java) et les classes elles-mêmes (qui sont des instances de méta-classes) sont des objets.\nUne classe se définit avec le mot-clé class. Les classes Python supportent l\'héritage multiple ; il n\'y a pas de surcharge statique comme en C++, ou de restrictions sur l\'héritage comme c\'est le cas en Java (une classe implémente plusieurs interfaces et hérite d\'une seule classe) mais le mécanisme des arguments optionnels et par mot-clé est plus général et plus flexible. En Python, l\'attribut d\'un objet peut référencer une variable d\'instance ou de classe (le plus souvent une méthode). Il est possible de lire ou de modifier un attribut dynamiquement avec les fonctions :\n\ngetattr(objet, "nom_attribut") \nsetattr(objet, "nom_attribut", nouvel_attribut)Exemple de deux classes simples :\n\n\n==== Méthodes spéciales et définition des opérateurs ====\nPython fournit un mécanisme élégant et orienté objet pour définir un ensemble pré-défini d\'opérateurs : tout objet Python peut se voir doté de méthodes dites spéciales.\nCes méthodes, commençant et finissant par deux tirets de soulignement (underscores), sont appelées lors de l\'utilisation d\'un opérateur sur l\'objet : + (méthode __add__), += (méthode __iadd__), [] (méthode __getitem__), () (méthode __call__), etc. Des méthodes comme __repr__ et __str__ permettent de définir la représentation d\'un objet dans l\'interpréteur interactif et son rendu avec la fonction print.\nLes possibilités sont nombreuses et sont décrites dans la documentation du langage.\nPar exemple on peut définir l\'addition de deux vecteurs à deux dimensions avec la classe suivante :\n\n\n==== Générateurs ====\nLe mot-clef yield utilisé dans une fonction permet de faire de cette fonction un générateur. L\'appel de cette fonction renvoie un objet de type generator, qui peut être utilisé dans une boucle for, par exemple.\nÀ chaque appel, le générateur effectue son traitement jusqu\'à rencontrer le mot-clé yield, renvoie la valeur de l\'expression yield, et à l\'appel suivant, reprend son déroulement juste après le yield. Par exemple pour calculer la suite de Fibonacci, on peut écrire :\n\nLe module itertools permet de manipuler les générateurs. Par exemple, pour extraire les 10 premiers éléments du générateur précédent :\n\nDepuis Python 3.3, il est possible de produire un générateur à partir d\'une fonction récursive, grâce à la syntaxe yield from, apparue dans le PEP 380 et qui « délègue » le calcul à un sous-générateur. L\'exemple suivant calcule les permutations des dames correspondant aux solutions du problème des huit dames étendu à un échiquier de taille n × n.\n\nUn générateur peut sembler identique à une fonction qui retourne une liste, mais contrairement à une liste qui contient tous ses éléments, un générateur calcule ses éléments un par un.Ainsi, le test 36 in [n * n for n in range(10)] va s\'effectuer sur la liste calculée en entier, alors que dans 36 in (n * n for n in range(10)), qui utilise un générateur, le calcul des carrés s\'arrête dès que 36 est trouvé. On peut s\'en convaincre en remplaçant n * n par un appel de fonction réalisant un effet de bord, par exemple un affichage à l\'écran.\n\n\n=== Réflexivité ===\nGrâce à un usage intensif des dictionnaires (conteneur associatif développé avec des tables de hachage), Python permet d\'explorer les divers objets du langage (introspection) et dans certains cas de les modifier (intercession).\n\n\n=== Typage ===\n\nLe typage n\'est pas vérifié à la compilation. Python utilise le duck typing : lors de l’exécution, si une méthode invoquée sur un objet a la même signature qu\'une méthode déclarée sur cet objet, alors c\'est cette dernière méthode qui est exécutée. De ce fait, invoquer une méthode qui n\'existe pas sur un objet va échouer, signifiant que l\'objet en question n\'est pas du bon type. Malgré l\'absence de typage statique, Python est fortement typé, interdisant des opérations ayant peu de sens (par exemple, additionner un nombre à une chaîne de caractères) au lieu de tenter silencieusement de la convertir en une forme qui a du sens. Python propose des fonctions permettant de transformer les variables dans un autre type :\n\nPython propose aussi un mécanisme de typage statique pour les attributs des classes grâce à l\'API trait ou au patron de conception decorators.\n\n\n==== Compilation ====\nIl est possible d\'effectuer une analyse statique des modules Python avec des outils comme Pylint , mypy , ou PyChecker. Sans nécessiter une exécution, ces outils repèrent des fautes ou des constructions déconseillées. Par exemple, une classe qui hérite d\'une classe abstraite et qui ne redéfinit pas les méthodes abstraites, ou bien des variables utilisées avant d\'être déclarées, ou encore des attributs d\'instance déclarés en dehors de la méthode __init__.\nIl est aussi possible de générer un code intermédiaire (bytecode) Python.\nDes outils comme PyInstaller ou d\'autres plus spécifiques comme cx_Freeze sous Unix, Windows et macOS, py2app sous macOS et py2exe sous Windows permettent de « compiler » un programme Python sous forme d\'un exécutable comprenant le programme et un interpréteur Python.\nLe programme ne tourne pas plus rapidement (il n\'est pas compilé sous forme de code machine) mais cela simplifie largement sa distribution, notamment sur des machines où l\'interpréteur Python n\'est pas installé.\n\n\n=== Modèle objet ===\nEn Python, tout est objet, dans le sens qu\'une variable peut contenir une référence vers tous les éléments manipulés par le langage : nombres, méthodes, modules, etc.. Néanmoins, avant la version 2.2, les classes et les instances de classes étaient un type d\'objet particulier, ce qui signifiait qu\'il était par exemple impossible de dériver sa propre sous-classe de l\'objet list.\n\n\n==== Méthodes ====\nLe modèle objet de Python est inspiré de celui de Modula-3. Parmi ces emprunts se trouve l\'obligation de déclarer l\'instance de l\'objet courant, conventionnellement nommée self, comme premier argument des méthodes, et à chaque fois que l\'on souhaite accéder à une donnée de cette instance dans le corps de cette méthode. Cette pratique n\'est pas naturelle pour des programmeurs venant par exemple de C++ ou Java, la profusion des self étant souvent critiquée comme étant une pollution visuelle qui gêne la lecture du code. Les promoteurs du self explicite estiment au contraire qu\'il évite le recours à des conventions de nommage pour les données membres et qu\'il simplifie des tâches comme l\'appel à une méthode de la superclasse ou la résolution d\'homonymie entre données membres.\nPython reconnaît trois types de méthodes :\n\nles méthodes d\'instance, qui sont celles définies par défaut. Elles reçoivent comme premier argument une instance de la classe où elles ont été définies.\nles méthodes de classe, qui reçoivent comme premier argument la classe où elles ont été définies. Elles peuvent être appelées depuis une instance ou directement depuis la classe. Elles permettent de définir des constructeurs alternatifs comme la méthode fromkeys() de l\'objet dict. Elles sont déclarées avec le décorateur @classmethod.\nles méthodes statiques, qui ne reçoivent pas de premier argument implicite. Elles sont similaires aux méthodes statiques que l\'on trouve en Java ou C++. Elles sont déclarées avec le décorateur @staticmethod.\n\n\n==== Visibilité ====\nLe langage a un support très limité de l\'encapsulation. Il n\'y a pas, comme en Java par exemple, de contrôle de l\'accessibilité par des mots clefs comme protected ou private.\nLa philosophie de Python est de différencier conceptuellement l\'encapsulation du masquage d\'information. Le masquage d\'information vise à prévenir les utilisations frauduleuses, c\'est une préoccupation de sécurité informatique. Le module bastion de la bibliothèque standard, qui n\'est plus maintenu dans les dernières versions du langage, permettait ainsi de contrôler l\'accès aux attributs d\'un objet dans le cadre d\'un environnement d\'exécution restreint.\nL\'encapsulation est une problématique de développement logiciel. Le slogan des développeurs Python est we\'re all consenting adults here (nous sommes entre adultes consentants). Ils estiment en effet qu\'il suffit d\'indiquer, par des conventions d\'écriture, les parties publiques des interfaces et que c\'est aux utilisateurs des objets de se conformer à ces conventions ou de prendre leurs responsabilités. L\'usage est de préfixer par un underscore les membres privés. Le langage permet par ailleurs d\'utiliser un double underscore pour éviter les collisions de noms, en préfixant automatiquement le nom de la donnée par celui de la classe où elle est définie.\nL\'utilisation de la fonction property() permet de définir des propriétés qui ont pour but d\'intercepter, à l\'aide de méthodes, les accès à une donnée membre. Cela rend inutile la définition systématique d\'accesseurs et le masquage des données comme il est courant de le faire en C++ par exemple.\n\n\n==== Héritage ====\nPython supporte l\'héritage multiple. Depuis la version 2.3, il utilise l\'algorithme C3 (en), issu du langage Dylan, pour résoudre l\'ordre de résolution de méthode (MRO). Les versions précédentes utilisaient un algorithme de parcours en profondeur qui posait des problèmes dans le cas d\'un héritage en diamant.\n\n\n== Bibliothèque standard ==\n\nPython possède une grande bibliothèque standard, fournissant des outils convenant à de nombreuses tâches diverses. Le nombre de modules de la bibliothèque standard peut être augmenté avec des modules spécifiques écrits en C ou en Python.\nLa bibliothèque standard est particulièrement bien conçue pour écrire des applications utilisant Internet, avec un grand nombre de formats et de protocoles standards gérés (tels que MIME et HTTP). Des modules pour créer des interfaces graphiques et manipuler des expressions rationnelles sont également fournis. Python inclut également un framework de tests unitaires (unittest, anciennement PyUnit avant version 2.1) pour créer des suites de tests exhaustives.\n\n\n== Conventions de style ==\nBien que chaque programmeur puisse adopter ses propres conventions pour l\'écriture de code Python, Guido van Rossum a mis un guide à disposition, référencé comme « PEP 8 ». Publié en 2001, il est toujours maintenu pour l\'adapter aux évolutions du langage. Google propose également un guide.\n\n\n== Interfaces graphiques ==\nPython possède plusieurs modules disponibles pour la création de logiciels avec une interface graphique. Le plus répandu est Tkinter. Ce module convient à beaucoup d\'applications et peut être considéré comme suffisant dans la plupart des cas. Néanmoins, d\'autres modules ont été créés pour pouvoir lier Python à d\'autres bibliothèques logicielles (« toolkit »), pour davantage de fonctionnalités, pour une meilleure intégration avec le système d\'exploitation utilisé, ou simplement pour pouvoir utiliser Python avec sa bibliothèque préférée. En effet, certains programmeurs trouvent l\'utilisation de Tkinter plus pénible que d\'autres bibliothèques. Ces autres modules ne font pas partie de la bibliothèque standard et doivent donc être obtenus séparément.\nLes principaux modules donnant accès aux bibliothèques d\'interface graphique sont Tkinter et Pmw (Python megawidgets) pour Tk, wxPython pour wxWidgets, PyGTK pour GTK+, PyQt et PySide pour Qt, et enfin FxPy pour le FOX Toolkit. Il existe aussi une adaptation de la bibliothèque SDL : Pygame, un binding de la SFML : PySFML, ainsi qu\'une bibliothèque écrite spécialement pour Python : Pyglet (en).\nIl est aussi possible de créer des applications Silverlight en Python sur la plateforme IronPython.\n\n\n== La communauté Python ==\nGuido van Rossum est le principal auteur de Python, et son rôle de décideur central permanent de Python est reconnu avec humour par le titre de « Dictateur bienveillant à vie » (Benevolent Dictator for Life, BDFL).\nIl est assisté d\'une équipe de core developers qui ont un accès en écriture au dépôt de CPython et qui se coordonnent sur la liste de diffusion python-dev. Ils travaillent principalement sur le langage et la bibliothèque de base. Ils reçoivent ponctuellement les contributions d\'autres développeurs Python via la plateforme de gestion de bug Roundup, qui a remplacé SourceForge.\nLes utilisateurs ou développeurs de bibliothèques tierces utilisent diverses autres ressources. Le principal média généraliste autour de Python est le forum Usenet anglophone comp.lang.python.\nLes allusions aux Monty Python sont assez fréquentes. Les didacticiels consacrés à Python utilisent souvent les mots spam et eggs comme variable métasyntaxique. Il s\'agit d\'une référence au sketch Spam des Monty Python, où deux clients tentent de commander un repas à l\'aide d\'une carte qui contient du jambon en conserve de marque SPAM dans pratiquement tous les plats. Ce sketch a été aussi pris pour référence pour désigner un courriel non sollicité.\n\n\n=== Adoption de Python ===\n\nPlusieurs entreprises ou organismes mentionnent sur leur site officiel qu\'ils utilisent Python :\n\nGoogle (Guido van Rossum a travaillé au sein de cette entreprise entre 2005 et 2012) ;\nIndustrial Light & Magic ;\nla NASA ;\net CCP Games, les créateurs du jeu vidéo EVE Online.Python est aussi le langage de commande d\'un grand nombre de logiciels libres :\n\nFreeCAD, logiciel de CAO 3D\nBlender, logiciel de modélisation 3D et d\'édition vidéo\nInkscape, logiciel de dessin vectoriel\nLibreOffice et Apache OpenOffice, les deux branches de développement d\'une suite bureautique issue de StarOffice\nPortage, le gestionnaire de paquets du système d\'exploitation Gentoo\nParaView, logiciel de visualisation de données numériques\nKodi, un lecteur multimédia\nQGIS, un logiciel de cartographie\nWeblate, un outil de traduction\ngedit, un éditeur de texte (les plugins sont écrits en Python)\nSageMath, un logiciel de calcul formelEt commerciaux :\n\nWing IDE, environnement de développement intégré spécialisé sur Python, et écrit en Python\nCorel Paint Shop Pro, logiciel de traitement d’image et d\'édition graphique\ncapella, logiciel de notation musicale\nArcGIS, un logiciel de cartographiePython est utilisé comme langage de programmation dans l\'enseignement élémentaire et supérieur, notamment en France. Depuis 2013, il y est enseigné, en même temps que Scilab, à tous les étudiants de classes préparatoires scientifiques dans le cadre du tronc commun (informatique pour tous). Auparavant, l\'enseignement d\'informatique était limité à une option en MP, l\'enseignement se faisant en langage Caml ou Pascal. Cette option existe toujours, mais Pascal a été abandonné à partir de la session 2015 des concours, ne reste donc que Caml dans cet enseignement. Les premières épreuves de concours portant sur le langage Python sont également celles de la session 2015,.\n\n\n== Implémentations du langage ==\nOutre la version de référence, nommée CPython (car écrite en langage C), il existe d\'autres systèmes mettant en œuvre le langage Python :\n\nStackless Python, une version de CPython n\'utilisant pas la pile d\'appel du langage C ;\nJython, un interprète Python pour machine virtuelle Java. Il a accès aux bibliothèques fournies avec l\'environnement de développement Java ;\nIronPython, un interprète / compilateur (expérimental) pour plateforme .Net / Mono ;\nBrython, une implémentation de Python 3 pour les navigateurs web ;\nMicroPython, variante légère pour microcontrôleurs ;\nPyPy un interprète Python écrit dans un sous-ensemble de Python compilable vers le C ou LLVM ;\nun compilateur (expérimental) pour Parrot, la machine virtuelle de Perl 6 ;\nShed Skin, un compilateur d\'un sous-ensemble de Python produisant du code en C++ ;\nUnladen Swallow (en), une version de CPython optimisée et basée sur LLVM, maintenant abandonnée (la dernière version remonte à octobre 2009) ;\nRustPython, projet d’implémentation en Rust.Ces autres versions ne bénéficient pas forcément de la totalité de la bibliothèque de fonctions écrites en C pour la version de référence, ni des dernières évolutions du langage.\n\n\n== Distributions de Python ==\nDifférentes distributions sont disponibles, qui incluent parfois beaucoup de paquets dédiés à un domaine donné :\n\nActivePython : disponible en version gratuite (ne pouvant être « utilisée en production ») ou commerciale.\nPython(x,y) : distribution Python à l\'usage des scientifiques basée sur Qt et Eclipse. Obsolète, remplacé par WinPython\nEnthought Canopy : distribution à usage scientifique, disponible en version gratuite (Canopy Express) ou commerciale.\nAnaconda : distribution à usage scientifique, disponible en version gratuite ou commerciale.\nIntel Distribution for Python : distribution basée sur Anaconda, intégrant notamment la bibliothèque MKL (en) d\'Intel afin d\'accélérer les calculs numériques de bibliothèques telles que NumPy et SciPy, intégrées à la distribution. Elle est disponible gratuitement seule, ou bien intégrée à Intel Parallel Studio, qui nécessite une licence payante.\nPyzo : « Python to the people », destinée à être facile d\'utilisation.\nWinPython: distribution à usage scientifique avec Spyder, QT, etc....Ce ne sont pas des implémentations différentes du langage Python : elles sont basées sur CPython, mais sont livrées avec un certain nombre de bibliothèques préinstallées.\n\n\n== Historique des versions ==\n\n\n== Développement ==\n\n\n=== Les PEP ===\nLes propositions d\'amélioration de Python (ou PEP : Python Enhancement Proposal) sont des documents textuels qui ont pour objet d\'être la voie d\'amélioration de Python et de précéder toutes ses modifications. Un PEP est une proposition d\'orientation pour le développement (process PEP), une proposition technique (Standard Track PEP) ou une simple recommandation (Informational PEP).\n\n\n=== Python 3 ===\nEn 2019, c\'est la version 3 de Python, qui remplace de plus en plus la version 2 (le projet était au départ appelé « Python 3000 » ou « Py3K »), sans compatibilité descendante avec la série des versions 2.x, dans le but d\'éliminer les faiblesses du langage. La ligne de conduite du projet était de « réduire la redondance de Python par la suppression de méthodes obsolètes ». Python 3.0a1, la première version alpha, avait été publiée le 31 août 2007, et il existe un PEP qui détaille les changements prévus, ainsi qu\'une page pour orienter les programmeurs dans leur choix de Python 2 ou 3.\nLes calculatrices destinées aux lycéens (dont Casio, NumWorks, Texas Instruments...) et supportant Python fonctionnent en Python 3. Ces calculatrices peuvent échanger des programmes avec des ordinateurs domestiques.\n\n\n==== Philosophie ====\nPython 3 a été développé avec la même philosophie que dans ses versions antérieures, donc toute référence à la philosophie de Python s\'appliquera aussi bien à la version 3. Cependant, le langage avait fini par accumuler nombre de méthodes redondantes. En recherchant à supprimer ce qui est redondant dans le langage et ses modules, Python 3 suit la ligne directrice de Python « Ne devrait subsister qu\'une seule méthode à la fois optimale et naturelle pour chaque chose ».\nPython 3 reste un langage multi-paradigme. Les programmeurs auront encore le choix entre l\'orientation objet, la programmation structurée, la programmation fonctionnelle et d\'autres paradigmes ; Python 3 a pour but d\'être utilisé de manière plus naturelle que dans les versions 2.x, bien que son print nécessite l\'emploi de parenthèses contrairement à Python 2.\n\n\n==== Planning et compatibilité ====\nPython 3.0a1, la première version alpha de Python 3.0, fut publiée le 31 août 2007. Les versions 2.x et 3.x de Python seront publiées en parallèle pendant plusieurs cycles de développement, pendant lesquels la série des 2.x subsistera principalement pour la compatibilité, en incluant quelques caractéristiques importées depuis Python 3.x. Le PEP 3000 contient plus d\'informations à propos du processus de publication d\'une version.\nComme Perl 6, Python 3.0 rompt la compatibilité descendante (rétro-compatibilité). L\'utilisation de code écrit pour les séries 2.x n\'est pas garantie avec Python 3.0. Ce dernier apporte des changements fondamentaux, comme le passage complet à l\'Unicode et pour cette raison une nécessaire distinction entre les chaînes de caractère et les objets « bytes ». Le typage dynamique associé à certaines méthodes sur les objets de type dictionnaire rend une transition parfaite de Python 2.x vers Python 3.0 très délicat. Un outil nommé « 2to3 » traduit le plus gros des versions 2.x vers les versions 3.x et indique les zones de code demandant des finitions par des commentaires spéciaux et des mises en garde.\nDans sa pré-version, 2to3 semble réussir franchement à réaliser une traduction correcte. Dans le cadre d\'une migration de Python 2.x vers Python 3.x, le PEP 3000 recommande de conserver le code original comme base des modifications et de le traduire pour la plateforme 3.x en utilisant 2to3.\nPython 2.6 fournit un début de compatibilité ascendante, aussi bien qu\'un mode « mise en garde » qui devrait faire prendre conscience des problèmes potentiels de transition pour le passage à Python 3.\n\n\n=== Python pour smartphones ===\nIl existe des versions de Python adaptées pour Android et iPhone en version 2.5 ou 2.6. Disponible en Jailbreak d\'iOS sur iOS grâce à "setup tools", et sur Android grâce à SL4A qui donne même une possibilité de faire des petites interfaces graphiques grâce au module "android" et qui permet d\'envoyer des SMS, d\'allumer la caméra, ou encore de faire vibrer le téléphone. Les quelques lignes suivantes montrent comment faire ça :\n\nUn portage de Python sur les terminaux Blackberry est sorti en juin 2012, pour le système BlackBerry OS 10. Une version allégée est sortie en septembre 2012, appelée « BlackBerry-Tart »,, en raison d\'un jeu de mots en anglais : « a "tart" is lighter-weight than a "pie" », en référence à la traditionnelle « apple pie ». Elle est basée sur Python 3.2.2.\n\n\n== Notes et références ==\n\n\n== Voir aussi ==\n\n\n=== Liste de frameworks principaux ===\nBibliothèques scientifiques :\nCalcul : NumPy, SciPy, Pandas, PyIMSL Studio, Sympy, SageMath\nSystème expert : pyCLIPS, pyswip, pyDatalog, pyKE (« Python Knowledge Engine »)\nVisualisation : pydot, Matplotlib, pyngl, MayaVi\nExploration de données : Orange\nSimulation : simPy\nChimie : PyMOL, MMTK, Chimera, PyQuante\nBiologie : Biopython\nUtilitaire : eGenix, ctype, Askbot\nAnalyseur syntaxique : PyParsing, PLY (« Python Lex & Yacc »), NLTK (« Natural Language Toolkit »), SpaCy\nGénérateur de documentation : Sphinx\nGraphisme : PIL / « Pillow » Soya 3D, Vpython, pymedia, NodeBox\nJeux : Pygame, Panda3D\nFramework web : Django, Karrigell, webware, Grok (en), TurboGears, Pylons (en), Flask, Bottle\nServeur web, CMS : Plone, Zope, Google App Engine, CherryPy, MoinMoin, django CMS\nCartographie : TileCache, FeatureServer, Cartoweb 4, Shapely, GeoDjango, PCL\nProtocoles :\npyTango\nSérialisation : SimpleJSON\nTCP, UDP, SSL/TLS, multicast, Unix sockets, HTTP, NNTP, IMAP, SSH, IRC, FTP : Twisted\nVecteur : GeoJSON, OWSLib, Quadtree, Rtree, Shapely, WorldMill, ZCO\nORM : SQLObject, SQLAlchemy, Storm, Django ORM\nDriver SGBD : PyGresQL, Psycopg, MySQL-python\nApprentissage : Keras\n\n\n=== Articles connexes ===\nZen de Python : principes de design et d\'utilisation de Python\nPip : gestionnaire de paquets des paquets Python.\nCython : langage permettant d\'écrire des modules compilables pour Python.\nIPython : terminal interactif.\nRUR-PLE : outil éducatif pour apprendre le Python de façon ludique en pilotant un robot virtuel.\nPyPI : dépôt tiers officiel.\n Portail de l’informatique   Portail des logiciels libres   Portail de la programmation informatique'

Si besoin, on peut aussi retourner l’URL de la page :

# Return page URL
wikipedia.page("Python (langage)").url
'https://fr.wikipedia.org/wiki/Python_(langage)'

Ou encore les URLs de toutes les images :

# Return list of images URLs
wikipedia.page("Python (langage)").images
['https://upload.wikimedia.org/wikipedia/commons/7/73/Blue_pencil.svg',
 'https://upload.wikimedia.org/wikipedia/commons/0/02/Circle-icons-computer.svg',
 'https://upload.wikimedia.org/wikipedia/commons/c/cc/Circle-icons-dev.svg',
 'https://upload.wikimedia.org/wikipedia/commons/3/3e/Disambig_colour.svg',
 'https://upload.wikimedia.org/wikipedia/commons/6/66/Guido_van_Rossum_OSCON_2006.jpg',
 'https://upload.wikimedia.org/wikipedia/commons/3/38/Info_Simple.svg',
 'https://upload.wikimedia.org/wikipedia/commons/6/6a/Nuvola_apps_emacs.png',
 'https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg',
 'https://upload.wikimedia.org/wikipedia/commons/1/10/Python_3._The_standard_type_hierarchy.png',
 'https://upload.wikimedia.org/wikipedia/commons/6/68/Python_batteries_included.jpg',
 'https://upload.wikimedia.org/wikipedia/commons/f/f8/Python_logo_and_wordmark.svg']

Et même tout le contenu de la page au format HTML :

# Get HTML page
wikipedia.page("Python (langage)").html()
Le résultat de cette commande (code HTML de la page Wikipédia) comporte de nombreuses lignes. On n'a pas souhaité l'afficher pour ne pas alourdir le chargement de la présente page. 

Vous voulez sélectionner un page au hasard ? Rien de plus simple :

# Select a page randomly 
wikipedia.random()
'Box-office de la franchise Arthur et les Minimoys'

Une ne suffit pas ? En voilà 10 :

# Select 10 pages randomly 
wikipedia.random(pages=10)
['Gary Auerbach',
 '18e cérémonie des Online Film Critics Society Awards',
 'Hayet Rouini',
 '(36966) 2000 SA290',
 '117e régiment',
 'Jack Ralite',
 '(6287) Lenham',
 'Yanick Lahens',
 "Canton de Seuil-d'Argonne",
 'Isomérie cis-trans']

Et si on regroupait les commandes décrites précédemment dans une petite fonction ?

Cette fonction :

  • Prendra comme arguments :
    • Un mot ou une expression à chercher dans Wikipédia
    • Le choix de la langue plus du choix (argument optionnel ayant « fr » comme valeur par défaut)
  • Retournera le contenu associé à la première page trouvée
def get_wiki_page(query, lang="fr"):
    """Return Wikipedia page content corresponding to "query" search.

    Args:
      query (str): the string to search in Wikipedia.
      lang (str): prefix to select Wikipedia language.

    Returns:
      str
    """  
    # Set Wikipedia language
    wikipedia.set_lang(lang)
    
    # Select the first result of search
    title = wikipedia.search(query)[0]
    
    # Create a WikipediaPage object
    page = wikipedia.page(title)
    
    # Return the page content
    return page.content
    
get_wiki_page("python") 
'Python (/ˈpaɪ.θɑn/) est un langage de programmation interprété, multi-paradigme et multiplateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d\'un typage dynamique fort, d\'une gestion automatique de la mémoire par ramasse-miettes et d\'un système de gestion d\'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.\nLe langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plates-formes informatiques, des smartphones aux ordinateurs centraux, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser.\nIl est également apprécié par certains pédagogues qui y trouvent un langage où la syntaxe, clairement séparée des mécanismes de bas niveau, permet une initiation aisée aux concepts de base de la programmation.\n\n\n== Utilisation ==\nPython est un langage qui peut s\'utiliser dans de nombreux contextes et s\'adapter à tout type d\'utilisation grâce à des bibliothèques spécialisées. Il est cependant particulièrement utilisé comme langage de script pour automatiser des tâches simples mais fastidieuses, comme un script qui récupérerait la météo sur Internet ou qui s\'intégrerait dans un logiciel de conception assistée par ordinateur afin d\'automatiser certains enchaînements d\'actions répétitives (voir la section Adoption). On l\'utilise également comme langage de développement de prototype lorsqu\'on a besoin d\'une application fonctionnelle avant de l\'optimiser avec un langage de plus bas niveau. Il est particulièrement répandu dans le monde scientifique, et possède de nombreuses bibliothèques optimisées destinées au calcul numérique.\n\n\n== Historique ==\n\n\n=== Au CWI ===\n\nÀ la fin des années 1980, le programmeur Guido van Rossum participe au développement du langage de programmation ABC au Centrum voor Wiskunde en Informatica (CWI) d\'Amsterdam, aux Pays-Bas. Il travaillait alors dans l’équipe du système d’exploitation Amoeba dont les appels systèmes étaient difficilement interfaçables avec le Bourne shell utilisé comme interface utilisateur. Il estime alors qu’un langage de script inspiré d’ABC pourrait être intéressant comme interpréteur de commandes pour Amoeba.\nEn 1989, profitant d’une semaine de vacances durant les fêtes de Noël, il utilise son ordinateur personnel pour écrire la première version du langage. Fan de la série télévisée Monty Python\'s Flying Circus, il décide de baptiser ce projet Python. Il s’est principalement inspiré d’ABC, par exemple pour l’indentation comme syntaxe ou les types de haut niveau mais aussi de Modula-3 pour la gestion des exceptions, du langage C et des outils UNIX.\nDurant l’année suivante, le langage commence à être adopté par l’équipe du projet Amoeba, Guido poursuivant son développement principalement pendant son temps libre. En février 1991, la première version publique, numérotée 0.9.0, est postée sur le forum Usenet alt.sources. La dernière version sortie au CWI fut Python 1.2.\n\n\n=== Au CNRI ===\nEn 1995, Van Rossum continua son travail sur Python au CNRI (en) à Reston, aux États-Unis, où il sortit plusieurs versions du logiciel.\nÀ partir d\'août 1995, l\'équipe Python travaille au CNRI sur Grail un navigateur web utilisant Tk. Il est l\'équivalent pour Python du navigateur HotJava, permettant d\'exécuter des applets dans un environnement sécurisé. La première version publique, disponible en novembre, est la 0.2. Il a entraîné le développement de modules pour la bibliothèque standard comme rexec, htmllib ou urllib. La version 0.6 sera la dernière de Grail ; elle est publiée en avril 1999.\nEn 1999, le projet Computer Programming for Everybody (CP4E) est lancé avec collaboration entre le CNRI et la DARPA. Il s\'agit d\'utiliser Python comme langage d\'enseignement de la programmation. Cette initiative conduira à la création de l\'environnement de développement IDLE. Cependant, du fait du manque de financement du projet par la DARPA, et du départ de nombreux développeurs Python du CNRI (dont Guido van Rossum), le projet s’éteint en 2000. Python 1.6 fut la dernière version sortie au CNRI.\n\n\n=== À BeOpen ===\nEn 2000, l\'équipe principale de développement de Python déménagea à BeOpen.com pour former l\'équipe PythonLabs de BeOpen. Python 2.0 fut la seule version sortie à BeOpen.com. Après cette version, Guido Van Rossum et les autres développeurs de PythonLabs rejoignirent Digital Creations (à présent connue sous le nom de Zope Corporation).\nAndrew M. Kuchling a publié en décembre 1999 un texte nommé Python Warts qui synthétise les griefs les plus fréquents exprimés à l\'encontre du langage. Ce document aura une influence certaine sur les développements futurs du langage.\n\n\n=== La Python Software Foundation ===\nPython 2.1 fut une version dérivée de Python 1.6.1, ainsi que de Python 2.0. Sa licence fut renommée Python Software Foundation License. Tout code, documentation et spécification ajouté, depuis la sortie de Python 2.1 alpha, est détenu par la Python Software Foundation (PSF), une association sans but lucratif fondée en 2001, modelée d\'après l\'Apache Software Foundation.\nAfin de réparer certains défauts du langage (par exemple l\'orienté objet avec deux types de classes), et pour nettoyer la bibliothèque standard de ses éléments obsolètes et redondants, Python a choisi de casser la compatibilité ascendante dans la nouvelle version majeure, Python 3.0, publié en décembre 2008. Cette version a été suivie rapidement par une version 3.1 qui corrige les erreurs de jeunesse de la version 3.0.\n\n\n== Caractéristiques ==\n\n\n=== Syntaxe ===\nPython a été conçu pour être un langage lisible. Il vise à être visuellement épuré. Par exemple, il possède moins de constructions syntaxiques que de nombreux langages structurés tels que C, Perl, ou Pascal. Les commentaires sont indiqués par le caractère croisillon (#).\nLes blocs sont identifiés par l\'indentation, au lieu d\'accolades comme en C ou C++ ; ou de begin ... end comme en Pascal ou Ruby. Une augmentation de l\'indentation marque le début d\'un bloc, et une réduction de l\'indentation marque la fin du bloc courant. Par convention (actuellement PEP8), l\'indentation est habituellement de quatre espaces en Python.\n\nNB : l\'indentation pourrait être modifiée ou supprimée dans la version en C sans modifier son comportement. De même la fonction Python peut être écrite avec une expression conditionnelle. Cependant, une indentation correcte permet de détecter plus aisément des erreurs en cas d\'imbrication de plusieurs blocs et facilite donc l\'élimination de ces erreurs. C\'est pourquoi il est préférable d\'indenter convenablement les programmes en C. La version courte s\'écrirait ainsi :\n\n\n==== Mots-clés du langage ====\nLes mots-clés sont fournis dans la liste keyword.kwlist du module keyword. Les mots-clés de Python 2.7.5 sont les suivants : and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield.\nÀ partir de Python 3.0, print et exec ne sont plus des mots-clés du langage, mais des fonctions du module builtins. Sont ajoutés aux mots-clés : True, False, None et nonlocal. Les trois premiers étaient déjà présents dans les versions précédentes, mais ils ne sont plus modifiables (auparavant, l\'affectation True = 1 était possible). nonlocal a été introduit par le PEP 3104, et permet, dans une fonction définie à l\'intérieur d\'une autre fonction, de modifier une variable d\'un niveau supérieur de portée. Avant cela, seules les variables locales à la fonction, et globales (niveau module) étaient modifiables. Toutefois, il était possible, et ça l\'est toujours sans le mot-clé nonlocal, de modifier un objet affecté à une variable d\'un niveau de portée supérieur, par exemple une liste avec la méthode append - c\'est évidemment impossible pour un objet immuable.\n\n\n==== Types de base ====\nLes types de base en Python sont relativement complets et puissants. Il y a, entre autres :\n\nLes objets numériques\nint est un entier. Avant la version 3.0, ce type était dénommé long, et le type int correspondait à un entier de 32 ou 64 bits. Néanmoins, une conversion automatique évitait tout débordement. Maintenant, ce type correspond à un entier codé sur 32 bits ou moins.\nlong est un entier illimité de plus de 32 bits en Python 3.\nfloat est un flottant équivalent au type double du C, soit un nombre entre −1,7×10308 et 1,7×10308 sur les plateformes en conformité avec l\'IEEE 754.\ncomplex est une approximation d\'un nombre complexe (typiquement deux float).\nLes objets « itérables »\nLes objets tuple (n-uplet) sont des listes immuables d\'objets hétérogènes.\nLes objets list sont des tableaux dynamiques (ils étendent automatiquement leur taille lorsque nécessaire) et acceptent des types de données hétérogènes.\nLes objets set sont des ensembles non ordonnés d\'objets.\nLes objets frozenset forment une variante immuable des set.\nLes objets dict sont des tableaux associatifs (ou dictionnaires) permettant d\'associer un objet (une clef) à un autre.\nLes objets str sont des chaînes de caractères. À partir de la version 3.0, les caractères sont en Unicode sur 16 ou 32 bits ; les chaines d\'octets sont des objets bytes. Dans les versions précédentes, ces objets étaient respectivement de type unicode et str. Les objets str et bytes sont immuables.\nLes objets bytearray sont des chaînes d\'octets modifiables. La version d\'Unicode employée par Python peut être déterminée à l\'aide de la variable unidata_version du module unicodedata.\nLes objets file correspond à un fichier obtenu grâce à la méthode open()\nIl existe aussi d\'autres types d\'objets itérables, notamment xrange obtenu via la méthode range(), et les types liés aux méthodes de dictionnaires .keys(), .values() et .items(). La plupart d\'entre eux sont immuables.\nLes autres objets, n\'étant ni numériques ni itérables\nNone est simplement le type d\'un "vide". Il sert à dénoter qu\'une variable est vide.\ntype est le type du type des objets, obtenu grâce à la méthode type().\nobject est le type basique dont tous les autres types "héritent"\nslice est une partie de type ou un objet extensible\nNotImplementedType est, comme son nom l\'indique, une absence d\'implémentation du type auquel on essaie d\'accéder.\nbool est un booléen, soit le type de True et False renvoyés par exemple lors de comparaisons or de l\'utilisation de méthodes is_x().\nexception est le type d\'un message d\'erreur lancé lorsque le code lève une exception.\nfunction est le type d\'une fonction, utilisé lors de l\'appel des mots-clef def et lambda.\nmodule est le type d\'un module, utilisé lors de l\'appel des mots-clef import et from.Les objets itérables sont parcourus à l\'aide d\'une boucle for de la manière suivante :\n\nPour une chaîne de caractères, l\'itération procède caractère par caractère.\nIl est possible de dériver les classes des types de base pour créer ses propres types.\nOn peut également fabriquer ses propres types d\'objets itérables sans hériter des itérables de base en utilisant le protocole d\'itération du langage.\n\n\n==== Programmation fonctionnelle ====\nPython permet de programmer dans un style fonctionnel. Il dispose également des compréhensions de listes, et plus généralement les compréhensions peuvent produire des générateurs, des dictionnaires ou des ensembles. Par exemple, pour construire la liste des carrés des entiers naturels plus petits que 10, on peut utiliser l\'expression :\n\nLa liste des nombres pairs :\n\nUne table de passage des lettres de l\'alphabet vers leur code ASCII :\n\nL\'ensemble des lettres d\'un mot (produit l\'ensemble {\'r\', \'c\', \'d\', \'b\', \'a\'}) :\n\nUne compréhension peut comprendre plusieurs boucles et filtres, et il existe une correspondance avec le code réalisant le même calcul à l\'aide d\'instructions for et if :\n\nUne forme limitée de fonction anonyme est possible :\n\nLes fonctions lambda peuvent être définies en ligne et utilisées comme arguments dans des expressions fonctionnelles :  retournera une liste constituée des éléments de une_liste inférieurs à 5. Le même résultat peut être obtenu avec \nLes lambdas de Python n\'admettent que des expressions et ne peuvent être utilisées comme fonctions anonymes généralisées ; mais en Python, toutes les fonctions sont des objets, elles peuvent donc être passées en arguments à d\'autres fonctions, et appelées lorsque c\'est nécessaire. En effet, une fonction définie avec def peut être créée à l\'intérieur d\'une autre fonction et on obtient ainsi une définition de fonction dans une variable locale, par exemple :\n\nUne fonction locale peut modifier l\'environnement de la fonction qui l\'a créée, grâce au mot-clé nonlocal (voir Fermeture (informatique)) :\n\nOn peut ainsi créer plusieurs accumulateurs, faisant chacun référence à son propre total. Il est possible d\'accéder à l\'environnement d\'une fonction locale à l\'aide de l\'attribut __closure__.\n\n\n==== Programmation objet ====\nTous les types de base, les fonctions, les instances de classes (les objets « classiques » des langages C++ et Java) et les classes elles-mêmes (qui sont des instances de méta-classes) sont des objets.\nUne classe se définit avec le mot-clé class. Les classes Python supportent l\'héritage multiple ; il n\'y a pas de surcharge statique comme en C++, ou de restrictions sur l\'héritage comme c\'est le cas en Java (une classe implémente plusieurs interfaces et hérite d\'une seule classe) mais le mécanisme des arguments optionnels et par mot-clé est plus général et plus flexible. En Python, l\'attribut d\'un objet peut référencer une variable d\'instance ou de classe (le plus souvent une méthode). Il est possible de lire ou de modifier un attribut dynamiquement avec les fonctions :\n\ngetattr(objet, "nom_attribut") \nsetattr(objet, "nom_attribut", nouvel_attribut)Exemple de deux classes simples :\n\n\n==== Méthodes spéciales et définition des opérateurs ====\nPython fournit un mécanisme élégant et orienté objet pour définir un ensemble pré-défini d\'opérateurs : tout objet Python peut se voir doté de méthodes dites spéciales.\nCes méthodes, commençant et finissant par deux tirets de soulignement (underscores), sont appelées lors de l\'utilisation d\'un opérateur sur l\'objet : + (méthode __add__), += (méthode __iadd__), [] (méthode __getitem__), () (méthode __call__), etc. Des méthodes comme __repr__ et __str__ permettent de définir la représentation d\'un objet dans l\'interpréteur interactif et son rendu avec la fonction print.\nLes possibilités sont nombreuses et sont décrites dans la documentation du langage.\nPar exemple on peut définir l\'addition de deux vecteurs à deux dimensions avec la classe suivante :\n\n\n==== Générateurs ====\nLe mot-clef yield utilisé dans une fonction permet de faire de cette fonction un générateur. L\'appel de cette fonction renvoie un objet de type generator, qui peut être utilisé dans une boucle for, par exemple.\nÀ chaque appel, le générateur effectue son traitement jusqu\'à rencontrer le mot-clé yield, renvoie la valeur de l\'expression yield, et à l\'appel suivant, reprend son déroulement juste après le yield. Par exemple pour calculer la suite de Fibonacci, on peut écrire :\n\nLe module itertools permet de manipuler les générateurs. Par exemple, pour extraire les 10 premiers éléments du générateur précédent :\n\nDepuis Python 3.3, il est possible de produire un générateur à partir d\'une fonction récursive, grâce à la syntaxe yield from, apparue dans le PEP 380 et qui « délègue » le calcul à un sous-générateur. L\'exemple suivant calcule les permutations des dames correspondant aux solutions du problème des huit dames étendu à un échiquier de taille n × n.\n\nUn générateur peut sembler identique à une fonction qui retourne une liste, mais contrairement à une liste qui contient tous ses éléments, un générateur calcule ses éléments un par un.Ainsi, le test 36 in [n * n for n in range(10)] va s\'effectuer sur la liste calculée en entier, alors que dans 36 in (n * n for n in range(10)), qui utilise un générateur, le calcul des carrés s\'arrête dès que 36 est trouvé. On peut s\'en convaincre en remplaçant n * n par un appel de fonction réalisant un effet de bord, par exemple un affichage à l\'écran.\n\n\n=== Réflexivité ===\nGrâce à un usage intensif des dictionnaires (conteneur associatif développé avec des tables de hachage), Python permet d\'explorer les divers objets du langage (introspection) et dans certains cas de les modifier (intercession).\n\n\n=== Typage ===\n\nLe typage n\'est pas vérifié à la compilation. Python utilise le duck typing : lors de l’exécution, si une méthode invoquée sur un objet a la même signature qu\'une méthode déclarée sur cet objet, alors c\'est cette dernière méthode qui est exécutée. De ce fait, invoquer une méthode qui n\'existe pas sur un objet va échouer, signifiant que l\'objet en question n\'est pas du bon type. Malgré l\'absence de typage statique, Python est fortement typé, interdisant des opérations ayant peu de sens (par exemple, additionner un nombre à une chaîne de caractères) au lieu de tenter silencieusement de la convertir en une forme qui a du sens. Python propose des fonctions permettant de transformer les variables dans un autre type :\n\nPython propose aussi un mécanisme de typage statique pour les attributs des classes grâce à l\'API trait ou au patron de conception decorators.\n\n\n==== Compilation ====\nIl est possible d\'effectuer une analyse statique des modules Python avec des outils comme Pylint , mypy , ou PyChecker. Sans nécessiter une exécution, ces outils repèrent des fautes ou des constructions déconseillées. Par exemple, une classe qui hérite d\'une classe abstraite et qui ne redéfinit pas les méthodes abstraites, ou bien des variables utilisées avant d\'être déclarées, ou encore des attributs d\'instance déclarés en dehors de la méthode __init__.\nIl est aussi possible de générer un code intermédiaire (bytecode) Python.\nDes outils comme PyInstaller ou d\'autres plus spécifiques comme cx_Freeze sous Unix, Windows et macOS, py2app sous macOS et py2exe sous Windows permettent de « compiler » un programme Python sous forme d\'un exécutable comprenant le programme et un interpréteur Python.\nLe programme ne tourne pas plus rapidement (il n\'est pas compilé sous forme de code machine) mais cela simplifie largement sa distribution, notamment sur des machines où l\'interpréteur Python n\'est pas installé.\n\n\n=== Modèle objet ===\nEn Python, tout est objet, dans le sens qu\'une variable peut contenir une référence vers tous les éléments manipulés par le langage : nombres, méthodes, modules, etc.. Néanmoins, avant la version 2.2, les classes et les instances de classes étaient un type d\'objet particulier, ce qui signifiait qu\'il était par exemple impossible de dériver sa propre sous-classe de l\'objet list.\n\n\n==== Méthodes ====\nLe modèle objet de Python est inspiré de celui de Modula-3. Parmi ces emprunts se trouve l\'obligation de déclarer l\'instance de l\'objet courant, conventionnellement nommée self, comme premier argument des méthodes, et à chaque fois que l\'on souhaite accéder à une donnée de cette instance dans le corps de cette méthode. Cette pratique n\'est pas naturelle pour des programmeurs venant par exemple de C++ ou Java, la profusion des self étant souvent critiquée comme étant une pollution visuelle qui gêne la lecture du code. Les promoteurs du self explicite estiment au contraire qu\'il évite le recours à des conventions de nommage pour les données membres et qu\'il simplifie des tâches comme l\'appel à une méthode de la superclasse ou la résolution d\'homonymie entre données membres.\nPython reconnaît trois types de méthodes :\n\nles méthodes d\'instance, qui sont celles définies par défaut. Elles reçoivent comme premier argument une instance de la classe où elles ont été définies.\nles méthodes de classe, qui reçoivent comme premier argument la classe où elles ont été définies. Elles peuvent être appelées depuis une instance ou directement depuis la classe. Elles permettent de définir des constructeurs alternatifs comme la méthode fromkeys() de l\'objet dict. Elles sont déclarées avec le décorateur @classmethod.\nles méthodes statiques, qui ne reçoivent pas de premier argument implicite. Elles sont similaires aux méthodes statiques que l\'on trouve en Java ou C++. Elles sont déclarées avec le décorateur @staticmethod.\n\n\n==== Visibilité ====\nLe langage a un support très limité de l\'encapsulation. Il n\'y a pas, comme en Java par exemple, de contrôle de l\'accessibilité par des mots clefs comme protected ou private.\nLa philosophie de Python est de différencier conceptuellement l\'encapsulation du masquage d\'information. Le masquage d\'information vise à prévenir les utilisations frauduleuses, c\'est une préoccupation de sécurité informatique. Le module bastion de la bibliothèque standard, qui n\'est plus maintenu dans les dernières versions du langage, permettait ainsi de contrôler l\'accès aux attributs d\'un objet dans le cadre d\'un environnement d\'exécution restreint.\nL\'encapsulation est une problématique de développement logiciel. Le slogan des développeurs Python est we\'re all consenting adults here (nous sommes entre adultes consentants). Ils estiment en effet qu\'il suffit d\'indiquer, par des conventions d\'écriture, les parties publiques des interfaces et que c\'est aux utilisateurs des objets de se conformer à ces conventions ou de prendre leurs responsabilités. L\'usage est de préfixer par un underscore les membres privés. Le langage permet par ailleurs d\'utiliser un double underscore pour éviter les collisions de noms, en préfixant automatiquement le nom de la donnée par celui de la classe où elle est définie.\nL\'utilisation de la fonction property() permet de définir des propriétés qui ont pour but d\'intercepter, à l\'aide de méthodes, les accès à une donnée membre. Cela rend inutile la définition systématique d\'accesseurs et le masquage des données comme il est courant de le faire en C++ par exemple.\n\n\n==== Héritage ====\nPython supporte l\'héritage multiple. Depuis la version 2.3, il utilise l\'algorithme C3 (en), issu du langage Dylan, pour résoudre l\'ordre de résolution de méthode (MRO). Les versions précédentes utilisaient un algorithme de parcours en profondeur qui posait des problèmes dans le cas d\'un héritage en diamant.\n\n\n== Bibliothèque standard ==\n\nPython possède une grande bibliothèque standard, fournissant des outils convenant à de nombreuses tâches diverses. Le nombre de modules de la bibliothèque standard peut être augmenté avec des modules spécifiques écrits en C ou en Python.\nLa bibliothèque standard est particulièrement bien conçue pour écrire des applications utilisant Internet, avec un grand nombre de formats et de protocoles standards gérés (tels que MIME et HTTP). Des modules pour créer des interfaces graphiques et manipuler des expressions rationnelles sont également fournis. Python inclut également un framework de tests unitaires (unittest, anciennement PyUnit avant version 2.1) pour créer des suites de tests exhaustives.\n\n\n== Conventions de style ==\nBien que chaque programmeur puisse adopter ses propres conventions pour l\'écriture de code Python, Guido van Rossum a mis un guide à disposition, référencé comme « PEP 8 ». Publié en 2001, il est toujours maintenu pour l\'adapter aux évolutions du langage. Google propose également un guide.\n\n\n== Interfaces graphiques ==\nPython possède plusieurs modules disponibles pour la création de logiciels avec une interface graphique. Le plus répandu est Tkinter. Ce module convient à beaucoup d\'applications et peut être considéré comme suffisant dans la plupart des cas. Néanmoins, d\'autres modules ont été créés pour pouvoir lier Python à d\'autres bibliothèques logicielles (« toolkit »), pour davantage de fonctionnalités, pour une meilleure intégration avec le système d\'exploitation utilisé, ou simplement pour pouvoir utiliser Python avec sa bibliothèque préférée. En effet, certains programmeurs trouvent l\'utilisation de Tkinter plus pénible que d\'autres bibliothèques. Ces autres modules ne font pas partie de la bibliothèque standard et doivent donc être obtenus séparément.\nLes principaux modules donnant accès aux bibliothèques d\'interface graphique sont Tkinter et Pmw (Python megawidgets) pour Tk, wxPython pour wxWidgets, PyGTK pour GTK+, PyQt et PySide pour Qt, et enfin FxPy pour le FOX Toolkit. Il existe aussi une adaptation de la bibliothèque SDL : Pygame, un binding de la SFML : PySFML, ainsi qu\'une bibliothèque écrite spécialement pour Python : Pyglet (en).\nIl est aussi possible de créer des applications Silverlight en Python sur la plateforme IronPython.\n\n\n== La communauté Python ==\nGuido van Rossum est le principal auteur de Python, et son rôle de décideur central permanent de Python est reconnu avec humour par le titre de « Dictateur bienveillant à vie » (Benevolent Dictator for Life, BDFL).\nIl est assisté d\'une équipe de core developers qui ont un accès en écriture au dépôt de CPython et qui se coordonnent sur la liste de diffusion python-dev. Ils travaillent principalement sur le langage et la bibliothèque de base. Ils reçoivent ponctuellement les contributions d\'autres développeurs Python via la plateforme de gestion de bug Roundup, qui a remplacé SourceForge.\nLes utilisateurs ou développeurs de bibliothèques tierces utilisent diverses autres ressources. Le principal média généraliste autour de Python est le forum Usenet anglophone comp.lang.python.\nLes allusions aux Monty Python sont assez fréquentes. Les didacticiels consacrés à Python utilisent souvent les mots spam et eggs comme variable métasyntaxique. Il s\'agit d\'une référence au sketch Spam des Monty Python, où deux clients tentent de commander un repas à l\'aide d\'une carte qui contient du jambon en conserve de marque SPAM dans pratiquement tous les plats. Ce sketch a été aussi pris pour référence pour désigner un courriel non sollicité.\n\n\n=== Adoption de Python ===\n\nPlusieurs entreprises ou organismes mentionnent sur leur site officiel qu\'ils utilisent Python :\n\nGoogle (Guido van Rossum a travaillé au sein de cette entreprise entre 2005 et 2012) ;\nIndustrial Light & Magic ;\nla NASA ;\net CCP Games, les créateurs du jeu vidéo EVE Online.Python est aussi le langage de commande d\'un grand nombre de logiciels libres :\n\nFreeCAD, logiciel de CAO 3D\nBlender, logiciel de modélisation 3D et d\'édition vidéo\nInkscape, logiciel de dessin vectoriel\nLibreOffice et Apache OpenOffice, les deux branches de développement d\'une suite bureautique issue de StarOffice\nPortage, le gestionnaire de paquets du système d\'exploitation Gentoo\nParaView, logiciel de visualisation de données numériques\nKodi, un lecteur multimédia\nQGIS, un logiciel de cartographie\nWeblate, un outil de traduction\ngedit, un éditeur de texte (les plugins sont écrits en Python)\nSageMath, un logiciel de calcul formelEt commerciaux :\n\nWing IDE, environnement de développement intégré spécialisé sur Python, et écrit en Python\nCorel Paint Shop Pro, logiciel de traitement d’image et d\'édition graphique\ncapella, logiciel de notation musicale\nArcGIS, un logiciel de cartographiePython est utilisé comme langage de programmation dans l\'enseignement élémentaire et supérieur, notamment en France. Depuis 2013, il y est enseigné, en même temps que Scilab, à tous les étudiants de classes préparatoires scientifiques dans le cadre du tronc commun (informatique pour tous). Auparavant, l\'enseignement d\'informatique était limité à une option en MP, l\'enseignement se faisant en langage Caml ou Pascal. Cette option existe toujours, mais Pascal a été abandonné à partir de la session 2015 des concours, ne reste donc que Caml dans cet enseignement. Les premières épreuves de concours portant sur le langage Python sont également celles de la session 2015,.\n\n\n== Implémentations du langage ==\nOutre la version de référence, nommée CPython (car écrite en langage C), il existe d\'autres systèmes mettant en œuvre le langage Python :\n\nStackless Python, une version de CPython n\'utilisant pas la pile d\'appel du langage C ;\nJython, un interprète Python pour machine virtuelle Java. Il a accès aux bibliothèques fournies avec l\'environnement de développement Java ;\nIronPython, un interprète / compilateur (expérimental) pour plateforme .Net / Mono ;\nBrython, une implémentation de Python 3 pour les navigateurs web ;\nMicroPython, variante légère pour microcontrôleurs ;\nPyPy un interprète Python écrit dans un sous-ensemble de Python compilable vers le C ou LLVM ;\nun compilateur (expérimental) pour Parrot, la machine virtuelle de Perl 6 ;\nShed Skin, un compilateur d\'un sous-ensemble de Python produisant du code en C++ ;\nUnladen Swallow (en), une version de CPython optimisée et basée sur LLVM, maintenant abandonnée (la dernière version remonte à octobre 2009) ;\nRustPython, projet d’implémentation en Rust.Ces autres versions ne bénéficient pas forcément de la totalité de la bibliothèque de fonctions écrites en C pour la version de référence, ni des dernières évolutions du langage.\n\n\n== Distributions de Python ==\nDifférentes distributions sont disponibles, qui incluent parfois beaucoup de paquets dédiés à un domaine donné :\n\nActivePython : disponible en version gratuite (ne pouvant être « utilisée en production ») ou commerciale.\nPython(x,y) : distribution Python à l\'usage des scientifiques basée sur Qt et Eclipse. Obsolète, remplacé par WinPython\nEnthought Canopy : distribution à usage scientifique, disponible en version gratuite (Canopy Express) ou commerciale.\nAnaconda : distribution à usage scientifique, disponible en version gratuite ou commerciale.\nIntel Distribution for Python : distribution basée sur Anaconda, intégrant notamment la bibliothèque MKL (en) d\'Intel afin d\'accélérer les calculs numériques de bibliothèques telles que NumPy et SciPy, intégrées à la distribution. Elle est disponible gratuitement seule, ou bien intégrée à Intel Parallel Studio, qui nécessite une licence payante.\nPyzo : « Python to the people », destinée à être facile d\'utilisation.\nWinPython: distribution à usage scientifique avec Spyder, QT, etc....Ce ne sont pas des implémentations différentes du langage Python : elles sont basées sur CPython, mais sont livrées avec un certain nombre de bibliothèques préinstallées.\n\n\n== Historique des versions ==\n\n\n== Développement ==\n\n\n=== Les PEP ===\nLes propositions d\'amélioration de Python (ou PEP : Python Enhancement Proposal) sont des documents textuels qui ont pour objet d\'être la voie d\'amélioration de Python et de précéder toutes ses modifications. Un PEP est une proposition d\'orientation pour le développement (process PEP), une proposition technique (Standard Track PEP) ou une simple recommandation (Informational PEP).\n\n\n=== Python 3 ===\nEn 2019, c\'est la version 3 de Python, qui remplace de plus en plus la version 2 (le projet était au départ appelé « Python 3000 » ou « Py3K »), sans compatibilité descendante avec la série des versions 2.x, dans le but d\'éliminer les faiblesses du langage. La ligne de conduite du projet était de « réduire la redondance de Python par la suppression de méthodes obsolètes ». Python 3.0a1, la première version alpha, avait été publiée le 31 août 2007, et il existe un PEP qui détaille les changements prévus, ainsi qu\'une page pour orienter les programmeurs dans leur choix de Python 2 ou 3.\nLes calculatrices destinées aux lycéens (dont Casio, NumWorks, Texas Instruments...) et supportant Python fonctionnent en Python 3. Ces calculatrices peuvent échanger des programmes avec des ordinateurs domestiques.\n\n\n==== Philosophie ====\nPython 3 a été développé avec la même philosophie que dans ses versions antérieures, donc toute référence à la philosophie de Python s\'appliquera aussi bien à la version 3. Cependant, le langage avait fini par accumuler nombre de méthodes redondantes. En recherchant à supprimer ce qui est redondant dans le langage et ses modules, Python 3 suit la ligne directrice de Python « Ne devrait subsister qu\'une seule méthode à la fois optimale et naturelle pour chaque chose ».\nPython 3 reste un langage multi-paradigme. Les programmeurs auront encore le choix entre l\'orientation objet, la programmation structurée, la programmation fonctionnelle et d\'autres paradigmes ; Python 3 a pour but d\'être utilisé de manière plus naturelle que dans les versions 2.x, bien que son print nécessite l\'emploi de parenthèses contrairement à Python 2.\n\n\n==== Planning et compatibilité ====\nPython 3.0a1, la première version alpha de Python 3.0, fut publiée le 31 août 2007. Les versions 2.x et 3.x de Python seront publiées en parallèle pendant plusieurs cycles de développement, pendant lesquels la série des 2.x subsistera principalement pour la compatibilité, en incluant quelques caractéristiques importées depuis Python 3.x. Le PEP 3000 contient plus d\'informations à propos du processus de publication d\'une version.\nComme Perl 6, Python 3.0 rompt la compatibilité descendante (rétro-compatibilité). L\'utilisation de code écrit pour les séries 2.x n\'est pas garantie avec Python 3.0. Ce dernier apporte des changements fondamentaux, comme le passage complet à l\'Unicode et pour cette raison une nécessaire distinction entre les chaînes de caractère et les objets « bytes ». Le typage dynamique associé à certaines méthodes sur les objets de type dictionnaire rend une transition parfaite de Python 2.x vers Python 3.0 très délicat. Un outil nommé « 2to3 » traduit le plus gros des versions 2.x vers les versions 3.x et indique les zones de code demandant des finitions par des commentaires spéciaux et des mises en garde.\nDans sa pré-version, 2to3 semble réussir franchement à réaliser une traduction correcte. Dans le cadre d\'une migration de Python 2.x vers Python 3.x, le PEP 3000 recommande de conserver le code original comme base des modifications et de le traduire pour la plateforme 3.x en utilisant 2to3.\nPython 2.6 fournit un début de compatibilité ascendante, aussi bien qu\'un mode « mise en garde » qui devrait faire prendre conscience des problèmes potentiels de transition pour le passage à Python 3.\n\n\n=== Python pour smartphones ===\nIl existe des versions de Python adaptées pour Android et iPhone en version 2.5 ou 2.6. Disponible en Jailbreak d\'iOS sur iOS grâce à "setup tools", et sur Android grâce à SL4A qui donne même une possibilité de faire des petites interfaces graphiques grâce au module "android" et qui permet d\'envoyer des SMS, d\'allumer la caméra, ou encore de faire vibrer le téléphone. Les quelques lignes suivantes montrent comment faire ça :\n\nUn portage de Python sur les terminaux Blackberry est sorti en juin 2012, pour le système BlackBerry OS 10. Une version allégée est sortie en septembre 2012, appelée « BlackBerry-Tart »,, en raison d\'un jeu de mots en anglais : « a "tart" is lighter-weight than a "pie" », en référence à la traditionnelle « apple pie ». Elle est basée sur Python 3.2.2.\n\n\n== Notes et références ==\n\n\n== Voir aussi ==\n\n\n=== Liste de frameworks principaux ===\nBibliothèques scientifiques :\nCalcul : NumPy, SciPy, Pandas, PyIMSL Studio, Sympy, SageMath\nSystème expert : pyCLIPS, pyswip, pyDatalog, pyKE (« Python Knowledge Engine »)\nVisualisation : pydot, Matplotlib, pyngl, MayaVi\nExploration de données : Orange\nSimulation : simPy\nChimie : PyMOL, MMTK, Chimera, PyQuante\nBiologie : Biopython\nUtilitaire : eGenix, ctype, Askbot\nAnalyseur syntaxique : PyParsing, PLY (« Python Lex & Yacc »), NLTK (« Natural Language Toolkit »), SpaCy\nGénérateur de documentation : Sphinx\nGraphisme : PIL / « Pillow » Soya 3D, Vpython, pymedia, NodeBox\nJeux : Pygame, Panda3D\nFramework web : Django, Karrigell, webware, Grok (en), TurboGears, Pylons (en), Flask, Bottle\nServeur web, CMS : Plone, Zope, Google App Engine, CherryPy, MoinMoin, django CMS\nCartographie : TileCache, FeatureServer, Cartoweb 4, Shapely, GeoDjango, PCL\nProtocoles :\npyTango\nSérialisation : SimpleJSON\nTCP, UDP, SSL/TLS, multicast, Unix sockets, HTTP, NNTP, IMAP, SSH, IRC, FTP : Twisted\nVecteur : GeoJSON, OWSLib, Quadtree, Rtree, Shapely, WorldMill, ZCO\nORM : SQLObject, SQLAlchemy, Storm, Django ORM\nDriver SGBD : PyGresQL, Psycopg, MySQL-python\nApprentissage : Keras\n\n\n=== Articles connexes ===\nZen de Python : principes de design et d\'utilisation de Python\nPip : gestionnaire de paquets des paquets Python.\nCython : langage permettant d\'écrire des modules compilables pour Python.\nIPython : terminal interactif.\nRUR-PLE : outil éducatif pour apprendre le Python de façon ludique en pilotant un robot virtuel.\nPyPI : dépôt tiers officiel.\n Portail de l’informatique   Portail des logiciels libres   Portail de la programmation informatique'

Pour aller plus loin

Le module Wikipedia est simple d’utilisation et présente même un côté ludique. Il permet, potentiellement, d’accéder à des millions de pages dans plus de 300 langues différentes.

Des données qui pourraient être exploitées pour faire par exemple du natural language processing (NPL), en français traitement automatique du langage naturel.

Si ce package vous intéresse, vous trouverez ci-dessous quelques ressources (en anglais) :

Vous avez des questions ou des remarques ? N’hésitez pas à m’en faire part dans la section commentaires.

Crédit image : puzzle Nathan