Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Python

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Открыть новую тему     Написать ответ в эту тему

Adm10



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здесь обсуждается всё, что связано с использованием Python: программирование, библиотеки, ресурсы и другие вопросы

Python


Python - высокоуровневый язык программирования общего назначения с динамической типизацией и автоматическим управлением памятью, ориентированный на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ

С чего начать?
Простой, понятный и вместе с тем грамотный ресурс на русском языке: pythonworld.ru + самоучитель
Библия PEP8

Всего записей: 35 | Зарегистр. 13-10-2006 | Отправлено: 15:48 16-06-2007 | Исправлено: useretail, 21:51 22-06-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MBK2
хорошо, приведите пример конкретной вычислительной задачи, где Python  (с библиотеками), по-вашему,  работает  медленно и неоптимально. Конкретика она всегда продуктивнее.

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 09:10 11-06-2024
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235
Питон нигде не работает быстро и оптимально. Я даже компилированный в си питоновский код разбирал - там одно присваивание переменной занимает пару килобайт машинного кода. При том, что это считается самой быстрой питоновской реализацией, которая по маркетинговым статьям супер-пупер скоростная.
Про интерпретатор даже и говорить не буду.
Погуглите мои статьи на данные темы и сформулируйте тезисно претензии к ним.

Всего записей: 5032 | Зарегистр. 18-09-2018 | Отправлено: 09:59 11-06-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MBK2 погуглил, запрос  
'статьи MBK2' выдает какой-то бред про пылесосы.
Так будет конкретика от вас или нет?

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 11:30 11-06-2024 | Исправлено: U235, 11:32 11-06-2024
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235
Ну вот еще один... Не буду я вам прямые ссылки кидать, а то опять начнется вой за саморекламу и коммерческий контент. Даю маленькую подсказку - журнал Хакер, статьи про Питон, там разберетесь как искать в свободном доступе.

Всего записей: 5032 | Зарегистр. 18-09-2018 | Отправлено: 11:33 11-06-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MBK2 ну так это статьи как ломать, а где  вы там решаете и какую вычислительную задачу? Я же еще раз говорю, давайте конкретную вычислительную задачу и сравним производительность..  
И что вы предлагаете использовать вместо Python?  

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 12:22 11-06-2024
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235
Там подробно расписывается какой код генерит простое присваивание. То, что шарповский оптимизированный JIT буквально в пару ассемблерных инструкций транслирует.
Конечно, "конкретную вычислительную задачу" при желании и на ассемблере закодить можно китайским кодом так, что она медленнее питона работать будет, но мы ориентируемся на лидеров а не на аутсайдеров.

Всего записей: 5032 | Зарегистр. 18-09-2018 | Отправлено: 12:58 11-06-2024
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MBK2
 
Сколько лично вот вашего времени украдёт неоптимальность питона?
А сколько уже украла ваша озабоченность этой проблемой?  
 
Или вам не за себя обидно, а "за державу"?
 
 
Добавлено:
 
Если угодно, можете померять ущерб не временем, а деньгами.
Целые килобайты для простого присваивания - сколько будет в юанях?
 
 
ЗЫ. Я не топлю за питон, мне пофиг. Что понимать отказываюсь - это священных войн на ровном месте.

Всего записей: 17734 | Зарегистр. 14-10-2001 | Отправлено: 13:05 11-06-2024 | Исправлено: LevT, 13:14 11-06-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
наш молодой сотрудник, который "только на питоне", подключил фортрановский NAG и продолжает "считать на питоне", и все счастливы...
 
Добавлено:
 
 
LevT

Цитата:
Что понимать отказываюсь - это священных войн на ровном месте.

ну, например, для некоторых это развлечение...

Цитата:
сегодня я добрый и мне скучно
http://forum.ru-board.com/topic.cgi?forum=33&topic=9888&start=1839&limit=1

Всего записей: 24840 | Зарегистр. 06-12-2002 | Отправлено: 14:14 11-06-2024 | Исправлено: akaGM, 14:16 11-06-2024
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT

Цитата:
Сколько лично вот вашего времени украдёт неоптимальность питона?
А сколько уже украла ваша озабоченность этой проблемой?  

Я нисколько не озабочен - питоном пользуюсь только при большой надобности, за статьи гонорар уже получил.
Просто получил знание (затратив, кстати, определенный труд) и теперь абсолютно бесплатно делюсь им для тех, кому оно может пригодиться - это плохо? Насколько я понимаю, форум для того и создан.
То, что у некоторых старых питонолюбов пригорело в известном месте - дополнительный бонус.

