В настоящее время я изучаю разработку полного стека javascript в Full Stack Academy, и, хотя я еще не являюсь экспертом, я хотел узнать, было ли легче выучить другие языки программирования после того, как вы погрузились в один. Поскольку я тоже хотел изучить питон, я подумал, что начну с этого.

Быстрая установка: Мой Mac уже поставляется с python 3.7, но вы можете получить последние версии здесь: https://www.python.org/downloads/, и вы можете проверить свою версию, введя python - -version в ваш терминал. Кроме того, если вы устанавливаете более новую версию, вам может потребоваться настроить псевдоним, чтобы команда python также ссылалась на обновленную версию, а не на старую версию. Для этого в вашем терминале вы можете ввести nano ~ / .bash_profile и добавить псевдоним python = python3. Просто нажмите + X, чтобы сохранить, y, чтобы подтвердить, и введите, чтобы выйти, закройте окно терминала и снова откройте. В противном случае для выполнения ваших команд просто используйте python3 вместо python.

Одно из основных отличий заключается в том, как печатать на консоли: в Javascript вы используете console.log, а в python просто используете print. В моем окне терминала после ввода «python» появится интерактивная подсказка, позволяющая нам писать и оценивать по одной строке python за раз. Очень просто.

Интерактивная подсказка великолепна, но со временем мы захотим иметь возможность выполнять несколько команд, поэтому давайте вместо этого создадим файл. Я использовал инструкции здесь: https://code.visualstudio.com/docs/python/python-tutorial, чтобы использовать python в VSCode, и сохранил файл с расширением .py. После сохранения я могу запустить свой файл с помощью путь python / to / file.py

В любое время вы всегда можете использовать функцию dir, чтобы продемонстрировать список методов, доступных для переменной, например print (dir ('Hello World')), или получить дополнительную информацию с помощью справки и типа, как в print (help (str )) или сузьте область поиска с помощью имени метода, как в print (help (str.methodname)).

Работа со строками:

Здесь я продемонстрирую основные различия строк между JS и Python. Одно из основных отличий, которое вы увидите ниже, - это объявление переменных. С python вам не нужно объявлять тип (например, JS «let», «const» или «var»), все, что вам нужно, - это оператор присваивания (‘=’) и имя. В то время как JS использует соглашения об именах в верблюжьем регистре, python обычно использует слова в нижнем регистре, разделенные подчеркиванием.

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

Javascript:
let/const/var newStr = 'Hello World'
applying console.log() to each of the below:
1. newStr.length prints '11'
2. newStr.slice(0,3) prints 'Hel'
3. newStr.slice(1) prints 'ello World'
4. newStr.toLowerCase() prints 'hello world'
5. newStr.toUpperCase() prints 'HELLO WORLD'
6. newStr.indexOf('e') or newStr.search('e') both print 1, the index of the first 'e', -1 is default
7. String(number) or (number).toString() will convert a number to a string
Python:
new_string = 'Hello World'
applying print() to each of the below:
1. len(new_string) prints '11'
2. new_string[0:3] returns 'Hel'
3. new_string[1:] return 'ello World'
4. new_string.lower() returns 'hello world'
5. new_string.upper() returns 'HELLO WORLD'
6. new_string.find('e') returns 1, the index of the first 'e', with -1 as a default
7. python also has a count: new_string.count('l') prints 3
8. str(number) will convert a number to a string

Строковые методы, продолжение:

Concatenation:
Javascript:
1. using "+" or "+="
2. using the concat() method
3. using console.log() and separating strings with ","
4. using repeat() method if you needed multiples of the same string
Python:
1. using "+" or "+="
2. using print() and separating strings with ","
3. using * as in "hi "*3 will print "hi hi hi "
Replace:
Javascript:
1. using replace() method
2. using ES6 template literals:
let a = 'apples'
let b = 'pears'
console.log(`I like ${a} and ${b}.`) prints "I like apples and pears."
Python:
1. using replace() method
2. using format()
a = 'apples'
b = 'pears'
print('I like {} and {}.'.format(a,b)) prints "I like apples and pears."
3. using an f' string
print(f'I like {a} and {b}.') also prints "I like apples and pears."
with f' string you can actually write code in the placeholder like you can with JS ES6 template literals

Работа с числами:

Далее поработаем с числами. Python в основном имеет дело с целыми числами и числами с плавающей запятой, где целое число - это тип: целое число, а десятичное число - это тип: с плавающей точкой.

Следующие арифметические операторы являются общими для двух языков: +, -, *, /, **,%. Python также имеет деление этажа: //, которое отбрасывает десятичную дробь (округляется до ближайшего целого числа), но НЕ имеет операторов инкремента (++) и декремента (- -). Точно так же у обоих есть операторы присваивания (=, + =, - =, * =, / =, ** =.% =), А в Python также есть опция // =.

