[Introduction à Python3 Jour 8] Chapitre 4 Py Skin: Structure du code (4.1-4.13)

4.1 Commentaire de

4.2 Continuation de la ligne par \


#Si vous souhaitez créer une longue chaîne de caractères à partir d'une petite chaîne de caractères, il existe une méthode pour la créer petit à petit comme suit.
>>> alphabet = ""
>>> alphabet +="abcdefg"
>>> alphabet +="hijklmnop"
>>> alphabet +="qrstuv"
>>> alphabet +="wxyz"

#Si vous utilisez des caractères continus, vous pouvez le créer en une seule étape sans le rendre difficile à voir.
>>> alphabet = "abcdefg" + \
...  "hijklmnop" +\
...   "qrstuv"+\
...     "wxyz"

#La continuité de ligne est également requise lorsqu'une ligne s'étend sur plusieurs lignes.
>>> 1+2+
  File "<stdin>", line 1
    1+2+
       ^
SyntaxError: invalid syntax
>>> 1+2\
... 3
  File "<stdin>", line 2
    3
    ^
SyntaxError: invalid syntax
>>> 1+2+\
... 3
6

4.3 Comparaison par if, elif, else


#Un programme qui vérifie le contenu de la catastrophe et affiche les commentaires appropriés
>>> disaster = True
>>> if disaster:
...  print("Woe!")
... else:
...  print("Whee!")
...
Woe!


>>> funny = True
>>> small = True
#Si si drôle vaut Vrai, entrez le test si petit.
>>> if funny:
...     if small:
...      print(" It is a cat.")
...     else:
...      print(" It is a bear!")
... else:
...      if small:
...       print(" It is a skink!")
...      else:
...       print(" It is a human.Or a hairless bear.")
...
 It is a cat.


#Si le test est divisé en 3 types ou plus, si,elif(signifie autrement si),Utilisez autre chose.
>>> color ="puse"
>>> if color =="red":
...  print(" It is a tomato")
... elif color =="green":
...  print(" It is a green pepper")
... elif color =="bee purple":
...  print("I don't know what it is,but only bees can see it")
... else:
...  print("I've never heard of the color",color)
...
I've never heard of the color puse


>>> x =2
#Test d'équivalence
>>> x ==2
True
>>> x ==5
False
>>> 4 < x
False
>>> x<10
True
#L'opérateur booléen a une priorité inférieure à l'élément à comparer.
#L'opérateur booléen est exécuté une fois que l'élément à comparer a été calculé en premier.
>>> 1<x and x <10
True
>>> 1<x or x <10
True
>>> 1<x and x >10
False
>>> 1<x and not x >10
True
>>> 1<x<10
True
>>> 1<x<10<377
True

4.3.1 Ce qui est vrai

--Tout ce qui est listé ci-dessous est considéré comme faux.

Ce qui est considéré comme faux valeur
Valeur booléenne False
null None
Entier zéro 0
Zéro de flotteur 0.0
Chaîne vide " "
Liste vide [ ]
Taple vide ( )
Dictionnaire vide { }
Ensemble vide set()

>>> some_list = []
>>> if some_list:
...  print("There's something in here")
... else:
...  print("Hey,it's empty!")
...
Hey,it's empty!

4.4 Traitement itératif par while

--Utilisez une boucle lorsque vous souhaitez faire la même chose plusieurs fois.


#Initialisation du comptage
#Comparez la valeur de count avec 5
#incrément de 1(Ajouter)
>>> count =1
>>> while count <=5:
...  print(count)
...  count+=1
...
1
2
3
4
5

4.4.1 Boucle de rupture due à une rupture

--Utilisez break si vous voulez briser la boucle


#boucle infinie
#input()Utilisez une fonction pour lire la ligne d'entrée sur le clavier et l'assigner à des trucs
#Le caractère d'entrée est"q":Si tel est le cas, quittez la boucle.
#"q"Autre que ce qui précède, le premier caractère de la chaîne de caractères d'entrée est affiché en majuscule.

>>> while True:
...  stuff=input("String to capitalize[type q to quit]:")
...  if stuff == "q":
...     break
...  print(stuff.capitalize())
...
String to capitalize[type q to quit]:type
Type
String to capitalize[type q to quit]:untitarou
Untitarou
String to capitalize[type q to quit]:q

4.4.2 Début de la prochaine itération avec continue


#input()Utilisez une fonction pour lire la ligne d'entrée sur le clavier et l'assigner à valeur
#Le caractère d'entrée est"q":Si tel est le cas, quittez la boucle.
#Définir la valeur sur le type int et l'attribuer au nombre
#S'il est pair, commencez l'itération suivante

