Хорошей практикой является указание столбцов, которые вы запрашиваете, даже если вы запрашиваете все столбцы.
Поэтому я бы предложил вам написать имя каждого столбца в заявлении (за исключением того, 't want).
SELECT
col1
, col2
, col3
, col..
, col53
FROM table
Ответ в одной строке:
''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))
или даже короче, начиная с Python 3.6 с использованием random.choices ()
:
''.join(random.choices(string.ascii_uppercase + string.digits, k=N))
Криптографически более безопасная версия; см. https://stackoverflow.com/a/23728630/2213647 :
''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))
Подробно, с чистой функцией для дальнейшего использования:
>>> import string
>>> import random
>>> def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
... return ''.join(random.choice(chars) for _ in range(size))
...
>>> id_generator()
'G5G74W'
>>> id_generator(3, "6793YUIO")
'Y3U'
Как это работает?
Мы импортируем строка
, модуль, содержащий последовательности общих символов ASCII, и random
, модуль, который имеет дело со случайной генерацией.
строка.ascii_uppercase + строка.digits
просто объединяет список символов, представляющих символы и цифры ASCII в верхнем регистре:
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.ascii_uppercase + string.digits
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
Затем мы используем понимание списка для создания списка из n элементов:
>>> range(4) # range create a list of 'n' numbers
[0, 1, 2, 3]
>>> ['elem' for _ in range(4)] # we use range to create 4 times 'elem'
['elem', 'elem', 'elem', 'elem']
В приведенном выше примере мы используем [
для создания списка, но мы этого не делаем в функции id_generator
, поэтому Python не создает список в памяти, а генерирует элементы на лету, один за другим (подробнее об этом здесь ).
Вместо того, чтобы просить создать n раз строку elem
, мы попросим Python создать n раз случайный символ, выбранный из последовательности символов:
>>> random.choice("abcde")
'a'
>>> random.choice("abcde")
'd'
>>> random.choice("abcde")
'b'
Следовательно random.choice (chars) для _ in range (size)
действительно создает последовательность символов size
. Символы, которые выбираются случайным образом из символов
:
>>> [random.choice('abcde') for _ in range(3)]
['a', 'b', 'b']
>>> [random.choice('abcde') for _ in range(3)]
['e', 'b', 'e']
>>> [random.choice('abcde') for _ in range(3)]
['d', 'a', 'c']
Затем мы просто соединяем их пустой строкой, так что последовательность становится строкой:
>>> ''.join(['a', 'b', 'b'])
'abb'
>>> [random.choice('abcde') for _ in range(3)]
['d', 'c', 'b']
>>> ''.join(random.choice('abcde') for _ in range(3))
'dac'
UITabBar наследуется от UIView, поэтому его можно скрыть и анимировать так же, как и стандартный UIView.
- (void) hideTheTabBarWithAnimation:(BOOL) withAnimation {
if (NO == withAnimation) {
[theTabBar setHidden:YES];
} else {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:nil];
[UIView setAnimationDuration:0.75];
[theTabBar setAlpha:0.0];
[UIView commitAnimations];
}
}
-121--2875882- Следуйте рекомендации в сообщении журнала: установите точку останова в malloc _ error _ break
. При срабатывании точки останова посмотрите на обратную трассировку в Xcode (или используйте команду bt
в командной строке gdb) и посмотрите, куда вы вызываете free
или API, использующий free
.
Проблемы использования памяти иногда обнаруживаются с помощью статического анализатора Xcode - выберите "Build and Analyze" в меню построения Xcode.
-121--4817545- Более простой, быстрый, но немного менее случайный способ состоит в использовании random.sample
вместо выбора каждой буквы отдельно, Если допускаются n-повторы, увеличьте случайный базис в n раз, например
import random
import string
char_set = string.ascii_uppercase + string.digits
print ''.join(random.sample(char_set*6, 6))
Примечание: random.sample предотвращает повторное использование символов, умножение размера набора символов делает возможным несколько повторений, но они все еще менее вероятны, тогда они находятся в чистом случайном выборе. Если мы идем для строки длиной 6, и мы выбираем 'X' в качестве первого символа, в примере выбора, шансы получить 'X' для второго символа такие же, как шансы получить 'X' как первый символ. В реализации random.sample шансы получить 'X' как любой последующий символ только 6/7 шансы получить его как первый символ