Операторы сравнения также довольно похожи. Python не имеет строго равных / не равных и тернарных операторов, которые есть в JS (===,! ==,?), Но в остальном оба имеют (==,! =, ›,‹, ›=,‹ =).

Логические операторы в Python не основаны на символах. Вместо использования &&, || и! for and, or, and not, Python буквально использует слова «и», «или» и «не».

Побитовые операторы одинаковы для обоих языков.

В Python есть операторы идентичности «is» и «is not», которые используются в случаях, когда проверяется, находятся ли две переменные в одной и той же части памяти. Другой вариант проверки расположения в памяти - использовать метод id (), который принимает переменную и возвращает фактический адрес памяти, используемый для хранения значения этой переменной.

Javascript:
Number(), + before string, or *1 converts a string to number
parseInt() converts a string to an integer
parseFloat() converts a string to a decimal
Math.abs() return absolute value of a number
Math.round() return number rounded
Math.floor() returns number rounded down
Math.ceil() return number rounded up
Python:
int() converts a string to an integer
float() converts a string to a decimal
abs() return absolute value of a number
round() return number rounded

Списки, кортежи, наборы и словари:

Если бы мы хотели сохранить несколько значений в переменной в JS, мы бы использовали объекты, которые можно разбить на массивы (объекты в виде списка) и объекты (пары ключ-значение). (Функции также являются объектом, но это уже другая тема). Также существует понятие изменчивости или возможности изменения значений в переменной. Мы можем повлиять на это, решив, как объявить наши переменные (let, const или var) или какие методы мы используем для наших переменных. Еще одно соображение заключается в том, что массивы и объекты могут иметь повторяющиеся значения, но объекты не могут иметь повторяющихся ключей.

В Python для сбора значений используются следующие данные:

Список: упорядоченная и изменяемая коллекция допускает дублирование.
Кортеж: упорядоченная и неизменяемая коллекция допускает дублирование.
Установить: неупорядоченная и неиндексированная коллекция, дубликаты не допускаются.
Словарь: неупорядоченная, изменяемая и индексируемая коллекция.

Списки:

Ниже я объявлю список в квадратных скобках [] и применю некоторые методы для демонстрации использования. Вы также можете объявить с помощью ключевого слова list: овощи = список ([«морковь», «цветная капуста», «брюссельская капуста»]). Обратите внимание на квадратные скобки здесь.

vegetables = ['carrot', 'cauliflower', 'brussels sprouts']
vegetables2 = ['cucumber']
Retrieval:
1. len(vegetables) returns 3
2. vegetables[0] returns 'carrot'
3. vegetables[-1] returns 'brussels sprouts'
vegetables[0:2] returns ['carrot', 'cauliflower'] like JS array slice method
4. vegetables[1:] returns ['cauliflower', 'brussels sprouts']
5. vegetables.index('cauliflower') returns 2
6. print('carrot' in vegetables) return a boolean True
7. for numeric lists, there are also min(), max(), and sum() methods
Mutation:
1. vegetables[0]='carrot2' will change the 0 index to 'carrot2'
1. vegetables.append('broccoli') will add to the end of the list like JS array push method ie vegetables is now ['carrot2', 'cauliflower', 'brussels sprouts' 'broccoli']
2. vegetables.insert(0,'onion') will insert broccoli at the start of the list. Now, vegetables is ['onion', 'carrot2', 'cauliflower', 'brussels sprouts', 'broccoli']
3. vegetables.extend(vegetables2) will add the values in vegetables2 into vegetables.  Now, vegetables is ['onion', 'carrot2', 'cauliflower', 'brussels sprouts', 'broccoli', 'cucumber'].  (insert here would insert the entire vegetables2 list into vegetables, not just the value(s))
4. vegetables.remove('brussels sprouts') will remove 'brussels sprouts' from vegetables
5. vegetables.pop() will remove and return the last item of the list like the JS array pop method
6. vegetables.reverse() will reverse the items in vegetables
7. vegetables.sort() will sort the items in vegetables in alphabetical or numerical ascending order vegetables.sort(reverse=True) will sort in the opposite order

Переход к списку:

Цикл по списку в python напоминает цикл по ключам объекта в JS. В качестве примечания: чтобы обозначить блок кода в Python, вы должны сделать отступ для каждой строки блока на одинаковую величину - обычно это четыре пробела.

for item in vegetables:
    print(item)

Вышеупомянутое напечатает каждый элемент в овощах. Как и в JS, вам не нужно использовать слово «элемент», вы можете выбрать любое слово для обозначения каждого элемента в списке. Опцию перечисления ниже можно использовать для доступа или, в нашем случае, для печати как элемента, так и индекса. Вы также можете передать второй аргумент, чтобы начать индекс с определенного числа, например «start = 1».