>>> while True:
...  value=input("Integer,please [q to quit]:")
...  if value == "q":
...     break
...  number =int(value)
...  if number %2==0:
...     continue
...  print(number,"squared is",number*number)
...
Integer,please [q to quit]:1
1 squared is 1
Integer,please [q to quit]:2
Integer,please [q to quit]:3
3 squared is 9
Integer,please [q to quit]:q

4.4.3 Vérification de la pause par else


#Initialisation de la position variable
#Si même"Found even numbers"Et ce nombre est affiché et break quitte l'instruction while.
#La clause else est exécutée lorsque la partie while est terminée mais que l'objet souhaité n'est pas trouvé.(vérificateur de rupture)

>>> number =[1,3,5]
>>> position =0
>>> while position <len(number):
...  numbers=number[position]
...  if numbers%2 ==0:
...   print("Found even numbers",numbers)
...   break
...  position+=1
... else:
...  print("No even number found")
...
No even number found

Traitement itératif avec 4,5 pour

Python utilise fréquemment des ** itérateurs (qui récupèrent et retournent des éléments un par un à partir de listes, de dictionnaires, etc. pour chaque itération) **. Parce que vous pouvez manipuler chaque élément de la structure de données sans connaître la structure de données.


#déclaration while
>>> rabbits =["a","b","c","d"]
>>> current=0
>>> while current<len(rabbits):
...  print(rabbits[current])
...  current +=1
...
a
b
c
d

#pour déclaration
>>> for rabbit in rabbits:
...  print(rabbit)
...
a
b
c
d

** Objets itérables (correspondant aux itérateurs) ** en Python avec ** listes, chaînes, tapples, dictionnaires, ensembles, etc. **.

--Lorsque vous traitez un robinet ou une liste avec for, un élément est retiré à la fois. --Lorsque vous traitez une chaîne de caractères avec for, un caractère est généré à la fois, comme indiqué ci-dessous.


>>> word="cat"
>>> for letter in word:
...  print(letter)
...
c
a
t

--La clé est renvoyée lorsque le dictionnaire est traité avec for.

>>> accusation ={"a":"ballroom","b":"weapon","c":"kowai"}
>>> for card in accusation:
...  print(card)
...
a
b
c

--Si vous souhaitez parcourir les valeurs, utilisez la fonction values () du dictionnaire.

>>> for value in accusation.values():
...  print(value)
...
ballroom
weapon
kowai

>>> for value in accusation.items():
...  print(value)
...
('a', 'ballroom')
('b', 'weapon')
('c', 'kowai')

>>> for card,contents in accusation.items():
...  print("Card",card,"has the contents",contents)
...
Card a has the contents ballroom
Card b has the contents weapon
Card c has the contents kowai

4.5.1 Annulé en raison d'une rupture

Si vous mettez une instruction break dans l'instruction for, vous pouvez arrêter la boucle de la même manière que while.

4.5.2 Début de la prochaine itération avec continue

Si vous mettez continue dans l'instruction for, elle passera à l'itération suivante ainsi qu'à while.

4.5.3 Vérification de la pause par else

Comme while, for a un autre optionnel pour vérifier s'il s'est terminé normalement. Si break n'est pas appelé, l'instruction else est exécutée.


>>> cheeses=[]
>>> for cheese in cheeses:
...  print("This shop has some lovely",cheese)
...  break
... else:
...  print("This is not much of a cheese shop,is it?")
...
This is not much of a cheese shop,is it?

4.5.4 Traitement de séquences multiples avec zip ()


#Créer une liste
#Seuls les desserts sont plus longs que les autres listes. Personne ne reçoit de pudding à moins que les autres facteurs ne soient allongés.
>>> days =["Monday","Tuesday","Wednesday"]
>>> fruits=["coffee","tea","bear"]
>>> drinks=["coffee","tea","beer"]
>>> desserts=["tiamisu","ice cream","pie","pudding"]

#zip()Peut être utilisé pour créer un taple à partir d'éléments avec un décalage commun en traçant plusieurs séquences.
>>> for day,fruit,drink,dessert in zip(days,fruits,drinks,desserts):
...     print(day,":drink",drink,"- eat",fruit,"-enjoy",dessert)
...
Monday :drink coffee - eat coffee -enjoy tiamisu
Tuesday :drink tea - eat tea -enjoy ice cream
Wednesday :drink beer - eat bear -enjoy pie


#zip()La valeur renvoyée n'est pas une taple ou une liste, mais une valeur itérable qui peut être exploitée ou répertoriée.
>>> english="Monday","Tuesday","Wednesday"
>>> french="Lundi","Mardi","Mercredi"
#liste
>>> list(zip(english,french))
[('Monday', 'Lundi'), ('Tuesday', 'Mardi'), ('Wednesday', 'Mercredi')]
#dictionnaire
>>> dict(zip(english,french))
{'Monday': 'Lundi', 'Tuesday': 'Mardi', 'Wednesday': 'Mercredi'}