Всего записей: 5032 | Зарегистр. 18-09-2018 | Отправлено: 14:29 11-06-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM сотрудник поступил, по моему, разумно и правильно.  
И нет вообще разницы в производительности, откуда дергать функции из библиотеки NAG, так ведь?  Но один участник форума почему то этого не понимает.. У него присвоение слишком долго выполняется..  
Хорошие все же басни у Ивана Андреевича..  
 

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 18:38 11-06-2024
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235
Конечно, абсолютно никакой разницы в производительности, когда ты сидишь в российском вузе на ставке и пилишь государственные гранты - циклы крутятся, лавэха мутится!

Всего записей: 5032 | Зарегистр. 18-09-2018 | Отправлено: 18:43 11-06-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235

Цитата:
сотрудник поступил, по моему, разумно и правильно.
догадайся, кто ему м-э-э-э, скажем, приказал :)
 

Цитата:
ты сидишь в российском вузе на ставке и пилишь государственные гранты - циклы крутятся, лавэха мутится!
это так, в сторону:
лично я сижу в академическом проституте, на МРОТе, гранты у нас есть только у дирекции, а премии дадут-не дадут -- зависит только от степени лизожопия лизоблюдия...
и не слушай всякую...

Всего записей: 24840 | Зарегистр. 06-12-2002 | Отправлено: 19:25 11-06-2024 | Исправлено: akaGM, 20:09 11-06-2024
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
лично я сижу в академическом проституте, на МРОТе,

В последнее время даже сам себя бояться слегка начинаю, стоит что-то предположить, а оно прямо в точку

Всего записей: 5032 | Зарегистр. 18-09-2018 | Отправлено: 20:29 11-06-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
проще спросить, чем самому написать :)
 
есть файл вот такого формата
Код:

first line, skip
1.0e-01      ; тут какие-то комментарии
2            ; --"--"--
3.3e+01      ; --"--"--
4.4          ; --"--"--

 
накачал кучу кода типа fscanf/sscanf, но чё-то как-то не того...
 
как проще прочитать 5 строк разного формата, ну или вычитать из строки после чтения readline() :

Код:

  line = file.readline()  # 1 skip line
  print(line.strip())
  line = file.readline()  # 2 line
  print(line.strip())
  line = file.readline()  # 3 line
  print(line.strip())
  line = file.readline()  # 4 line
  print(line.strip())
  line = file.readline()  # 5 line
  print(line.strip())

если можно, то без списков, кортежей и что там ещё есть в этом террариуме :)
 
Добавлено:

Код:

  line = file.readline()  # 1 skip line
  print(line.strip())
  line = file.readline()  # 2 line
  x = float(line.strip())
  print("2:", x)
  line = file.readline()  # 3 line
  i = int(line.strip())
  print("3:", i)
  line = file.readline()  # 4 line
  y = float(line.strip())
  print("4:", y)
  line = file.readline()  # 5 line
  z = float(line.strip())
  print("5:", z)

не знаю, может есть эффективнее и красивее, но пока как-то так...
 
Добавлено:
 
 
только такой способ работает по "чистым числам":
 
1.0e-01
1.0e-01      ; тут какие-то комментарии
это не проходит...

Всего записей: 24840 | Зарегистр. 06-12-2002 | Отправлено: 23:31 11-06-2024 | Исправлено: akaGM, 00:39 12-06-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM, списки удобны, чтобы не придумывать кучу переменных, а просто назвать список например first_five_lines
 
вариант 1:
Считываем весь файл целиком, проходим циклом и записываем результат в зависимости от типа.  

Код:
with open('test.txt', 'r', encoding='utf-8') as file:
    txt=file.readlines()
result=[]
for line in txt[1:5]:
     
    value=line.split(';')[0].strip()
    if value.isdigit():
        result.append(int(value))
    else:
        result.append(float(value))
x,i,y,z=result

Вариант 2: считываем 5 строк с зараннее заданым типом. Т.е. первая строка - str, вторая - float и т.д

Код:
result=[]
func=(str, float, int, float, float)
with open('test.txt', 'r', encoding='utf-8') as file:
    for i in range(5):
        line=file.readline()
        result.append(func[i](line.split(';')[0].strip()))
_,x,i,y,z=result

 
 
