Programmierung Quereinsteiger?
То что видел я лично: цениться опыт работы с библиотеками
У нас совершенно разные задачи:
-программисту нужно хорошо знать основы программирования, сам язык и всё что крутится вокруг. Использование конкретной библиотеки зависит от задачи. Да и тут дело не только в конкретной библиотеке.
чел. как-то знающий язык и конкретную библиотеку и больше ничего - нам в принципе не нужен.
-прикладнику наоборот - нужно решить конкретную задачу и в основном одному.
НП. А вот имхо и весь язык, мне кажется проще бейсика:
var1=5 if var1 == 5: print("var1 == 5") elif var1 == 4: print("var1 == 4") else: print("var1 == " + str(var1)) items = ["orange", "strawberry"] for item in items: print(item, end=" ") for i in range(0, 11): print(i) print("") for i in range(10, 0, -1): print(i) print("Hello " * 5) test = "Hello"; print(test[::-1]) print(test[0:2]) print(test[2:0:-1]) def myprocedure(p): print("Hello " + p) def myfunc(p): return "Hello " + p myprocedure("uscheswoi_82") print(myfunc("uscheswoi_82")) class Test: def __init__(self, name): self.name = name def tostring(self): return self.name t = Test("uscheswoi_82") print(t.tostring()) x = lambda a : a + 10 print(x(5))
А это результат:
var1 == 5 orange strawberry 0 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 Hello Hello Hello Hello Hello olleH He le Hello uscheswoi_82 Hello uscheswoi_82 uscheswoi_82 15
Что то я не припомню чтобы в бейсике такая фигня была - print(test[::-1])
А почему она там должна быть?
Это как раз приятная фича питона. В R довольно близко:
> test <- 10:1
> print(test)
[1] 10 9 8 7 6 5 4 3 2 1
> print(test[test])
[1] 1 2 3 4 5 6 7 8 9 10
Резко сокращает обьем кода при обработке массивов/матриц - не нужны явные циклы, можно использовать векторизацию.
На питоне/R код для вычислительных задач компактнее си-шного раз эдак в 3-5. Понятно что по скорости может быть обратная картина. Но для очень широкого спектра применения разница по скорости пренебрежима.
pragma solidity ^0.5.0;
contract SolidityTest {
uint16 public a = 20;
uint16 public b = 10;
uint public sum = a + b;
uint public diff = a - b;
uint public mul = a * b;
uint public div = a / b;
uint public mod = a % b;
uint public dec = --b;
uint public inc = ++a;
}
Output :