4.5.5 Générer une séquence numérique avec range ()


#Créez une plage de 0 à 3
>>> for x in range(0,3):
...   print(x)
...
0
1
2
#liste
>>> list(range(0,3))
[0, 1, 2]

#Créer une plage de 2 à 0
>>> for x in range(2,-1,-1):
...   print(x)
...
2
1
0
#liste
>>> list(range(2,-1,-1))
[2, 1, 0]

#Retirez les nombres pairs de 0 à 10
>>> list(range(0,11,2))
[0, 2, 4, 6, 8, 10]

4.6 Notation d'inclusion

** La notation d'inclusion ** est un format qui vous permet de créer de manière compacte une structure de données Python à partir d'un ou plusieurs itérateurs.

4.6.1 Notation d'inclusion de liste

Une liste d'entiers de 1 à 5 peut également être créée en ajoutant des éléments un par un comme indiqué ci-dessous.


#append()Est ajouté à la fin.
>>> number_list=[]
>>> number_list.append(1)
>>> number_list.append(2)
>>> number_list.append(3)
>>> number_list.append(4)
>>> number_list.append(5)
>>> number_list
[1, 2, 3, 4, 5]

#range()Il peut également être créé avec une fonction et pour.
>>> number_list=[]
>>> for number in range(1,6):
...     number_list.append(number)
...
>>> number_list
[1, 2, 3, 4, 5]

#range()Vous pouvez également le créer en convertissant directement la sortie de.
>>> number_list = list(range(1,6))
>>> number_list
[1, 2, 3, 4, 5]

Le code utilisant la ** notation d'inclusion de liste ** est indiqué ci-dessous.


#[expression for item in iterable]Format de base de
#La première variable numérique est le nombre de résultats d'exécution de la boucle_Pour stocker dans la liste.
#Le deuxième numéro fait partie de l'instruction for
>>> number_list = [number for number in range(1,6)]
>>> number_list
[1, 2, 3, 4, 5]

#Vous pouvez voir que le premier nombre est une expression.
>>> number_list = [number-1 for number in range(1,6)]
>>> number_list
[0, 1, 2, 3, 4]


>>> a_list=[]
>>> for number in range (1,6):
...     if number%2 ==1:
...       a_list.append(number)
...
>>> a_list
[1, 3, 5]

#[expression for item in iterable if condition]Format
>>> a_list = [number for number in range(1,6) if number %2 ==1]
>>> a_list
[1, 3, 5]


>>> rows =range(1,4)
>>> cols=range(1,3)
>>> for row in rows:
...     for col in cols:
...        print(row,col)
...
1 1
1 2
2 1
2 2
3 1
3 2

#La notation d'inclusion peut également être imbriquée.
#Il est sorti sous forme de taple.
>>> rows =range(1,4)
>>> cols=range(1,3)
>>> cells = [(row,col) for row in rows for col in cols]
>>> for cell in cells:
...     print(cell)
...
(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)

#ligne de taple lors de l'itération dans la liste des cellules,Retirez le col.
>>> for row,col in cells:
...     print(row,col)
...
1 1
1 2
2 1
2 2
3 1
3 2

4.6.2 Notation complète du dictionnaire

--Il existe également une notation d'inclusion dans le dictionnaire.


#"letters"Sortez les lettres une par une de"letters"Comptez combien sont inclus et écrivez la clé et le nombre de comptes_Stocker en nombre
>>> word ="letters"
>>> letter_counts={x:word.count(x)for x in word}
>>> letter_counts
{'l': 1, 'e': 2, 't': 2, 'r': 1, 's': 1}

#Essayons les mots comme un ensemble.
>>> word ="letters"
>>> letter_counts={x:word.count(x)for x in set(word)}
>>> letter_counts
{'e': 2, 'l': 1, 's': 1, 't': 2, 'r': 1}

4.6.3 Définir la notation d'inclusion

--Format de base de {élément pour élément dans itérable}

>>> a_set={number for number in range(1,6) if number %3 ==1}
>>> a_set
{1, 4}

4.6.4 Notation d'inclusion de générateur

--Il n'y a pas de notation d'inclusion dans le tuple --Retourne un objet générateur lorsque vous créez une notation d'inclusion avec des parenthèses ordinaires ――Un générateur est l'une des méthodes pour fournir des données à un itérateur.


#Les éléments entre () sont des notations incluses dans le générateur
>>> number_thing = (number for number  in range(1,6))
#Renvoie un objet générateur.
>>> type(number_thing)
<class'generator'>
#L'objet générateur peut être traité avec l'instruction for.
>>> for number in number_thing:
...     print(number)
...
1
2
3
4
5

#Notation d'inclusion du générateur de liste()Si vous l'enveloppez dans un appel, il peut fonctionner comme une notation de notation incluse dans la liste.
>>> number_list=list(number_thing)
>>> number_list
[1, 2, 3, 4, 5]

#Le générateur ne peut fonctionner qu'une seule fois. Le générateur crée les valeurs une par une sur place et les transmet à l'itérateur, donc je ne me souviens pas des valeurs créées. Par conséquent, le générateur ne peut pas être utilisé ou sauvegardé à nouveau.
>>> number_list=list(number_thing)
>>>
>>> number_list
[]

4.7 Fonctions

Le programmeur peut faire deux choses avec la fonction.

--Définition de la fonction

Pour définir une fonction Python, tapez def, écrivez le nom de la fonction, mettez les arguments d'entrée de la fonction entre parenthèses et écrivez (:) à la fin.


#make_a_sound()Lorsque vous appelez une fonction, Python exécute le code dans la définition. Dans ce cas, il génère un mot et renvoie le contrôle au programme principal.
>>> def make_a_sound():
...     print("quack")
...
>>> make_a_sound()
quack

#Une fonction qui n'a pas d'arguments mais qui renvoie une valeur
>>> def agree():
...     return True
...
>>> agree()
True

#Testez la valeur de retour en utilisant if.
>>> if agree():
...     print("Splendid!")
... else:
...     print("That was unexpected.")
...
Splendid!


>>> def echo(anything):
...     return anything+' '+anything
...
#echo()la fonction est"ss"Il est appelé avec l'argument réel.
#Cette valeur est un écho()Il est copié dans l'argument formel "anithing" et renvoyé à l'appelant.
>>> echo("ss")
'ss ss'

-Lors de l'appel d'une fonction avec ** argument **, ces valeurs sont copiées dans le ** paramètre ** correspondant de la fonction.

>>> def commtentary(color):
...     if color == "red":
...       return " It is a tomoato."
...     elif color =="green":
...       return " It is a green pepper"
...     elif color =="bee purple":
...       return "I don't know what it is,but only bees can see it."
...     else:
...       return "I've never heard of te color"+ color+"."
...
#"blue"Appelez la fonction de commentaire avec l'argument réel.
>>> comment=commtentary("blue")
>>> print(comment)
I've never heard of te colorblue.

--L'appelant reçoit None sauf si la fonction appelle explicitement return


>>> def do_nothing():
...   pass
...
>>> print(do_nothing())
None

>>> def is_none(thing):
...     if thing is None:
...       print(" It is nothing")
...     elif thing:
...       print(" It is True")
...     else:
...       print(" It is False")
...


>>> is_none(None)
 It is nothing
>>> is_none(True)
 It is True
>>> is_none(False)
 It is False

#Les nombres entiers et flottants nuls, les chaînes vides, les listes vides, les tapples vides, les dictionnaires vides, les ensembles vides sont faux, mais pas égaux à Aucun.
>>> is_none(0)
 It is False
>>> is_none(0.0)
 It is False
>>> is_none(())
 It is False
>>> is_none([])
 It is False
>>> is_none({})
 It is False
>>> is_none(set())
 It is False

4.7.1 Arguments de position

>>> def menu(x,y,z):
...     return{"wine":x,"entree":y,"dessert":z}
...
>>> menu("aaa","bbb","ccc")
{'wine': 'aaa', 'entree': 'bbb', 'dessert': 'ccc'}

4.7.2 Arguments de mots-clés

--Spécifiez le nom de l'argument formel correspondant et spécifiez l'argument réel.


>>> def menu(x,y,z):
...     return{"wine":x,"entree":y,"dessert":z}
...
>>> menu("beef","bagel","bordeaux")
{'wine': 'beef', 'entree': 'bagel', 'dessert': 'bordeaux'}

#Un argument formel est spécifié et un argument réel est spécifié.
>>> menu(y="beef",z="bagel",x="bordeaux")
{'wine': 'bordeaux', 'entree': 'beef', 'dessert': 'bagel'}
#Si vous souhaitez utiliser à la fois des arguments positionnels et des arguments de mot-clé, spécifiez d'abord l'argument positionnel.
>>> menu("frontenac",z="flan",y="fish")
{'wine': 'frontenac', 'entree': 'fish', 'dessert': 'flan'}

4.7.3 Spécification de la valeur d'argument par défaut


#Spécification de la valeur d'argument par défaut
>>> def menu(x,y,z="unchi"):
...     return{"wine":x,"entree":y,"dessert":z}
...
#"dessert"Seul l'argument n'est pas spécifié, donc l'argument par défaut est entré.
>>> menu("dunkelfelder","chiken")
{'wine': 'dunkelfelder', 'entree': 'chiken', 'dessert': 'unchi'}
#Si vous spécifiez un argument, il sera utilisé à la place de la valeur par défaut.
>>> menu("dunkelfelder","duck","doughnut")
{'wine': 'dunkelfelder', 'entree': 'duck', 'dessert': 'doughnut'}


>>> def buggy(arg,result=[]):
...     result.append(arg)
...     print(result)
...
>>> buggy("a")
['a']
#['ab']je veux...
>>> buggy("ab")
['a', 'ab']

#buggy()Résultat à chaque appel d'une fonction[]Le but est de l'initialiser
>>> def buggy(arg):
...     result=[]
...     result.append(arg)
...     return result
...
>>> buggy("a")
['a']
#A fonctionné correctement!!!!
>>> buggy("b")
['b']


#result=[]Le résultat est initialisé à l'aide de l'instruction if as.
>>> def nonbuggy(arg,result=None):
...     if result is None:
...         result = []
...     result.append(arg)
...     print(result)
...
>>> nonbuggy("a")
['a']
>>> nonbuggy("b")
['b']

4.7.4 * Arguments de position de tuple


>>> def print_args(*args):
...     print("Positional argument tuple:",args)
...
>>> print_args()
Positional argument tuple: ()
#S'affiche comme args taple
>>> print_args(3,2,1,"wait!","uh...")
Positional argument tuple: (3, 2, 1, 'wait!', 'uh...')

#S'il y a un argument obligatoire, à la fin de l'argument positionnel*En écrivant des arguments, tous les arguments de position autres que les arguments requis peuvent être combinés en un seul.
>>> def print_more(x1,x2,*args):
...     print("Need this one",x1)
...     print("Need this one too",x2)
...     print("All the rest",args)
...
>>> print_more("cap","gloves","scarf","monocle","mustache wax")
Need this one cap
Need this one too gloves
All the rest ('scarf', 'monocle', 'mustache wax')

4.7.5 ** Dictionnaire des arguments de mots clés

>>> def print_kwargs(**kwargs):
...     print("Keyward arguments:",kwargs)
...
>>> print_kwargs(x="xx",y="yy",z="zz")
Keyward arguments: {'x': 'xx', 'y': 'yy', 'z': 'zz'}

**4.7.6 docstring

--Fonction Vous pouvez ajouter un document à la définition de fonction en incorporant une chaîne de caractères au début du sujet principal. C'est ce qu'on appelle la fonction docstring.


>>> def echo(anything):
...     'echo renvoie l'argument d'entrée donné'
...     return anything
...
#help()Lorsque la fonction est appelée, la docstring de la fonction s'affiche.
>>> help(echo)
Help on function echo in module __main__:

echo(anything)
echo renvoie l'argument d'entrée donné
(END)

4.7.7 Fonction comme un objet à part entière


>>> def answer():
...     print(43)
...
>>> answer()
43
>>> def run_something(func):
...      func()
...
#answer()Si vous passez la réponse à la place, vous utilisez la fonction comme type de données comme tout autre type de données.
>>> run_something(answer)
43


>>> def add_args(x1,x2):
...     print(x1+x2)
...
>>> type(add_args)
<class'function'>

#exécuter avec func comme objet_something_with_Passé aux args.
>>> def run_something_with_args(func,arg1,arg2):
...     func(arg1,arg2)
...
>>> run_something_with_args(add_args,5,9)
14


#Prenez n'importe quel nombre d'arguments positionnels et somme()La fonction calcule et renvoie leur somme.
>>> def sum_args(*args):
...     return sum(args)
...


>>> def run_with_positional_args(func,*args):
...     return func(*args)
...
>>> run_with_positional_args(sum_args,1,2,3,4)
10

4.7.8 Fonction en fonction


>>> def outer(a,b):
...     def inner(c,d):
...         return c+d
...     return inner(a,b)
...
>>> outer(4,7)
11
>>> def knights(s):
...     def inner(q):
...         return "%s" % q
...     return inner(s)
...
>>> knights("Ni!")
'Ni!'

4.7.9 Fermeture


#inner2()Ne demande pas d'argument et utilise l'argument s directement pour la fonction externe.
#knights2()Renvoie le nom de la fonction au lieu d'appeler inner2.

#inner2 fonctionne comme une fermeture.
>>> def knights2(s):
...     def inner2():
...         return "%s" % s
...     return inner2
...
>>> a= knights2("Duck")
>>> b= knights2("Hasenpfeffer")
>>> type(a)
<class'function'>
>>> type(b)
<class'function'>

#Ce sont des fonctions, mais ce sont aussi des fermetures.
>>> a
<function knights2.<locals>.inner2 at 0x1006d6ef0>
>>> b
<function knights2.<locals>.inner2 at 0x1006d60e0>

#Lorsqu'elles sont appelées, les deux fermetures se souviennent du contenu des s qu'elles fabriquaient dans knights2.
>>> a()
'Duck'
>>> b()
'Hasenpfeffer'

4.7.10 Fonction anonyme: fonction Lambda