Еще варианты, если файл большой и данных много, то можно использовать модули cvs (встроенный), numpy или pandas, там комментарии можно пропускать, разделитель задавать и прочие удобные вещи для табличных данных.

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 06:39 12-06-2024
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 ... накачал кучу кода типа fscanf/sscanf, но чё-то как-то не того...  

 
Что не то? [^] , и не надо голову всякими там питонами забивать.
 

Код:
main()
{
    FILE *f;
    int i = 0;
    double a = 0., b = 0., c = .0;
    char buf[512];
 
    f = fopen("test.txt", "r");
    fgets(buf, sizeof(buf), f);    //skip 1st line
    fgets(buf, sizeof(buf), f); sscanf(buf, "%le[^]", &a);
    fgets(buf, sizeof(buf), f); sscanf(buf, "%d[^]",  &i);
    fgets(buf, sizeof(buf), f); sscanf(buf, "%le[^]", &b);
    fgets(buf, sizeof(buf), f); sscanf(buf, "%lf[^]", &c);
    printf("%e, %i, %e, %f\n", a, i, b, c);
}
 


Всего записей: 1570 | Зарегистр. 01-11-2004 | Отправлено: 09:38 12-06-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235

Цитата:
Вариант 2: считываем 5 строк с зараннее заданым типом.
да, это так, причём мне удалось даже избавиться от 5-ой переменной, так что файл _строго_ состоит из 4-х строк:
 
_пропускаемая_ строка
float
int
float
 
 
 
ne_viens
 
блин, вот где я просил это сделать на Си, а?
я ваще на паскале это делаю ещё проще:
 
assign(FP, 'text.txt');
reset(FP);
readln(FP);
readln(FP, x);
readln(FP, i);
readln(FP, y);
readln(FP, z);
 
и не более...
 
я сказал то, что мне надо сделать на питоне -- это ТЗ, всё, точка.
 
Добавлено:
 
 
для тех, кто пытается сделать мне "лучше"...
 
в программе на питоне надо прочитать имеющийся файл сторонней программы, формат которого строго задан, не меняется и редактированию не подлежит.
 
предельно ясно и просто, не надо додумывать сверх этого...
 
Добавлено:
 
 
U235
 
зафигачил :)
 
с таким вот монстром { result.append(func[i](line.split(';')[0].strip())) } ни за что бы не сделал :)
а что здесь такое за [0] ?
 
спасибо...
 

Код:

#readConfig
def readConfig(filename):
  """
file:
config file -- comment line, must exist
 0.3         ; frac
 2           ; degree
 12.0        ; additional value
  """

 
  file = open(filename, "rt")
 
  lines_set = []
  lines = (float, int, float)
 
  line = file.readline()
  for i in range(3):
    line = file.readline()
    lines_set.append(lines[i](line.split(';')[0].strip()))
 
  file.close
 
  frac, degree, addY = lines_set
 
  return frac, degree, addY
#/readConfig

 
Добавлено:
 
 
да, блин...
 
а я думал, что паскалевская readln() -- самая негибкая и примитивная функа...

Всего записей: 24840 | Зарегистр. 06-12-2002 | Отправлено: 10:01 12-06-2024 | Исправлено: akaGM, 10:49 12-06-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM, дело вкуса, но лучше открывать файл с with, тогда файл не останется открытым, если что то пойдет не так до close, и вызывать явно close  не надо будет.
можно возвращать сразу return result, без ввода новых переменных frac, degree... Если  названия необходимы для понимания логики программы, то можно формировать и  возвращать словарь:
result={'frac':0.3, 'degree':2, 'addY':12.0}
Но это дело привычки и вкуса.
 
 
 

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 10:50 12-06-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
U235
 
какой нахрен вкус, всего 100 моих строчек на питоне?
вообще бы его не есть...
 

Цитата:
с таким вот монстром { result.append(func[i](line.split(';')[0].strip())) } ни за что бы не сделал :)
а что здесь такое за [0] ?
остался открытым...
 
Добавлено:

Цитата:
можно возвращать сразу return result
а как тогда "принимать", вот так:
 
frac, degree, addY = readConfig()  ?
 
Добавлено:
 
 
ещё врпрос:
 
lines = (float, int, float)
 
вот это что тут генерится/заготавливается?

Всего записей: 24840 | Зарегистр. 06-12-2002 | Отправлено: 10:58 12-06-2024
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM, split делит строку  по разделителям на элементы ; и  
берется первый (нулевой по индексу) элемент.
Да, принимать так, как вы написали.
 
lines это кортеж (массив) функций, каждая функция тут переводит строку в тип float или int.

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 11:20 12-06-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Python


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru