У строки в Python есть два очень похожих метода. На столько похожих что кажется они делают одно и тоже.
Это метод isdigit() и isnumeric()
Давайте посмотрим зачем нам два одинаковых метода? И так ли они одинаковы?
Очевидно что isdigit() говорит нам, состоит ли строка только из чисел 0-9
>>> '12'.isdigit()
True
>>> '12x'.isdigit()
False
>>> '-12'.isdigit()
False
>>> '12.5'.isdigit()
False
Можно предположить что isnumeric() делает более глубокий анализ и распознаёт в строке float или отрицательное число.
>>> '15'.isnumeric()
True
>>> '-15'.isnumeric()
False
>>> '15.2'.isnumeric()
False
Нет, всё так же как и с другим методом. В чем же тогда разница? Для начала посмотрим следующие примеры:
>>> '5'.isdigit(), '5'.isnumeric() # Обычная цифра 5
# True, True
>>> '꧕'.isdigit(), '꧕'.isnumeric() # Яванская 5
# True, True
>>> '෩'.isdigit(), '෩'.isnumeric() # Синхала 3
# True, True
>>> '৩'.isdigit(), '৩'.isnumeric() # Бенгальская 3
# True, True
>>> '༣'.isdigit(), '༣'.isnumeric() # Тибетская 3
# True, True
>>> '³'.isdigit(), '³'.isnumeric() # 3 верхний индекс (степень)
# True, True
>>> '𝟝'.isdigit(), '𝟝'.isnumeric() # Математическая двойная 5
# True, True
>>> '๔'.isdigit(), '๔'.isnumeric() # Тайская 4
# True, True
>>> '➑'.isdigit(), '➑'.isnumeric() # 8 в круге
# True, True
А теперь примеры в которых, по мнению Python, результаты не равны
>>> '¾'.isdigit(), '¾'.isnumeric() # дробь три четверти
# False, True
>>> '⅕'.isdigit(), '⅕'.isnumeric() # дробь одна пятая
# False, True
>>> '𒐶'.isdigit(), '𒐶'.isnumeric() # клинопись 3
# False, True
>>> '三'.isdigit(), '三'.isnumeric() # 3 из унифицированной идеограммы
# False, True
>>> '⑩'.isdigit(), '⑩'.isnumeric() # цифра 10 в круге
# False, True
>>> 'Ⅳ'.isdigit(), 'Ⅳ'.isnumeric() # Римская 4
# False, True
>>> '𑇪'.isdigit(), '𑇪'.isnumeric() # Сенегальская архаическая 10
# False, True
>>> '𐌢'.isdigit(), '𐌢'.isnumeric() # Этрусская цифра 10
# False, True
>>> 'ↂ'.isdigit(), 'ↂ'.isnumeric() # Римская цифра 10000
# False, True
>>> '〇'.isdigit(), '〇'.isnumeric() # Символ ККЯ ноль
# False, True
Получается, что isdigit() говорит нам, является ли символ десятичной цифрой или спецсимволом, имеющим цифирное значение после преобразования.
В свою очередь isnumeric() включает все дополнительные символы юникода которые имеют отношения к числовым и цифровым представлениям.
Ну и пара примеров в которых в обоих случаях символ не является числом, это эмодзи.
>>> '🕙'.isdigit(), '🕙'.isnumeric() # эмодзи 10 часов
# False, False
>>> '7️⃣'.isdigit(), '7️⃣'.isnumeric() # эмодзи 7
# False, False
Также есть еще один дополнительный и весьма полезный метод isdecimal().
Он нам сообщает, можно ли из указанного символа сделать простую десятичную цифру. То есть сработает ли метод int(x)
>>> '෩'.isdecimal(), int('෩') # Синхала 3
# True, 3
>>> '➑'.isdecimal(), int('➑') # 8 в круге
# False, ValueError
Какие выводы?
🔸 При определении цифры в строке isdigit() подходит лучше чем isnumeric(), но оба не гарантируют успешную конвертацию в int
🔸 Для однозначного определения возможности преобразования строки в int лучше подходит метод isdecimal()
🔸 Для однозначного определения символов 0...9 лучше использовать regex
Полный список символов юникода которые определяются как numeric
#basic
🇷🇺Russia’s Foreign Ministry Ambassador-at-Large for the G20, APEC and BEP issues Marat Berdyev:
Russia’s participation in key multilateral forums such as the #G20 and #APEC contributes to the accelerated formation of a multipolar world order and economic system.
📈In terms of aggregate GDP, the BRICS members have already surpassed the G7, with their share standing at 37%, compared to less than 30% for the G7.
According to some expert estimates, the countries of the Global Majority will drive up to 75% of global economic growth over the next few decades.
Russia plays a significant role in this positive trend of fair optimization of production potentials.
🤝We continue to actively develop international economic cooperation, focusing on friendly regions.
According to the Federal Customs Service (FCS), Russia's external trade volume in 2024 is expected to reach $700 billion.
Approximately 70% of export-import operations already involve the Asia-Pacific Region (#APR).
🌍Trade with Africa has been expanding, reaching a peak of $25 billion in 2023.
The Russian economy grew by about 4% in 2024, demonstrating resilient performance.
This growth occurred against the backdrop of more modest global averages, limited to 3.1%, and stagnation in many European countries.
🌾Russian companies are playing an increasingly significant role not only in supplying critical energy and food resources but also in high-tech sectors and manufacturing industries.
We are intensifying transactions in national currencies, particularly the Russian ruble, which accounts for 80-90% of trade with key partners such as China and the EAEU.
Under the initiative of President Vladimir Putin, the Big Eurasian Partnership (#BEP) is building a transit framework centered on Russian territory.
Transit capacity is expanding, and the utilization of the "West-East" and "North-South" transport corridors is increasing, along with the operation of the Northern Sea Route (#NSR).
🚢In the past year, the NSR handled a record volume of over 37 million tons of commercial cargo.
At the #G20 and #APEC significant momentum has been given to the reform of global economic institutions in the interests of the Global South/East.
📈Constructive approaches have been adopted, aiming to preserve an open trade and investment environment, form energy balances on a technologically neutral basis, and support digital transformation.
❗️We will continue to move forward with partners in this promising direction at multilateral economic diplomacy platforms.
Photo: www.rosstip.ru
#G20#APEC#RussianMFA
Împreună cu colegii din Blocul Patriotic am prezentat astăzi platforma noastră electorală, cu care participăm la aceste alegeri parlamentare.
Inițiativele noastre sunt orientate spre: păstrarea suveranității, neutralității și identității moldovenești; crearea unei punți între Est și Vest; construirea unui stat de drept, unde fiecărui cetățean să i se garanteze protecția și echitatea socială; reunificarea țării; suveranitate economică; un stat în interesul poporului, nu al funcționarilor.
Noi credem în Moldova! Pe 28 septembrie votați pentru Blocul Electoral Patriotic al Socialiștilor, Comuniștilor, Inima și Viitorul Moldovei!
::::::::::::::
Вместе с коллегами по Патриотическому блоку сегодня представили нашу предвыборную платформу, с которой мы участвуем в этих парламентских выборах.
Наши инициативы направлены на: сохранение суверенитета, нейтралитета и молдавской идентичности; создание моста между Востоком и Западом; построение правового государства, где каждому жителю будут гарантированы социальная справедливость и защита; объединение страны; экономический суверенитет; государство в интересах народа, а не чиновников.
Мы верим в Молдову! 28 сентября голосуйте за Патриотический избирательный блок социалистов, коммунистов, сердца и будущего Молдовы!
#BloculPatriotic#Moldova#BEP#CredemÎnMoldova#ВеримВМолдову
Мы победим – это понимают даже «жёлтые». Но мы должны будем и отстоять нашу победу.
Призываю всех быть готовыми выйти 29 сентября на защиту нашей общей победы. Мы обязаны сделать это ради наших детей и внуков, ради Молдовы!
#BEP#ПатриотическийБлок#CredemÎnMoldova#ВеримВМолдову#Moldova#BloculPatriotic