Python est un outil pratique qui vous permet d'effectuer facilement des calculs comme une calculatrice, ou de programmer et d'exécuter rapidement de petits processus. Il y a aussi Python qui fonctionne à l'intérieur d'une vraie calculatrice. (Référence: CASIO Color Graph Function Calculator fx-CG50) Un processus qui prend des dizaines de lignes à écrire en langage C peut être écrit en quelques lignes en Python. Python est un langage orienté objet, mais comme il s'agit essentiellement d'une définition de fonction, il est facile à utiliser pour les programmeurs en langage C. Utilisons à la fois les épées C et Python pour qu'un traitement simple puisse être effectué avec Sassa en Python.
Je suis tombé sur Python lors du téléchargement de données collectées à partir de capteurs IoT, etc. vers le cloud dans les affaires M2M, il est nécessaire d'effectuer le traitement des données de réduction du volume de communication et le traitement du téléchargement, et je l'ai utilisé dans la communication M2M [Digi International] Le ** routeur cellulaire ] de l'entreprise (https://www.digi.com/products/cellular-solutions/cellular-routers) dispose d'un [ interpréteur Python intégré **](https: // www C'était quand je connaissais et utilisais .digi.com / resources / documentation / digidocs / 90001537 / default.htm). C'était ** Python intégré ** qui ne pouvait pas être défini par classe. Avant le travail M2M, j'écrivais des programmes en langages C et Java, mais après avoir appris Python, je suis tombé amoureux de sa facilité d'utilisation, et maintenant mon passe-temps est de jouer avec Python. Cependant, il y avait beaucoup de choses que je devais penser différemment du langage de programmation en langage C (C / C ++ / Java / JavaScript), donc j'écrirai un article d'introduction sur Python pour ceux qui connaissent le langage de programmation en langage C. J'ai décidé de.
Site officiel de Python: https://www.python.org/ Documentation japonaise: https://docs.python.org/ja/3/ ・ Spécifications du langage: https://docs.python.org/ja/3/reference/index.html ・ Tutoriel: https://docs.python.org/ja/3/tutorial/index.html ・ FAQ: https://docs.python.org/ja/3/faq/index.html
Actuellement, je suis engagé dans la recherche fondamentale sur la cybersécurité en dehors des travaux M2M. J'ai été heureux d'entendre ce qui suit dans l'essai "** Devenir un hacker **" que j'ai rencontré dans la cybersécurité.
Si vous ne connaissez aucun langage informatique, nous vous recommandons de commencer par Python. Le design est propre, la documentation est solide et il est assez facile de s'entendre pour les débutants. Mais même si c'est le meilleur langage d'introduction, ce n'est pas un jouet. Il est puissant, flexible et bien adapté aux grands projets.
Notez que "** hacker **" ne veut pas dire mauvais.
Il existe une communauté ou une culture partagée de programmeurs qualifiés et de génies des réseaux. Son histoire remonte aux premiers mini-ordinateurs à temps partagé et aux premières expériences ARPAnet. Les gens de cette culture ont inventé le terme «hacker hacker». Les pirates ont construit Internet. Les pirates ont fait du système d'exploitation UNIX tel qu'il est aujourd'hui. Les pirates informatiques exécutent Usenet pour activer le World Wide Web.
Tout d'abord, préparons un environnement d'exécution Python qui vous permet d'utiliser Python. L'environnement d'exécution Python comprend des interpréteurs et des bibliothèques Python qui exécutent des scripts Python.
Il existe deux versions principales de Python, 2 séries (Python2.x) et 3 séries (Python3.x). Il a été annoncé que la prise en charge de Python 2 prendra fin en 2020. Les spécifications du langage ont été modifiées et des fonctions ont été ajoutées dans la série Python3. Si vous voulez apprendre à partir de maintenant, utilisez Python3. La nouvelle version de Python3 a quelques fonctionnalités utiles, utilisez donc la version la plus récente autant que possible.
Il existe plusieurs implémentations de l'environnement d'exécution Python (principalement l'interpréteur Python). Le standard est Python fourni par python.org. Il s'appelle CPython car il s'agit d'un interpréteur Python écrit en langage C. D'autres sont Jython implémentés en Java et PyPy qui compile les scripts Python en instructions CPU, puis les exécute. Il existe également des environnements tels que Jupyter notebook et anaconda qui vous permettent d'installer facilement diverses bibliothèques et de suivre l'exécution en tant que notebook. Dans cette introduction, nous utiliserons CPython standard.
Si vous utilisez le système d'exploitation Windows, vous devez installer Python. Veuillez télécharger et installer à partir de https://www.python.org/downloads/. De nombreuses personnes ont écrit sur la procédure d'installation, veuillez donc vous référer à cet article.
Si vous utilisez Linux OS ou Mac OS, Python est installé par défaut. Cependant, il peut s'agir de la version 2. Vous pouvez également avoir la version 2 et la version 3 installées. Essayez d'exécuter la commande comme suit pour vérifier la version.
$ python --version
Python 2.7.15rc1
$ python2 --version
Python 2.7.15rc1
$ python3 --version
Python 3.6.5
Si vous utilisez Python pour les entreprises, vous maintiendrez probablement l'environnement de la version Python et de la version de la bibliothèque au moment où vous l'avez fourni au client. C'est une bonne idée d'introduire un environnement virtuel Python afin de pouvoir facilement basculer vers l'environnement Python qui vous convient. Il existe des implémentations d'environnements virtuels Python tels que venv, pyenv, pipenv, veuillez donc installer et utiliser l'environnement virtuel en fonction de la plage qui doit être commutée. Voir les articles d'autres personnes pour les instructions d'installation.
Commençons par une brève touche sur Python.
Tout d'abord, lancez l'interpréteur Python interactif. Pour Windows, démarrez la version ligne de commande de Python3.x dans Python3.x dans le menu Démarrer. (Vous pouvez également choisir IDLE, mais c'est une version GUI de l'interpréteur Python.) Pour Linux ou MacOS, exécutez la commande python3 ou la commande python sans argument.
Python3 pour Windows(32bit)
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Python3 pour Linux(64bit)
$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
est une invite d'entrée pour demander une entrée.
Si vous avez besoin d'une entrée multiligne, l'invite de saisie se transforme en «...».
Commençons par un simple calcul arithmétique.
>>> 1 + 2 * 3
7
>>> (1 + 2) * 3
9
>>> 9 * 2
18
>>> 9 / 2
4.5
Contrairement au langage C, le résultat du calcul de /
est une fraction flottante.
Utilisez //
pour trouver le quotient d'un entier ainsi que le langage C /
. Le quotient d'une fraction flottante est une fraction flottante.
Il y a aussi un «%» qui demande le reste.
>>> 9 // 2
4
>>> 9.0 // 2
4.0
>>> 9 % 2
1
>>> 9.0 % 2
1.0
Vous pouvez effectuer des calculs de multiplicateur qui ne devraient pas être disponibles en langage C. Vous pouvez également calculer l'itinéraire en en faisant un nombre inverse.
>>> 9 ** 2
81
>>> 81 ** (1/2)
9.0
>>> 81 ** 0.5
9.0
>>> 9 ** 3
729
>>> 729 ** (1/3)
8.999999999999998
Les fractions flottantes ne reviennent plus à leur 9 d'origine en raison d'erreurs.
Le résultat du calcul peut être stocké dans une variable.
>>> x = 1 + 2 * 3
>>> x
7
>>> y = 3 * x + 5
>>> y
26
Vous n'avez pas besoin de spécifier le type de la variable. Plutôt que de l'attribuer à une variable, il vaut mieux la considérer comme un nom et une conservation de la valeur. Les variables seront expliquées plus tard.
Définissons une fonction arithmétique.
>>> def f(x):
... y = 3 * x + 5
... return y
...
>>> f(0)
5
>>> f(1)
8
>>> f(2)
11
La fonction est définie par l'instruction def. L'écriture du nom et de l'argument de la fonction est la même qu'en langage C, mais elle diffère du langage C en ce qu'elle n'écrit pas le type d'argument et le type de valeur de retour. Python connaît le type de la valeur, vous n'avez donc pas à spécifier le type de l'argument ou de la variable. Un nombre peut être passé à l'argument x, ou une chaîne de caractères peut être passée. Cette fonction est définie en pensant que l'appelant passera un numéro.
En langage C, le bloc de traitement des fonctions est entouré par {}, mais en Python, la plage où le retrait est abaissé est le bloc de traitement.
Si les retraits ne sont pas alignés, une erreur se produit. Peu importe si l'instruction if ou for réduit davantage l'indentation.
En plus de l'instruction def, écrivez un bloc avec des retraits après avoir terminé l'instruction par :
, comme l'instruction if, for et while.
La documentation officielle a également un tutoriel à utiliser comme calculatrice. Il décrit également des données autres que des nombres entiers, veuillez donc vous y référer également. https://docs.python.org/ja/3/tutorial/introduction.html
Vous pouvez quitter l'interpréteur Python en tapant Ctrl + Z sous Windows ou Ctrl + D sous Linux / MacOS.
Sinon, exécutez la fonction ʻexit () ou
quit () pour quitter. Exécuter ʻexit (0);
en C équivaut à terminer la commande.
>>> exit()
$
Pour le langage C, écrivez le code source du langage C, convertissez-le en langage machine à l'aide du compilateur et de l'assembleur du langage C, créez un fichier exécutable à l'aide de l'éditeur de liens, et lorsque le fichier exécutable est démarré, le processeur exécute le langage machine. Le résultat de l'exécution est obtenu. Pour Python, écrivez un script Python, spécifiez le nom du fichier de script, démarrez l'interpréteur Python et l'interpréteur Python exécutera le script Python. Python semble fonctionner sans compilation, mais en fait, il s'exécute après la compilation du script en langage de machine virtuelle (code intermédiaire) lorsque l'interpréteur Python démarre. L'interpréteur Python devient une machine virtuelle (VM) et exécute le langage de la machine virtuelle.
Nom du modèle | Langage C | Python |
---|---|---|
int | 16/Données de longueur fixe 32 bits limite supérieure/Il y a une limite inférieure |
Données de longueur variable limite supérieure/Pas de limite inférieure |
long long long |
32/Données de longueur fixe 64 bits limite supérieure/Il y a une limite inférieure |
Unifié avec int |
short | Données de longueur fixe 16 bits | Unifié avec int |
char | Données de longueur fixe 8 bits Mettre les caractères entre guillemets simples |
Remplacer par une seule chaîne de caractères |
bytes | Aucun | Tableau de données de longueur fixe 8 bits Une chaîne doit être convertie |
str (chaîne de caractères) | tableau de caractères '\0'Terminer par Entourer de guillemets doubles |
Un tableau de caractères Unicode 16 bits シングルまたはEntourer de guillemets doubles(違いなし) L'échappement de caractère spécial est identique au langage C \x00 Spécifiez le code ASCII hexadécimal avec\u0000 Spécifiez unicode hexadécimal avec |
chaîne de ligne | Aucun | Chaîne de caractères avec échappement de caractère spécial désactivé Vous pouvez réécrire des guillemets tels que le chemin du fichier Windows en un Exemple: r"C:\User\someone" |
bool (valeur vraie / fausse) | 0 est faux Vrai sauf 0 |
False est faux, True est vrai (En fait, il s'agit d'une sous-classe de type int, False peut être calculé comme 0, True entité peut être calculé comme 1.) |
enum | Données d'énumération | Remplacer par la classe Faites-en une sous-classe de la classe Enum |
struct | Type de données défini par l'utilisateur | Remplacer par la classe |
class | Aucun | Struct qui peut également écrire des fonctions |
Tableau/liste | Séquence de données du même typeint data[] = {1, 2, 3}; |
Organisation des données Vous pouvez organiser différents types de données Tableauの中にTableauも入れられる data = [1, 'abc', [3.14, True]] |
tuple | Aucun | Liste qui ne peut pas être modifiée (Le contenu de la liste dans le taple peut être changé) data = (1, 'abc', 3.14) |
dict | Aucun | Données qui sont un ensemble de clés et de valeurs Les clés peuvent être des chaînes, des nombres ou des taples data = {1: 'one', 'pi': 3.14} |
ensemble | Aucun | Une collection de données qui ne se chevauchent pas Peut effectuer des opérations d'ensemble data = {1, 'abc', 3.14} |
En langage C, la valeur entière «1» écrite dans le code source est compilée et intégrée dans l'opérande du langage machine, ou stockée dans une variable de type int (zone mémoire). En Python, la valeur entière «1» écrite dans le script est interprétée comme une valeur de type int par l'interpréteur, la zone de mémoire pour le type int est allouée (malloc) et l'objet de type int avec la valeur «1» est créé. Sera généré. La valeur de l'objet de type int ne peut pas être réécrite, et chaque fois que différentes valeurs apparaissent pendant l'exécution du programme, une zone mémoire est sécurisée et un objet valeur est généré, et les objets qui ne sont plus utilisés sont automatiquement renvoyés en mémoire. Je vais.
En CPython, les objets sont définis par des structures.
Structure d'en-tête d'objet Python
typedef struct _object{
Py_ssize_t ob_refcnt; //Nombre de références(8 octets), La mémoire est libérée lorsqu'elle atteint 0
struct _typeobject* ob_type; //Pointeur pour saisir des informations(8 octets)
}PyObject;
Les objets de type Int sont suivis de la taille des données (8 octets) et des données de valeur (octets arbitraires) en plus de l'en-tête de l'objet. La zone de données est un tableau de longueur variable et peut gérer de grandes valeurs entières. Si la valeur est «0», le total de l'en-tête ci-dessus 16 octets et de la zone de taille de données de taille 0 est de 24 octets. Si la valeur est «1», la taille augmentera un peu car elle nécessite une zone de données. En Python, vous pouvez rechercher l'adresse et la taille d'un objet.
>>> type(0) #Le type de la valeur peut être vérifié avec la fonction type
<class'int'> #Je sais que l'objet de valeur 0 est de type int
>>> id(0) #L'adresse de l'objet peut être trouvée avec la commande id
10910368 #Affichage décimal
>>> hex(id(0)) #16 affichage hexadécimal avec fonction hexadécimale
'0xa67aa0'
>>> import sys #Utiliser la bibliothèque sys
>>> sys.getsizeof(0) # sys.Vous pouvez vérifier la taille d'un objet avec la fonction getsizeof
24 #L'objet de type Int appelé 0 utilise 24 octets
>>> sys.getsizeof(1) #L'objet de type Int appelé 1 utilise 28 octets
28
Notez que les valeurs int comprises entre -5 et 256, qui sont souvent utilisées, ont des objets préparés à l'avance et sont implémentées de manière à pouvoir être réutilisées sans renvoyer la mémoire.
Les variables du langage C peuvent être assimilées à des conteneurs, et cela ressemble à "mettre une valeur dans une variable".
Toutes les variables Python sont des variables de pointeur. Les variables pointent uniquement vers des valeurs. Le sentiment de «nommer la valeur».
Les variables Python sont enregistrées dans le dictionnaire de variables et le nom de la variable est simplement une chaîne de caractères utilisée comme clé de dictionnaire pour récupérer la valeur.
Les dictionnaires de variables sont grossièrement divisés en dictionnaires de variables globales (globals ()
) et dictionnaires de variables locales (locals ()
).
Vous pouvez également modifier les variables en manipulant directement le dictionnaire de variables globales.
>>> a = 123
>>> a
123
>>> globals()
{'a': 123, '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class'_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>> globals()['a']
123
>>> globals()['a'] = 'abc'
{'a': 'abc', '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class'_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>> a
'abc'
Diverses données peuvent être placées dans une liste ou un taple, ce n'est qu'un tableau de pointeurs et l'objet à la destination du point est de type int ou de type str.
En langage C, la fonction printf prend une chaîne de format comme argument et l'affiche sur la console. En Python, une chaîne formatée est utilisée pour créer une chaîne formatée et la fonction d'impression l'imprime sur la console. Il existe plusieurs façons de le formater.
>>> print("%08x: %02x %02x %02x" % (0x138, 9, 12, 0xa))
00000138: 09 0c 0a
>>> print("{:08x}: {:02x} {:02x} {:02x}".format(0x138, 9, 12, 0xa))
00000138: 09 0c 0a
>>> addr = 0x138
>>> data = [9, 12, 0xa]
>>> print(f"{addr:08x}: {data[0]:02x} {data[1]:02x} {data[2]:02x}")
00000138: 09 0c 0a
>>> print(f"{addr:08x}:", *[f"{item:02x}" for item in data])
00000138: 09 0c 0a
En langage C, si vous déclarez une variable dans une fonction, une variable locale est créée, et si vous ne déclarez pas de variable, une variable globale est utilisée. En Python, les variables locales sont créées en affectant des variables sans déclarer global dans une fonction, et en déclarant des variables globales et en affectant des variables, elles sont affectées à des variables globales. Cependant, lors du référencement d'une variable (lors de son utilisation pour l'affichage, etc.), si elle n'est pas dans la variable locale, la variable globale est recherchée.
456 s'affiche en langage C
#include <stdio.h>
int data = 123;
void func1() {
data = 456; //Affecter à une variable globale si la variable n'est pas déclarée
}
void func2() {
int data; //Lorsque vous déclarez une variable
data = 789; //Attribuer à une variable locale
}
int main(void) {
func1();
printf("%d\n", data);
func2();
printf("%d\n", data);
}
Résultat d'exécution
456
456
789 est affiché en Python
data = 123
def func1():
data = 456 #Affectation à une variable locale lors de l'affectation sans déclaration de variable
def func2():
global data #Lorsque vous déclarez global
data = 789 #Affecter à une variable globale
func1()
print(data)
func2()
print(data)
Résultat d'exécution
123
789
En langage C, les expressions immédiatement après if, for, while, etc. doivent être placées entre parenthèses. En Python, vous n'avez pas à le mettre entre parenthèses.
Langage C
if (data == 123) {
printf("OK\n");
}
Python
if data == 123:
print("OK")
Phrase | Langage C | Python |
---|---|---|
if | if-else Si la déclaration peut être écrite en continu dans le traitement d'autre Si vrai{ }Joindre avec pour abaisser le retrait |
if-elif-else elif indique clairement qu'ils ont le même niveau d'indentation |
for | Tourner le numéro d'index | Tourner des éléments tels que des tableaux |
do-while | Première exécution inconditionnelle une fois | Aucun |
switch-case | Cas divisé | Aucun 辞書を使ってCas diviséできる |
del | Aucun | Les variables peuvent être supprimées |
Importation de bibliothèque | #include | import |
En langage C, écrire uniquement le nom de la fonction est l'adresse de la fonction, et ajouter ()
est l'appel de la fonction.
En Python, écrire uniquement le nom de la fonction est un objet de fonction, et l'ajout de ()
est un appel de fonction.
En Python, la définition de la fonction est compilée dans un objet fonction, qui contient les instructions en langage machine pour la machine virtuelle. Vous pouvez inverser les instructions de langage d'assemblage de machine virtuelle dans un objet fonction. L'interpréteur Python devient une machine virtuelle et exécute des instructions de langage de machine virtuelle.
>>> def hello(name):
... print("Hello,", name)
...
>>> hello
<function hello at 0x6fffff21e18>
>>> hello("World!")
Hello, World!
>>> import dis
>>> dis.dis(hello)
2 0 LOAD_GLOBAL 0 (print)
2 LOAD_CONST 1 ('Hello,')
4 LOAD_FAST 0 (name)
6 CALL_FUNCTION 2
8 POP_TOP
10 LOAD_CONST 0 (None)
12 RETURN_VALUE
En Python, vous pouvez également définir une fonction à l'intérieur d'une fonction.
>>> def area(x, y):
... def triangle():
... return x * y / 2
... def rectangle():
... return x * y
... print("L'aire du triangle est", triangle(), "La superficie de la place est", rectangle())
...
>>> area(3, 4)
L'aire du triangle est 6.0 La superficie du carré est de 12
En langage C, un ensemble de données est défini comme une structure. En Python, vous pouvez utiliser des classes pour définir des blocs de données.
Langage C
#include <stdio.h>
struct PhoneData {
char *name;
char *number;
};
struct PhoneData phone_book[] = {
{ "Hanako Yamada", "03-1234-56789" },
{ "Taro Suzuki", "045-9876-54321" },
};
int main() {
for (int i = 0; i < sizeof(phone_book) / sizeof(phone_book[0]); i++) {
printf("%s %s\n", phone_book[i].name, phone_book[i].number);
}
}
Python
class PhoneData:
def __init__(self, name, number):
self.name = name
self.number = number
phone_book = [
PhoneData("Hanako Yamada", "03-1234-56789"),
PhoneData("Taro Suzuki", "045-9876-54321"),
]
if __name__ == '__main__':
for data in phone_book:
print(data.name, data.number)
Le contenu n'est pas organisé, je vais donc l'ajouter et le corriger petit à petit. Dans un deuxième temps, j'aimerais rédiger un contenu approfondi pour ceux qui ont une compréhension approfondie du langage C. Si vous avez des questions, veuillez commenter.
Vous pouvez comparer comment écrire un programme fonctionnel en langage C et un programme orienté objet Python.
J'utilise pleinement le style d'écriture de type Python.
Recommended Posts