Я нашел это на другом сайте:
import Tkinter
MyRoot = Tkinter.Tk()
MyRoot.state("zoomed")
MyRoot.mainloop()
Это решило мою проблему.
Для максимальной безопасности я бы предложил использовать [0-9]
каждый раз, когда вы специально не собираетесь сопоставлять все цифры, определенные в Unicode.
Per perldoc perluniintro , Perl не поддерживает использование цифр, кроме [0-9]
в качестве чисел, поэтому я определенно использовал бы [0-9]
, если следующее оба верны:
Вы хотите использовать результат как число (например, выполнять с ним математические операции или сохранять его где-нибудь, где принимаются только правильные числа (например, столбец INT в базе данных)).
Это возможно нецифровые [^ 0-9]
будут присутствовать в данных таким образом, что регулярное выражение могло бы им соответствовать. (Обратите внимание, что этот параметр должен всегда считаться истинным для недоверенных / враждебных входных данных.)
Если любой из них является ложным,
Мне кажется очень опасным использовать \ d
. Это плохое дизайнерское решение в языке, поскольку в большинстве случаев вы хотите [0-9 ]
. Кодирование Хаффмана диктует использование \ d
для номеров ASCII.
В большинстве предыдущих плакатов уже подчеркивалось, почему вам следует использовать [0-9]
, поэтому позвольте мне дать вам немного больше данных:
Если я правильно прочитал диаграммы Unicode » ۷۰
'- это число (70 на индикаторе, не верьте мне на слово).
Попробуйте следующее:
$ perl -le' $ one = chr 0xFF11; напечатайте "$ one + 1 =", $ one + 1; '
1 + 1 = 1
Вот неполный список действительных чисел (которые могут отображаться или не отображаться в вашем браузере должным образом, в зависимости от используемых шрифтов) для каждого числа, только первое из них интерпретируется как число при выполнении арифметических операций с Perl, как показано выше:
ZERO: 0٠۰߀०০੦૦ ୦ ௦౦೦൦๐໐0
ОДИН: 1١۱߁१১੧૧ ୧ ௧౧೧൧๑໑1
ДВА: 2٢۲߂२২੨૨ ୨ ௨౨೨൨๒໒2
ТРИ: 3٣۳߃३৩੩૩ ୩ ௩౩೩൩๓໓3
ЧЕТЫРЕ: 4٤۴߄४৪੪૪ ୪ ௪౪೪൪๔໔4
ПЯТЬ: 5٥۵߅५৫੫૫ ୫ ௫౫೫൫๕໕5
ШЕСТЬ: 6٦۶߆६৬੬૬ ୬ ௬౬೬൬๖໖6
СЕМЬ: 7٧۷߇७৭੭૭ ୭ ௭౭೭൭๗໗7
ВОСЕМЬ: 8٨۸߈८৮੮૮ ୮ ௮౮೮൮๘໘8
ДЕВЯТЬ: 9٩۹߉ ९ ৯੯૯ ୯௯౯೯൯๙໙9
Вы все еще не уверены?
Согласно perlreref , « \ d
» поддерживает локаль и Unicode.
Однако, если вы используете кодовый набор, не Unicode, тогда вам не нужно беспокоиться о цифрах Unicode, и если код, который вы используете, похож на Latin-1 (ISO 8859-1 или 8859-15), то знание локали не повредит вы либо потому, что кодовый набор не включает никаких других цифровых символов.
Таким образом, для многих людей большую часть времени вы можете без проблем использовать ' \ d
'. Однако, если данные Unicode являются частью вашей работы, вам необходимо более внимательно подумать о том, что вам нужно.
Just like nuking the site from orbit, [0-9]
is the only way to be sure. Yeah, it is ugly. Yeah, the choice to make \d
be UNICODE and locale aware was stupid. But this is our bed and we have to lie in it.
As for the people ducking their heads in the sand saying it doesn't effect the character set they are using today, well you may be using that character set today, but the rest of the world is using UTF-8 now and you will be using it soon as well. Remember to code like the guy who maintains your code is a homicidal maniac who knows where you live.
Oh, and as for Perl modules using \d
vs [0-9]
, even the core still has UNICODE problems.
If you do in fact mean any digit, but want to be able to do math with the results, you can use Text::Unidecode
:
#!/usr/bin/perl
use strict;
use warnings;
use Text::Unidecode;
my $number = "\x{1811}\x{1812}\x{1813}\x{1814}\x{1815}";
print "$number is ", unidecode($number), "\n";
After some more testing it looks like Text::Unidecode doesn't handle all digit characters correctly. I am writing a module that will work.
Я чувствую, что оба должны занять свое место. Однако в 99,999% случаев (особенно в моем закрытом большом американском мире сотрудничества) они взаимозаменяемы. Я использую Perl для управления данными каждый день, и ни в одном из наборов данных, с которыми я работаю, нет чисел, которые не помещаются в [0-9]
. Однако я понимаю, что существует важное различие между \ d
и [0-9]
, и хорошо знать об этом различии. Я использую \ d
, потому что он кажется более лаконичным (как вы сказали) и никогда не будет «неправильным» в моем маленьком мире манипуляций с данными.
Если вы примените \ d
к строке Unicode (например, в "\ X {660}" = ~ / \ d /
), он будет соответствовать цифре Unicode. Если вы примените \ d
к двоичной строке (например, эквивалент UTF-8 приведенного выше: "\ xd9 \ xa0" = ~ / \ d /
), он будет соответствовать только 10 цифр ASCII. Perl 5.8 не создает строки Unicode по умолчанию (если вы специально не просите об этом, например, в "\ X {...}"
или используйте utf8;
и т. Д.).
Мой совет: обращайте внимание на разницу между \ d
и [0-9]
, только если ваше приложение использует строки Unicode.
Если [0-9]
кажется неуклюжим, возможно, вы могли бы определить: $ d = qr / [0-9] /;
и использовать это вместо \ d
.