Il s'agit d'une tentative de lire la 3e édition du didacticiel Python et de noter ce que vous avez appris.
Et quand j'aurai fini de lire, j'aimerais passer cet examen À la fin, le test a commencé ...!
** Commençons! ** **
Examen de base pour la certification d'ingénieur Python 3
J'espère que ça continue, j'espère que ça continue
>>> x = int(input("Veuillez saisir un entier: "))
Veuillez saisir un entier: 42
>>> if x < 0:
... x = 0
... print('Le nombre négatif est zéro')
... elif x == 0:
... print('zéro')
... elif x == 1:
... print('Un')
... else:
... print('Plus')
...
Plus
>>> #Mesurez la longueur d'une chaîne:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
... print(w, len(w))
...
cat 3
window 6
defenestrate 12
--Il est recommandé de faire une copie et de la répéter lorsque la séquence en cours de répétition doit être modifiée.
>>> for w in words[:]: #Boucle à travers une copie de tranche de la liste entière
... if len(w) > 6:
... words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
--La valeur de terminaison donnée n'est pas incluse
range (10)
est juste un index pour chaque élément dans une séquence de longueur 10.
--range ()
peut commencer par un nombre autre que 0range(5, 10)
→ 5 à 9
range(0, 10, 3)
→ 0, 3, 6, 9
range(-10, -100, -30)
→ -10, -40, -70
--Si vous voulez répéter à l'index de la séquence, vous pouvez combiner range ()
et len ()
comme suit.
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
--L'objet renvoyé par la fonction range ()
se comporte comme une liste à bien des égards, mais pas comme une liste.
list ()
, qui crée une liste à partir d'un corps répétable, est également un itérateur.>>> list(range(5))
[0, 1, 2, 3, 4]
break
traverse la boucle for
ou while
est ajoutée à ces instructions de boucle La clause --ʻElse
est exécutée lorsque la boucle se termine en raison de l'épuisement de la liste ou de l'expression conditionnelle devient "false", et n'est pas exécutée lorsque la boucle se termine par l'instruction "break".>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... #Si vous ne trouvez pas la fraction dans la boucle
... print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
continue
ignore le reste de la boucle et passe à l'itération suivante>>> for num in range(2, 10):
... if num % 2 == 0:
... print("Found an even number", num)
... continue
... print("Found a number", num)
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9
À utiliser lorsque vous n'avez rien à faire par programme
>>> while True:
... pass #Interruption du clavier avec un poids occupé(Ctrl+C)Attendre
...
Souvent utilisé pour générer la plus petite classe
>>> class MyEmptyClass:
... pass
...
Une autre utilisation de l'instruction pass
est de la placer comme espace réservé dans le corps d'une fonction ou d'une condition lors de l'écriture d'un nouveau code pour vous aider à réfléchir au niveau abstrait.
>>> def initlog(*args):
... pass #N'oubliez pas de mettre en œuvre!
...
def
est le début de la définition de la fonction, et vous devez écrire le nom de la fonction et la liste des arguments formels entre parenthèses.Une fonction qui écrit la série de Fibonacci jusqu'à une limite supérieure arbitraire
>>> def fib(n): #Exporter des séries de Fibonacci jusqu'à n
... """Afficher les séries Fibonacci jusqu'à n"""
... a, b = 0, 1
... while a < n:
... print(a, end=' ')
... a, b = b, a+b
... print()
...
>>> #Appelons cette fonction
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
--Il est également possible de définir une fonction avec un nombre variable d'arguments ――Il existe trois formes et vous pouvez les combiner.
――La forme la plus utilisée --Les fonctions suivantes peuvent être appelées de différentes manières
ask_ok('Do you really want to quit?')
ask_ok('OK to overwrite the file?', 2)
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise OSError('Utilisateur non coopératif')
print(complaint)
** L'évaluation de la valeur par défaut n'a lieu qu'une seule fois. ** ** Cela a un effet si la valeur par défaut est un objet mutable, à savoir une instance d'une liste, d'un dictionnaire et de la plupart des classes.
Par exemple, la fonction suivante accumule les arguments passés dans l'appel
>>> def f(a, L=[]):
... L.append(a)
... return L
...
>>> print(f(1))
[1]
>>> print(f(2))
[1, 2]
>>> print(f(3))
[1, 2, 3]
>>>
Si vous ne voulez pas que les valeurs par défaut soient partagées entre les appels, vous pouvez écrire cette fonction comme ceci:
>>> def f(a, L=None):
... if L is None:
... L = []
... L.append(a)
... return L
...
>>> print(f(1))
[1]
>>> print(f(2))
[2]
>>> print(f(3))
[3]
>>> def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
... print("-- This parrot wouldn't", action, end=' ')
... print("if you put", voltage, "volts through it.")
... print("-- It's", state, "!")
...
Cette fonction prend un argument obligatoire (tension), prend trois arguments optionnels (état, action, type) et peut être appelée sous l'une des formes suivantes:
>>> #Un argument de position
>>> parrot(1000)
-- This parrot wouldn't voom if you put 1000 volts through it.
-- It's a stiff !
>>> #Un argument de mot-clé
>>> parrot(voltage=1000)
-- This parrot wouldn't voom if you put 1000 volts through it.
-- It's a stiff !
>>> #Deux arguments de mots clés
>>> parrot(voltage=1000000, action='VOOOOOM')
-- This parrot wouldn't VOOOOOM if you put 1000000 volts through it.
-- It's a stiff !
>>> #Trois arguments de mots clés
>>> parrot(action='VOOOOOM', voltage=1000000)
-- This parrot wouldn't VOOOOOM if you put 1000000 volts through it.
-- It's a stiff !
>>> #3 arguments de position
>>> parrot('a million', 'bereft of life', 'jump')
-- This parrot wouldn't jump if you put a million volts through it.
-- It's bereft of life !
>>> #1 argument positionnel, 1 argument mot-clé
>>> parrot('a thousand', state='pushing up the daisies')
-- This parrot wouldn't voom if you put a thousand volts through it.
-- It's pushing up the daisies !
Mais l'appel suivant est invalide
>>> #Arguments requis manquants
>>> parrot()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: parrot() missing 1 required positional argument: 'voltage'
>>> #Argument non-mot-clé après l'argument mot-clé
>>> parrot(voltage=5.0, 'dead')
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> #Étant donné le même argument deux fois
>>> parrot(110, voltage=220)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: parrot() got multiple values for argument 'voltage'
>>> #Argument de mot clé inconnu
>>> parrot(actor='John Cleese')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: parrot() got an unexpected keyword argument 'actor'
Chaque fois que vous appelez une fonction, ** les arguments de position doivent venir en premier et les arguments de mots-clés viennent après **
Tous les arguments de mot-clé doivent correspondre à ce qui est écrit dans l'argument formel de la définition de fonction (l'argument acteur n'est pas valide dans la fonction perroquet), mais l'ordre n'a pas d'importance.
Ceci est également vrai pour les arguments non optionnels (par exemple, parrot (voltage = 1000)
est également valide)
L'argument ne peut prendre une valeur qu'une seule fois.
Voici un exemple d'échec dû à cette limitation.
Une erreur de type s'est produite car l'argument de mot clé "a" de function ()
a plusieurs valeurs.
>>> def function(a):
... pass
...
>>> function(0, a=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: function() got multiple values for argument 'a'
Si l'argument formel se termine sous la forme d'un nom «**», cet argument reçoit un dictionnaire. Ce dictionnaire contient tous les arguments de mot-clé à l'exception des mots-clés qui correspondent aux arguments formels. En d'autres termes, sous cette forme, des mots-clés qui ne sont pas dans l'argument formel peuvent être utilisés.
Il peut également être utilisé en combinaison avec le format de nom «». (Le nom «» doit précéder le nom «**».)
Dans ce format, un taple contenant tous les arguments spécifiques à la position qui ne sont pas dans l'argument formel est passé à la fonction. Par conséquent, si vous définissez la fonction suivante
>>> def cheeseshop(kind, *arguments, **keywords):
... print("-- Do you have any", kind, "?")
... print("-- I'm sorry, we're all out of", kind)
... for arg in arguments:
... print(arg)
... print("-" * 40)
... keys = sorted(keywords.keys())
... for kw in keys:
... print(kw, ":", keywords[kw])
...
Vous pouvez l'appeler comme ceci et la sortie sera:
>>> cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Palin", client="John Cleese", sketch="Cheese Shop Sketch")
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
Notez que lors de l'affichage du contenu du dictionnaire keywords
, nous trions d'abord les résultats de la méthode key ()
et générons une liste d'arguments de mots-clés. Si cela n'est pas fait, l'ordre d'affichage des arguments sera indéfini.
>>> def write_multiple_items(file, separator, *args):
... file.write(separator.join(args))
Les arguments de longueur variable sont placés à la fin de la liste d'arguments formels. C'est parce qu'il aspire tous les autres arguments passés à la fonction. Dans le format * args, tous les arguments formels après ceci sont des arguments "mot clé uniquement". En d'autres termes, il ne peut être utilisé que comme argument de mot-clé, pas comme argument de position.
>>> def concat(*args, sep="/"):
... return sep.join(args)
...
>>> concat("earth", "mars", "venus")
'earth/mars/venus'
>>> concat("earth", "mars", "venus", sep=".")
'earth.mars.venus'
La situation inverse est que ce que vous voulez être un argument est déjà une liste ou un tapple et vous devez le décompresser pour une fonction qui nécessite un argument positionné.
Par exemple, la fonction intégrée range () attend des arguments séparés pour start et stop.
Si vous ne les avez pas individuellement, vous pouvez passer des arguments décompressés à partir d'une liste ou d'un tapple en appelant la fonction avec l'opérateur *.
>>> #Appel ordinaire avec arguments individuels
>>> list(range(3, 6))
[3, 4, 5]
>>> args = [3, 6]
>>> #Appel avec des arguments décompressés de la liste
>>> list(range(*args))
[3, 4, 5]
De même, vous pouvez utiliser l'opérateur ** pour passer un dictionnaire comme argument de mot-clé.
>>> def parrot(voltage, state='a stiff', action='voom'):
... print("-- This parrot wouldn't", action, end=' ')
... print("if you put", voltage, "volts through it.", end=' ')
... print("E's", state, "!")
...
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>> parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
--Utilisez le mot-clé lambda
pour multiplier une petite fonction anonyme
--lambda a, b: a + b
est une fonction qui renvoie la somme de deux arguments
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
Ce qui précède est un exemple de retour d'une fonction à l'aide d'une expression lambda. Une autre utilisation est lors du passage d'une petite fonction comme argument
>>> pairs = [(1, 'one'), (2, 'tow'), (3, 'three'), (4, 'four')]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'tow')]
Voici un exemple de docstring
multiligne (notez la partie appelée par __doc__
)
>>> def my_function():
... """Do nothing, but document it.
...
... No, really, it doesn't do anything.
... """
... pass
...
>>> print(my_function.__doc__)
Do nothing, but document it.
No, really, it doesn't do anything.
__annotations__
de la fonction.def
et entre la liste d'arguments formels.>>> def f(ham: str, eggs: str = 'eggs') -> str:
... print("Annotations:", f.__annotations__)
... print("Arguments:", ham, eggs)
... return ham + ' and ' + eggs
...
>>> f('spam')
Annotations: {'ham': <class 'str'>, 'eggs': <class 'str'>, 'return': <class 'str'>}
Arguments: spam eggs
'spam and eggs'
--Indent avec 4 espaces, sans tabulations
a = f(1, 2) + g(3, 4)
--Mesures pour sécuriser temporairement une place jusqu'à ce que la valeur officielle soit saisie
Lorsque le côté droit est un tapple, vous pouvez développer le contenu en plaçant plusieurs variables sur le côté gauche. C'est ce qu'on appelle unpackage de séquence, mais je ne comprends pas tout à fait l'usage et la signification du mot "unpack" ... \ (^ o ^) /
Je ne suis pas sûr ... \ (^ o ^) /
Recommended Posts