>>> def edit_story(words,func):
...     for word in words:
...         print(func(word))
...
>>> stairs = ["x","u","z","r"]
>>> def enliven(word):
...     return word.capitalize()+"!"
...
#Chaque personnage est retiré de la liste et traité par enliven.
>>> edit_story(stairs,enliven)
X!
U!
Z!
R!

#enliven()La fonction est si courte que je la remplace par lambda.
#Ce lambda prend un argument, mot.
#":"La partie de jusqu'à la fin est une définition de fonction.
>>> edit_story(stairs,lambda word:word.capitalize()+"!")
X!
U!
Z!
R!

4.8 Générateur


#La fonction de générateur renvoie la valeur dans une instruction yield au lieu de return.
>>> def my_range(first=0,last=10,step=1):
...     number=first
...     while number < last:
...         yield number
...         number +=step
...
#my_la plage est une fonction normale.
>>> my_range
<function my_range at 0x1009364d0>
>>> ranger=my_range(1,5)
#Renvoie un objet générateur.
>>> ranger
<generator object my_range at 0x100636ed0>
#Le traitement itératif par for peut être effectué sur l'objet générateur.
>>> for x in ranger:
...     print(x)
...
1
2
3
4

4.9 Décorateur


>>> def document_it(func):
...     def new_function(*args,**kwargs):
...         print("Running function:",func.__name__)
...         print("Positional arguments:",args)
...         print("Keyword arguments:",kwargs)
...         result =func(*args,**kwargs)
...         print("Result:",result)
...         return result
...     return new_function
... 
>>> def add_ints(a,b):
...     return a+b
... 
>>> add_ints(1,2)
3
>>> cooler_add_ints =document_it(add_ints)
>>> ccler_add_ints(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ccler_add_ints' is not defined
>>> cooler_add_ints(1,2)
Running function: add_ints
Positional arguments: (1, 2)
Keyword arguments: {}
Result: 3
3

#Juste avant la fonction que vous souhaitez décorer@decorator_Ajouter au format de nom.
>>> @document_it
... def add_ints(a,b):
...     return a+b
... 
>>> add_ints(1,2)
Running function: add_ints
Positional arguments: (1, 2)
Keyword arguments: {}
Result: 3
3

4.10 Espace de noms et portée


#Les valeurs des variables globales peuvent être référencées à partir de la fonction.
>>> animal="Z"
>>> def print_global():
...     print("inside print_global:",animal)
...
>>> print("at the top level:",animal)
at the top level: Z
>>> print_global()
inside print_global: Z

#Une erreur se produit lorsque vous essayez d'obtenir la valeur d'une variable globale dans une fonction et de la réécrire.
>>> def changed_and_print_global():
...     print("inside change_and_print_global:",animal)
...     animal="wombat"
...     print("after the change:",animal)
...
>>> changed_and_print_global()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in changed_and_print_global
UnboundLocalError: local variable 'animal' referenced before assignment

#change_local()La fonction a également une variable appelée animal, qui existe dans l'espace de noms local de la fonction.
>>> animal="Z"
>>> def change_local():
...     animal = "W"
...     print("inside change_local:",animal,id(animal))
...

#change_local()On peut voir que la variable animale dans est différente de la variable animale dans le programme.
>>> change_local()
inside change_local: W 4564475440
>>> animal
'Z'
>>> id(animal)
4564751344

#Pour accéder à une variable globale, vous devez explicitement utiliser le mot clé global.
>>> animal="Z"
>>> def change_and_print_global():
...     global animal
...     animal = "wombat"
...     print("inside change_and_print_global:",animal)
...
>>> animal
'Z'
>>> change_and_print_global()
inside change_and_print_global: wombat
>>> animal
'wombat'

#Si vous n'écrivez pas global dans la fonction, Python utilisera l'espace de noms local et les variables animales seront locales. Lorsque la fonction est terminée, les variables locales disparaissent et disparaissent.
>>> animal="Z"
>>> def change_local():
...     animal = "wombat"
...     print("locals:",locals())
...
>>> animal
'Z'

#Renvoie un dictionnaire affichant le contenu de l'espace de noms local.
>>> change_local()
locals: {'animal': 'wombat'}

#Renvoie un dictionnaire affichant le contenu de l'espace de noms global.
>>> print("globals:",globals())
globals: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class'_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'document_it': <function document_it at 0x110146290>, 'add_ints': 3, 'square_it': <function square_it at 0x110146440>, 'animal': 'Z', 'print_global': <function print_global at 0x1101464d0>, 'changed_and_print_global': <function changed_and_print_global at 0x1101465f0>, 'change_local': <function change_local at 0x110146950>, 'change_and_print_global': <function change_and_print_global at 0x110146830>}
>>> animal
'Z'

4.10.1 _ et __ dans le nom


>>> def amazing():
...     '''C'est une excellente fonction
...Revoir'''
#Le nom de la fonction est la fonction de la variable système_name__(Format de base)
...     print("Le nom de cette fonction:",amazing.__name__)
#docstring est une fonction de variable système_doc__(Format de base)
...     print("docstring:",amazing.__doc__)
...
>>> amazing()
Le nom de cette fonction: amazing
docstring:C'est une excellente fonction
Revoir

4.11 Traitement des erreurs et essayez, sauf


#Arrêt forcé du programme
>>> short_list=[1,2,3]
>>> position = 5
>>> short_list[position]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

#Vous devez utiliser try to enclose là où des exceptions sont susceptibles de se produire, et utiliser sauf pour gérer les exceptions.
#Le code du bloc try est exécuté et, si une erreur s'y produit, une exception est générée et le code du bloc except est exécuté. Si aucune exception ne se produit, le bloc except ne sera pas exécuté.

>>> short_list=[1,2,3]
>>> position = 5
>>> try:
...     short_list[position]
... except:
...     print("Need a position between 0 and",len(short_list)-1,"but got",position)
...
Need a position between 0 and 2 but got 5


#Utilisez sauf pour attraper toutes les exceptions.
#Si vous souhaitez connaître les informations détaillées, décrivez le format de base de sauf exceptiontype comme nom.

>>> short_list=[1,2,3]
>>> while True:
...     value=input("Position[q to quit]?")
...     if value =="q":
...         break
...     try:
...         position=int(value)
...         print(short_list[position])
...     except IndexError as err:
...         print("bad index:",position)
...     except Exception as other:
...         print("Something else broke:",other)
...
Position[q to quit]?1
2
Position[q to quit]?0
1
Position[q to quit]?2
3
Position[q to quit]?3
bad index: 3
Position[q to quit]?2
3
Position[q to quit]?two
Something else broke: invalid literal for int() with base 10: 'two'
Position[q to quit]?q

4.12 Créer votre propre exception


#C'est à la classe parente Exception de voir ce qu'il faut afficher lorsqu'une exception est générée.
>>> class OopsException(Exception):
...     pass
...
>>> try:
...     raise OopsException("panic")
... except OopsException as exc:
...     print(exc)
...
panic

4.13 Examen de la mission

4-1 Attribuons 7 à la variable guess_me. Ensuite, si guess_me est inférieur à 7, affichez trop bas, s'il est supérieur à 7, affichez trop haut et, s'il est égal, affichez juste à droite.


>>> if guess_me<7:
...     print("too low")
... elif guess_me>7:
...     print("too high")
... elif guess_me==7:
...     print("just right")
...
just right

4-2 Affectez 7 à la variable guess_me et 1 à la variable start, et écrivez une boucle while qui compare start et guess_me.


>>> while True:
...     if start<guess_me:
...         print("too low")
...     elif start==guess_me:
...         print("found it!")
...         break
...     elif start>guess_me:
...         print("oops")
...         break
...     start+=1
...
too low
too low
too low
too low
too low
too low
found it!

4-3 Utilisez la boucle for pour afficher les valeurs dans la liste [3,2,1,0].


>>> list=[3,2,1,0]
>>> for x in list:
...     print(list[x])
...
0
1
2
3

4-4 Créez une liste paire de plages (10) en utilisant la notation d'inclusion de liste.


>>> list=[number for number in range(10) if number%2==0]
>>> list
[0, 2, 4, 6, 8]

4-5 Créons un dictionnaire appelé carrés en utilisant la notation d'inclusion de dictionnaire. Cependant, range (10) est utilisé pour renvoyer la clé et le carré du dictionnaire de chaque clé est utilisé comme valeur.

>>> squares={number:number*number for number in range(10)}
>>> squares
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

4-6 Créons un ensemble appelé impair à partir d'un nombre impair de plage (10) en utilisant la notation d'inclusion d'ensemble.


>>> odd= {number for number in range(10) if number%2==1}
>>> odd
{1, 3, 5, 7, 9}

4-7 Retournons "Got" pour la valeur de range (10) en utilisant la notation d'inclusion du générateur.


>>> for thing in ("Got %s" %number for number in range(10)):
...     print(thing)
...
Got 0
Got 1
Got 2
Got 3
Got 4
Got 5
Got 6
Got 7
Got 8
Got 9

4-8 Définissons une fonction appelée good qui renvoie la liste ["H", "R", "Hermione"].


>>> def good():
...     print(["H","R","Hermione"])
...
>>> good()
['H', 'R', 'Hermione']

4-9 Définissons une fonction de générateur appelée get_odds qui renvoie un nombre impair de range (10). Utilisez également la boucle for pour rechercher et afficher la troisième valeur renvoyée.


#La fonction de générateur renvoie comme rendement.
>>> def get_odds():
...     for x in range(1,10,2):
...             yield x
...
#enumerate()En utilisant une fonction, le numéro d'index (nombre, ordre) peut être obtenu en même temps que les éléments d'un objet itérable tel qu'une liste (tableau) dans l'instruction for. Numéro d'index,Peut être obtenu dans l'ordre des éléments.
#Spécifiez le décalage à partir de 1.
>>> for count,number in enumerate(get_odds(),1):
...     if count==3:
...         print("The third number is",number)
...         break
...
The third number is 5

4-10 Définissons un décorateur qui affiche "start" quand une fonction est appelée et "end" quand elle se termine.


>>> def test(func):
...     def new_func(*args,**kwargs):
...         print("start")
...         result = func(*args,**kwargs)
...         print("end")
...         return result
...     return new_func
...
>>> @test
... def greeting():
...     print("Hello!")
...
>>> greeting()
start
Hello!
end

4-11 Définissons une exception appelée OopseException. Écrivons ce code d'exception et le code qui intercepte cette exception et affiche "Caught an oops" pour nous faire savoir ce qui s'est passé ensuite.


#Définition de OopseException
>>> class OopseException(Exception):
...     pass
...
>>> raise OopseException()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.OopseException
>>> try:
...     raise OopseException
... except OopseException:
...     print("Caught an oops")
...
Caught an oops

4-12 Créons un dictionnaire appelé films en utilisant zip (). Le dictionnaire sera fait en combinant les listes titres = ["C", "B", "A"] et plots = ["D", "W"].


>>> titles=["C","B","A"]
>>> plots=["D","W"]
>>> movies=dict(zip(titles,plots))
>>> movies
{'C': 'D', 'B': 'W'}

Impressions

Il y avait beaucoup de volume de critiques dans le chapitre 4. Cela m'a pris un jour.

Les références

"Introduction à Python3 par Bill Lubanovic (publié par O'Reilly Japon)"

Recommended Posts

[Introduction à Python3 Jour 8] Chapitre 4 Py Skin: Structure du code (4.1-4.13)
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
[Introduction à Python3 Jour 14] Chapitre 7 Chaînes de caractères (7.1.1.1 à 7.1.1.4)
[Introduction à Python3 Jour 15] Chapitre 7 Chaînes de caractères (7.1.2-7.1.2.2)
[Introduction à Python3 Day 21] Chapitre 10 Système (10.1 à 10.5)
[Introduction à Python3 Jour 3] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.2 à 2.3.6)
[Introduction à Python3 Jour 2] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.1)
[Introduction à Python3 Jour 4] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.3.7 à 2.4)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
[Introduction à Python3 Jour 7] Chapitre 3 Outils Py: Listes, Taples, Dictionnaires, Ensembles (3.3-3.8)
[Introduction à Python3 Jour 5] Chapitre 3 Outils Py: listes, taples, dictionnaires, ensembles (3.1-3.2.6)
[Introduction à Python3 Jour 6] Chapitre 3 Liste des outils Py, tapple, dictionnaire, set (3.2.7-3.2.19)
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
[Introduction à Python3, Jour 23] Chapitre 12 Devenir un Paisonista (12.1 à 12.6)
[Introduction à Python3 Jour 20] Chapitre 9 Démêler le Web (9.1-9.4)
[Introduction à Python3 Jour 1] Programmation et Python
[Introduction à Python3 Jour 10] Chapitre 5 Boîte cosmétique de Py: modules, packages, programmes (5.4-5.7)
[Introduction à Python3 Jour 9] Chapitre 5 Boîte cosmétique de Py: modules, packages, programmes (5.1-5.4)
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Réécrire le code Python2 en Python3 (2to3)
Introduction au langage Python
Introduction à OpenCV (python) - (2)
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Introduction à Python Django (2) Win
Introduction à la communication série [Python]
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
Introduction à Python pour, pendant
Convertir le code python 3.x en python 2.x
[Présentation de l'application Udemy Python3 +] 31. Commentaire
Introduction à la bibliothèque de calcul numérique Python NumPy
Entraine toi! !! Introduction au type Python (conseils de type)
[Introduction à Python] <numpy ndarray> [modifier le 22/02/2020]
[Présentation de l'application Udemy Python3 +] 57. Décorateur
Introduction à Python Hands On Partie 1
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
[Introduction à Python] Comment analyser JSON
[Présentation de l'application Udemy Python3 +] 56. Clôture
Introduction à Protobuf-c (langage C ⇔ Python)
[Présentation de l'application Udemy Python3 +] 59. Générateur
[Introduction à Python] Utilisons les pandas
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 1
[Introduction à Python] Utilisons les pandas
[Introduction à l'application Udemy Python3 +] Résumé
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
Introduction à l'analyse d'image opencv python
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 2