for index, item in enumerate(vegetables):
    print(index, item)

Перечислить методы, продолжение:

1. ', '.join(List) will return a new string equal to the List joined by the prefix, in our case ', '
2. .split(' ,') will return a new List equal to a string split by the parameter

Кортежи:

Кортежи почти такие же, как списки, но они неизменяемы. Вы назначаете кортеж с помощью parans () или ключевого слова кортежа, т.е. tuple_example = tuple ((itemA, itemB,…)). Обратите внимание на двойные параны.

tuple_example = ('Apple', 'Orange')

Мы можем использовать любой из методов List, которые обращаются к значениям в кортеже, а также перебирают кортеж, но ничего, что изменяет значения.

Наборы:

Наборы определяются с помощью ключевого слова set, т.е. new_set = set ([itemA, itemB,…]), но в распечатках будут отображаться в фигурных скобках {}. Чтобы проверить, они неупорядочены, поэтому при распечатке набора элементы обычно возвращаются в другом порядке. В основном наборы используются для проверки того, является ли значение частью набора, или для избавления от повторяющихся значений. Наборы оптимизированы для подтверждения наличия элементов в коллекции.

Установить методы:

letters_set = set(['a', 'b', 'c'])
more_letters_set = set(['b', 'c', 'd'])
1. print(letters_set.intersection(more_letters_set)) will print {'b','c'} in any order
2. print(letters_set.difference(more_letters_set)) will print {'a'}
3. print(letters_set.union(more_letters_set)) will print {'a', 'b', 'c', 'd'} in any order

Словари:

Словари в Python очень похожи на объекты в JS, за исключением того, что ключи могут быть любого неизменяемого типа, тогда как ключи объектов в JS преобразуются в строки. Словари объявляются фигурными скобками {}.

animal = {'species': 'Tiger', 'name': 'Tony', 'age': 3, 'color': ['orange', 'black'], 1: 'mammal'}
Retrieval:
1. print(len(animal)) prints 5
2. print(animal['species']) prints 'Tiger'
3. print(animal[1]) prints 'mammal'
4. print(animal[2]) prints a keyerror
5. print(animal.get('type')) prints 'Tiger'
6. print(animal.get(2)) prints 'None' instead of a keyerrorprint(animal.get(2, 'No Key')) prints 'No Key'
7. print(animal.keys()) prints dict_keys(['species','name','age','color',1])
8. print(animal.values()) prints dict_keys(['Tiger','Tony',3,['orange','black'],'mammal'])
9. print(animal.items()) prints dict_items([('species': 'Tiger'), ('name': 'Tony'), ('age': 3), ('color': ['orange', 'black']), (1: 'mammal')])
Mutation:
1. animal['genus'] = 'panthera' will add a new key-value pair or update value of an existing key
2. animal.update({'name': 'Aslan', 'age': 2}) will change the name to 'Aslan' and age to 2 and keep all other key-value pairs the same
3. del animal[1] will delete the 1:'mammal' pair from animal
4. animal.pop('age') will remove the 'age': 25 pair from animal and return 25 as a value

Цикл:

animal = {'species': 'Tiger', 'name': 'Tony', 'age': 3, 'color': ['orange', 'black'], 1: 'mammal'}
for key in animal:
    print(key)
will print:
species
name
age
color
1
for key, value in animal.items():
    print(key, value)
will print:
species Tiger
name Tony
age 3
color ['orange', 'black']
1 mammal

Операторы If, Else, Elif:

Операторы if, else и elif довольно похожи между JS и Python после учета синтаксиса. Ниже я показываю оператор JS if, else, elif, а затем перевожу его на Python для сравнения. Упомянутые выше компаратор и логические операторы могут использоваться для проверки дальнейших операторов.

Javascript:
let studentA = 'John'
let studentAEnrolled = false
let studentAPlans = 'student next semester'
if(studentA==='John' && studentAEnrolled){
console.log('is student')
} else if (studentAPlans === 'student next semester'){
console.log('enrolling')
} else {
console.log('not a student')
}
will print 'enrolling'
Python:
student_a = 'John'
student_a_enrolled = False
student_a_plans = 'student next semester'
if student_a=='John' and student_a_enrolled:
    print('is student')
elif student_a_plans == 'student next semester':
    print('enrolling')
else:
    print('not a student')
will print 'enrolling'

Циклы и итерации:

Помимо упомянутых выше циклов, таких как JS, Python также имеет циклы while с ключевыми словами break и continue.

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

Мой следующий план - рассмотреть функции в Python и провести аналогичное сравнение.