А почему она там должна быть?
Раз питон "проще" бейсика, то все конструкции должны быть также проще, а именно эта вызывает у меня море вопросов.
Для начала нужно найти что это вообще такое
https://stackoverflow.com/questions/509211/understanding-s...
А после, долго и нудно разбираться с каждым вариантом. Что то подобное помню в Руби - смотришь на короткий код и нифига не понимаешь, что он может делать
Так что пусть уж лучше будет длинный код, но понятный без дополнительных поисков.
Конструкции в питоне проще. И нагляднее. Такие конструкции встречаются в скриптовых языках часто - например R, Labtalk в пакете Origin, Matlab. Они привычны для не-программистов пришедших в питонизм из всевозможных интерактивных пакетов научной графики и обработки данных. Для меня они интуитивно понятны.
Бейсик в варианте VB я воспринимаю с содроганием. Он мне категорически ненравиться. Хотя я знаю виртуозов этого языка использующих ево очень и очень эффективно для технических расчетов.
Длинный код нафиг не нужен для тех кто считает а не программит коммерческие приложения. Чужой питоновский или R код я читаю слёта не испытывая никаких трудностей. И такие конструкции только облегчают понимание. Но разрабу клепавшему интерфейсы они врядли понравяться.
Что то я не припомню чтобы в бейсике такая фигня была - print(test[::-1])
В бейсике было бы так:
DIM test test$ = "Hello" FOR i% = LEN(test$) TO 1 STEP -1 PRINT MID$(test$, i%, 1) NEXT
В других ЯП есть тоже mid, или substr. В C# было бы так https://docs.microsoft.com/ru-ru/dotnet/api/system.string.substring?view=net-6.0 и так https://stackoverflow.com/questions/228038/best-way-to-rev...
Для начала нужно найти что это вообще такое
https://stackoverflow.com/questions/509211/understanding-s...
А после, долго и нудно разбираться с каждым вариантом. Что то подобное помню в Руби - смотришь на короткий код и нифига не понимаешь, что он может делать
Так что пусть уж лучше будет длинный код, но понятный без дополнительных поисков.
a[start:stop] # items start through stop-1 a[start:] # items start through the rest of the array a[:stop] # items from the beginning through stop-1 a[:] # a copy of the whole array
Теперь что-то подобное в Шарпе - стоп означает не стоп, а стоп минус 1. И эту хрень надо постоянно держать в голове. А ведь до появления этой уродской нотации у меня в голове было на несколько байт больше свободного места.
Длинный код нафиг не нужен для тех кто считает а не программит коммерческие приложения.
Тогда наверное лучше Матлаб какой-нибудь? Там тупо алгебра, в том числе векторная. Поназывал всё однобуквенно и фигачишь функции и тензоры.
Вы вообще в курсе сколько стоит одна лицензия Матлаба для индустриального клиента? Я работал с Матлабом во времена научные - академический сектор мог себе позволить излишества. А сейчас фирма сказала что не видит необходимости в покупке этого продукта. И если честно - я тоже. Зачем чтото покупать если питон плюс scipy/numpy/... забесплатно обеспечивают вполне сравнимый функционал? Кроме линейной алгебры и верчения матриц - а мне их вертеть приходилось, решал обратные некорректные задачи в своей области - существует огромное количество других задач. И все их можно решать в питоне с библиотеками. Или в R. По большому счету я не вижу принципиальной разницы между программированием на языке Матлаба и на питоне. Объемы кода сравнимые.
Вообще легко запомнить:
В Си/Си++/Java/javascript/PHP/C#
for(i=start; i<end; i=step) { ... }
В Бейсике:
FOR i%=start TO end STEP step ... NEXT
В Pascal:
for i:=start to end do begin ... end или for i:=start downto end do begin ... end
А в Python:
array[start:end:step]
Это легко запомнить. Нелегко - какие значения присваивать этим переменным. Что в первом варианте end = length - 1. А в C# в разных местах ещё и с разной нотацией. В операторах цикла и индексах массивов писать length - 1, а в операторах срезов массивов просто length, потому что -1 там уже подразумевается, и если напишешь length - 1, то последний элемент не захватится.
Интересно, в других вышеперечисленных языках тоже полно таких "маленьких нюансов"?
Вы вообще в курсе сколько стоит одна лицензия Матлаба для индустриального клиента?
да, Матлаб своей ненормальной ценой всех уже достал, правда можно вместо него октав использовать, там все совместимо, хотя как раз из-за этой ненормальной цены питон-то и прижился. Я за собой заметил, что вычислительную математику в терминах библиотек лапака и бласов я на С++ пишу даже быстрее, чем на питоне, хотя строк это немного больше занимает, зато можно для себя быть уверенным что массивы в памяти лягут там, где я хочу.
Интересно, в других вышеперечисленных языках тоже полно таких "маленьких нюансов"?
Думаю да.
Тут преподаватель сравнивает Python и Си++ см. https://youtu.be/KdZ4HF1SrFs?t=1359. Как понимаю когда пишишь так x = "Hello World", в языке Python выделяется место в памяти под слово Hello World, а переменная x содержит не само знасение Hello World, а ссылку, если написать x = 5, удаляется из памяти Hello World, и переменная x содержит уже новую ссылку на число 5. А в Си++ так :
#include <iostream> #include <string> using namespace std; int main(int argc, char** argv) { string s = "Hello, World!"; string s2 = s; cout << s2 << endl; s = ""; cout << s2 << endl; }
Результат :
Hello, World! Hello, World! -------------------------------- Process exited after 0.02354 seconds with return value 0 Drücken Sie eine beliebige Taste . . .
НП.
Кому не нравится Python, можете попробывать Lisp:
Октав я все еще пользую время от времени но все реже и реже . Многие плюются - октав не вполне совместим, не все тулбуксы работают. А сейчас нет смысла и в октаве - многое в R и питоне мне нравится больше матлабовского.
Ну и смотря какой вычмат писать. По строкам сишный код у меня занимает в разы больше места - иногда приходится вычмат в виде DLL для софта управления оборудованием оформлять. Вообще сравнивать сложно. Все будет определяться степенью "библиотечности" функций.
Мне надо быстро давать осмысленные "вводные" начальству - обычно все требуется "еще вчера". Решающее значение имеют скорость вникания в проблему и имплементации метода обработки данных. Сама обработка редко требует больших выч.ресурсов. Чаще требуются упражнения в изощренной статистике чем обработка очень больших данных.
Кому не нравится питон может использовать R или Julia в зависимости от типа задач.
А в Си++ так
У них (у переменных s и s2) даже адреса разные:
#include <iostream> #include <string> using namespace std; int main(int argc, char** argv) { string s = "Hello, World!"; string s2 = s; cout << "Pointer of variable \"s\"=" << &s << "\n" << "Pointer of variable \"s2\"=" << &s2 << endl; cout << s2 << endl; s = ""; cout << s2 << endl; }
Результат:
Pointer of variable "s"=0x23fe30 Pointer of variable "s2"=0x23fe20 Hello, World! Hello, World! -------------------------------- Process exited after 0.02382 seconds with return value 0 Drücken Sie eine beliebige Taste . . .