Maison  >  Article  >  développement back-end  >  Résumé des opérations de base d'entrée de gamme de Python

Résumé des opérations de base d'entrée de gamme de Python

巴扎黑
巴扎黑original
2017-08-13 14:53:391322parcourir

L'éditeur suivant vous proposera une opération incontournable pour démarrer avec les bases de Python. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil

Voici les méthodes et techniques couramment utilisées dans le développement avec python. S'il y a des erreurs, vous pouvez me critiquer et me corriger.

Points clés : requête des caractéristiques de la classe et des variables pendant le développement, le type est la classe, utilisation des assertions, jugement de la copie profonde et superficielle, etc.

Les fichiers de script Python sont codés en UTF-8 , donc lorsque des caractères chinois sont trouvés Lorsque des caractères tronqués apparaissent, vous devez vous demander si le fichier texte utilise le codage UTF-8.

Si vous souhaitez spécifier un encodage différent, vous devez ajouter ce commentaire au début du fichier de code source :


# -*- coding: utf-8 -*-

Si python est dans les systèmes Linux et Unix Pour exécuter, vous devez ajouter la première ligne du code source :


#!/usr/bin/python3

Comment obtenir le contenu de chaque module, variable, classe, etc. en python ?

Les requêtes sur les groupes d'aide en python peuvent être obtenues via les variables __all__, __dict__, les fonctions help(), dir().

Si __all__ est défini dans une classe ou un module, il contient généralement des fonctionnalités pouvant être appelées en externe. S'il est défini sans affectation, il sera automatiquement rempli de fonctionnalités qui ne commencent pas par un trait de soulignement. S'il n'y a pas de paramètre, __all__python affichera une erreur d'attribut AttributeError.

__dict__ donne généralement les caractéristiques (y compris les attributs et les méthodes) définies dans la classe ou le module, qui sont sorties sous la forme d'un dictionnaire utilisant des tuples pour représenter les paramètres et les valeurs des paramètres (paramètres, valeurs des paramètres ou descriptions)

list's __dict__ View


>>> list.__dict__
2 mappingproxy({&#39;__repr__&#39;: <slot wrapper &#39;__repr__&#39; of &#39;list&#39; objects>, &#39;__hash__&#39;: None, &#39;__getattribute__&#39;: <slot wrapper &#39;__getattribute__&#39; of &#39;list&#39; objects>, &#39;__lt__&#39;: <slot wrapper &#39;__lt__&#39; of &#39;list&#39; objects>, &#39;__le__&#39;: <slot wrapper &#39;__le__&#39; of &#39;list&#39; objects>, &#39;__eq__&#39;: <slot wrapper &#39;__eq__&#39; of &#39;list&#39; objects>, &#39;__ne__&#39;: <slot wrapper &#39;__ne__&#39; of &#39;list&#39; objects>, &#39;__gt__&#39;: <slot wrapper &#39;__gt__&#39; of &#39;list&#39; objects>, &#39;__ge__&#39;: <slot wrapper &#39;__ge__&#39; of &#39;list&#39; objects>, &#39;__iter__&#39;: <slot wrapper &#39;__iter__&#39; of &#39;list&#39; objects>, &#39;__init__&#39;: <slot wrapper &#39;__init__&#39; of &#39;list&#39; objects>, &#39;__len__&#39;: <slot wrapper &#39;__len__&#39; of &#39;list&#39; objects>, &#39;__getitem__&#39;: <method &#39;__getitem__&#39; of &#39;list&#39; objects>, &#39;__setitem__&#39;: <slot wrapper &#39;__setitem__&#39; of &#39;list&#39; objects>, &#39;__delitem__&#39;: <slot wrapper &#39;__delitem__&#39; of &#39;list&#39; objects>, &#39;__add__&#39;: <slot wrapper &#39;__add__&#39; of &#39;list&#39; objects>, &#39;__mul__&#39;: <slot wrapper &#39;__mul__&#39; of &#39;list&#39; objects>, &#39;__rmul__&#39;: <slot wrapper &#39;__rmul__&#39; of &#39;list&#39; objects>, &#39;__contains__&#39;: <slot wrapper &#39;__contains__&#39; of &#39;list&#39; objects>, &#39;__iadd__&#39;: <slot wrapper &#39;__iadd__&#39; of &#39;list&#39; objects>, &#39;__imul__&#39;: <slot wrapper &#39;__imul__&#39; of &#39;list&#39; objects>, &#39;__new__&#39;: <built-in method __new__ of type object at 0x000000005BBAF530>, &#39;__reversed__&#39;: <method &#39;__reversed__&#39; of &#39;list&#39; objects>, &#39;__sizeof__&#39;: <method &#39;__sizeof__&#39; of &#39;list&#39; objects>, &#39;clear&#39;: <method &#39;clear&#39; of &#39;list&#39; objects>, &#39;copy&#39;: <method &#39;copy&#39; of &#39;list&#39; objects>, &#39;append&#39;: <method &#39;append&#39; of &#39;list&#39; objects>, &#39;insert&#39;: <method &#39;insert&#39; of &#39;list&#39; objects>, &#39;extend&#39;: <method &#39;extend&#39; of &#39;list&#39; objects>, &#39;pop&#39;: <method &#39;pop&#39; of &#39;list&#39; objects>, &#39;remove&#39;: <method &#39;remove&#39; of &#39;list&#39; objects>, &#39;index&#39;: <method &#39;index&#39; of &#39;list&#39; objects>, &#39;count&#39;: <method &#39;count&#39; of &#39;list&#39; objects>, &#39;reverse&#39;: <method &#39;reverse&#39; of &#39;list&#39; objects>, &#39;sort&#39;: <method &#39;sort&#39; of &#39;list&#39; objects>, &#39;__doc__&#39;: "list() -> new empty list\nlist(iterable) -> new list initialized from iterable&#39;s items"})

dir() donnera tous les attributs de fonctionnalités disponibles sous la forme d'une liste sans contenir de valeur et description de l'attribut :

list utilise dir() pour afficher


1 >>> dir(list)
2 [&#39;__add__&#39;, &#39;__class__&#39;, &#39;__contains__&#39;, &#39;__delattr__&#39;, &#39;__delitem__&#39;, &#39;__dir__&#39;, &#39;__doc__&#39;, &#39;__eq__&#39;, &#39;__format__&#39;, &#39;__ge__&#39;, &#39;__getattribute__&#39;, &#39;__getitem__&#39;, &#39;__gt__&#39;, &#39;__hash__&#39;, &#39;__iadd__&#39;, &#39;__imul__&#39;, &#39;__init__&#39;, &#39;__init_subclass__&#39;, &#39;__iter__&#39;, &#39;__le__&#39;, &#39;__len__&#39;, &#39;__lt__&#39;, &#39;__mul__&#39;, &#39;__ne__&#39;, &#39;__new__&#39;, &#39;__reduce__&#39;, &#39;__reduce_ex__&#39;, &#39;__repr__&#39;, &#39;__reversed__&#39;, &#39;__rmul__&#39;, &#39;__setattr__&#39;, &#39;__setitem__&#39;, &#39;__sizeof__&#39;, &#39;__str__&#39;, &#39;__subclasshook__&#39;, &#39;append&#39;, &#39;clear&#39;, &#39;copy&#39;, &#39;count&#39;, &#39;extend&#39;, &#39;index&#39;, &#39;insert&#39;, &#39;pop&#39;, &#39;remove&#39;, &#39;reverse&#39;, &#39;sort&#39;]

De manière générale, utilisez simplement __dict__ et dir() Bien sûr, help(. ) est souvent nécessaire pour afficher des documents détaillés (en fait le contenu de __doc__) :

list utilise help() pour afficher


help(list)
Help on class list in module builtins:

class list(object)
 | list() -> new empty list
 | list(iterable) -> new list initialized from iterable&#39;s items
 |
 | Methods defined here:
 |
 | __add__(self, value, /)
 |  Return self+value.
 |
 | __contains__(self, key, /)
 |  Return key in self.
 |
 | __delitem__(self, key, /)
 |  Delete self[key].
 |
 | __eq__(self, value, /)
 |  Return self==value.
 |
 | __ge__(self, value, /)
 |  Return self>=value.
 |
 | __getattribute__(self, name, /)
 |  Return getattr(self, name).
 |
 | __getitem__(...)
 |  x.__getitem__(y) <==> x[y]
 |
-- More --

Si nous créons un objet a = list() maintenant, et que nous voulons maintenant obtenir les méthodes caractéristiques de l'objet a, nous utilisons également dir() et help().

Ce qui doit être souligné ici, c'est que la puissance de dir() et help() peut non seulement vérifier la classe, mais aussi les variables que nous définissons. De cette façon, nous pouvons obtenir plus de contenu pendant le processus d’encodage.

Rechercher la variable a contenant des méthodes dans a=1


>>> a=1
>>> dir(a)
[&#39;__abs__&#39;, &#39;__add__&#39;, &#39;__and__&#39;, &#39;__bool__&#39;, &#39;__ceil__&#39;, &#39;__class__&#39;, &#39;__delattr__&#39;, &#39;__dir__&#39;, &#39;__pmod__&#39;, &#39;__doc__&#39;, &#39;__eq__&#39;, &#39;__float__&#39;, &#39;__floor__&#39;, &#39;__floorp__&#39;, &#39;__format__&#39;, &#39;__ge__&#39;, &#39;__getattribute__&#39;, &#39;__getnewargs__&#39;, &#39;__gt__&#39;, &#39;__hash__&#39;, &#39;__index__&#39;, &#39;__init__&#39;, &#39;__init_subclass__&#39;, &#39;__int__&#39;, &#39;__invert__&#39;, &#39;__le__&#39;, &#39;__lshift__&#39;, &#39;__lt__&#39;, &#39;__mod__&#39;, &#39;__mul__&#39;, &#39;__ne__&#39;, &#39;__neg__&#39;, &#39;__new__&#39;, &#39;__or__&#39;, &#39;__pos__&#39;, &#39;__pow__&#39;, &#39;__radd__&#39;, &#39;__rand__&#39;, &#39;__rpmod__&#39;, &#39;__reduce__&#39;, &#39;__reduce_ex__&#39;, &#39;__repr__&#39;, &#39;__rfloorp__&#39;, &#39;__rlshift__&#39;, &#39;__rmod__&#39;, &#39;__rmul__&#39;, &#39;__ror__&#39;, &#39;__round__&#39;, &#39;__rpow__&#39;, &#39;__rrshift__&#39;, &#39;__rshift__&#39;, &#39;__rsub__&#39;, &#39;__rtruep__&#39;, &#39;__rxor__&#39;, &#39;__setattr__&#39;, &#39;__sizeof__&#39;, &#39;__str__&#39;, &#39;__sub__&#39;, &#39;__subclasshook__&#39;, &#39;__truep__&#39;, &#39;__trunc__&#39;, &#39;__xor__&#39;, &#39;bit_length&#39;, &#39;conjugate&#39;, &#39;denominator&#39;, &#39;from_bytes&#39;, &#39;imag&#39;, &#39;numerator&#39;, &#39;real&#39;, &#39;to_bytes&#39;]
>>> help(a)
Help on int object:

class int(object)
 | int(x=0) -> integer
 | int(x, base=10) -> integer
 |
 | Convert a number or string to an integer, or return 0 if no arguments
 | are given. If x is a number, return x.__int__(). For floating point
 | numbers, this truncates towards zero.
 |
 | If x is not a number or if base is given, then x must be a string,
 | bytes, or bytearray instance representing an integer literal in the
 | given base. The literal can be preceded by &#39;+&#39; or &#39;-&#39; and be surrounded
 | by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.
 | Base 0 means to interpret the base from the string as an integer literal.
 | >>> int(&#39;0b100&#39;, base=0)
 | 4
 |
 | Methods defined here:
 |
 | __abs__(self, /)
 |  abs(self)
 |
 | __add__(self, value, /)
 |  Return self+value.
 |
 | __and__(self, value, /)
 |  Return self&value.
 |
-- More --

Rechercher des variables et des types d'objets et d'autres opérations

En plus d'utiliser dir(), help(), __all__, __dict__ pour afficher le contenu de la conception définie d'origine, vous pouvez utiliser de nombreuses fonctionnalités définies pour obtenir plus d'informations :

Méthodes pour obtenir les types de variables et les types d'objets :

Requête des variables et des types de classes via __class__


>>> a =1
>>> a.__class__
<class &#39;int&#39;>
>>> b = 1.0
>>> b.__class__
<class &#39;float&#39;>
>>> c = &#39;&#39;
>>> c.__class__
<class &#39;str&#39;>
>>> d = list()
>>> d.__class__
<class &#39;list&#39;>
>>> e = tuple()
>>> e.__class__
<class &#39;tuple&#39;>
>>> f = dict()
>>> f.__class__
<class &#39;dict&#39;>
>>> list.__class__
<class &#39;type&#39;>
>>> dict.__class__
<class &#39;type&#39;>
>>> tuple.__class__
<class &#39;type&#39;>
>>> object.__class__
<class &#39;type&#39;>
>>> None.__class__
<class &#39;NoneType&#39;>

Grâce au code ci-dessus, nous sommes a découvert que si la classe est un type, c'est en fait la définition d'une classe, si c'est autre chose, c'est un objet.

Avez-vous déjà pensé que les variables de base en python sont aussi des objets ?

Dans les langages généraux, nos types sont divisés en entiers, types à virgule flottante, chaînes, etc. Mais en Python, ces types sont en réalité définis sous forme de classes, et les classes héritent également des superclasses de niveau supérieur.

Utilisez __class__ pour afficher le type et __bases__ pour afficher la super classe


>>> a = 1
>>> a.__class__
<class &#39;int&#39;>
>>> int.__class__
<class &#39;type&#39;>
>>> str.__class__
<class &#39;type&#39;>
>>> bool.__class__
<class &#39;type&#39;>
>>> list.__class__
<class &#39;type&#39;>
>>> dict.__class__
<class &#39;type&#39;>
>>> tuple.__class__
<class &#39;type&#39;>
>>> type.__class__
<class &#39;type&#39;>
>>> object.__class__
<class &#39;type&#39;>
>>> type.__bases__
(<class &#39;object&#39;>,)
>>> int.__bases__
(<class &#39;object&#39;>,)
>>> str.__bases__
(<class &#39;object&#39;>,)
>>> bool.__bases__
(<class &#39;int&#39;>,)
>>> float.__bases__
(<class &#39;object&#39;>,)
>>> object.__bases__
()
>>>

J'ai découvert que non, les types que nous utilisons sont en fait des classes , sauf bool Il hérite de la classe int et tout le reste hérite de l'objet super classe. La classe d'objets n'a pas de superclasse. Il faut dire que le type est une classe de types ! Bien sûr, le type None est NoneType, mais NoneType n'est pas une classe. Cela signifie que None est une valeur nulle.

Le contenu contenu dans la classe de type et le contenu contenu dans la classe d'objet


>>> dir(type)
[&#39;__abstractmethods__&#39;, &#39;__base__&#39;, &#39;__bases__&#39;, &#39;__basicsize__&#39;, &#39;__call__&#39;, &#39;__class__&#39;, &#39;__delattr__&#39;, &#39;__dict__&#39;, &#39;__dictoffset__&#39;, &#39;__dir__&#39;, &#39;__doc__&#39;, &#39;__eq__&#39;, &#39;__flags__&#39;, &#39;__format__&#39;, &#39;__ge__&#39;, &#39;__getattribute__&#39;, &#39;__gt__&#39;, &#39;__hash__&#39;, &#39;__init__&#39;, &#39;__init_subclass__&#39;, &#39;__instancecheck__&#39;, &#39;__itemsize__&#39;, &#39;__le__&#39;, &#39;__lt__&#39;, &#39;__module__&#39;, &#39;__mro__&#39;, &#39;__name__&#39;, &#39;__ne__&#39;, &#39;__new__&#39;, &#39;__prepare__&#39;, &#39;__qualname__&#39;, &#39;__reduce__&#39;, &#39;__reduce_ex__&#39;, &#39;__repr__&#39;, &#39;__setattr__&#39;, &#39;__sizeof__&#39;, &#39;__str__&#39;, &#39;__subclasscheck__&#39;, &#39;__subclasses__&#39;, &#39;__subclasshook__&#39;, &#39;__text_signature__&#39;, &#39;__weakrefoffset__&#39;, &#39;mro&#39;]
>>> dir(object)
[&#39;__class__&#39;, &#39;__delattr__&#39;, &#39;__dir__&#39;, &#39;__doc__&#39;, &#39;__eq__&#39;, &#39;__format__&#39;, &#39;__ge__&#39;, &#39;__getattribute__&#39;, &#39;__gt__&#39;, &#39;__hash__&#39;, &#39;__init__&#39;, &#39;__init_subclass__&#39;, &#39;__le__&#39;, &#39;__lt__&#39;, &#39;__ne__&#39;, &#39;__new__&#39;, &#39;__reduce__&#39;, &#39;__reduce_ex__&#39;, &#39;__repr__&#39;, &#39;__setattr__&#39;, &#39;__sizeof__&#39;, &#39;__str__&#39;, &#39;__subclasshook__&#39;]

est et id() pouvons laisser Nous voir les relations cachées entre les variables !

Nous savons tous que Python a la commodité des types faibles utilisés. Bien sûr, en python, il n’y a qu’une seule variable avec la même valeur ! Pourquoi est-ce ? En effet, elles pointent toutes vers la même adresse mémoire. Vous pouvez considérer ces variables comme stockant les adresses mémoire une par une. Notre mission consiste simplement à modifier les adresses mémoire vers lesquelles elles pointent ! !

Il est utile de comprendre Python du point de vue des pointeurs. La variable elle-même stocke des pointeurs. Si vous comprenez cela, vous pouvez facilement comprendre et utiliser les variables de Python et le mécanisme de recyclage de la mémoire.

La fonction de l'opération A est B est de déterminer si A est B. Si c'est vrai, cela signifie que A et B sont le même objet. Si c'est faux, cela signifie que A et B sont. pas le même objet.

id(A) La fonction de l'opération est de déterminer le numéro de séquence id de A dans la mémoire.

Expliquons en détail les phénomènes associés en python :

1 Bien que A et B en python soient le même objet, mais après avoir attribué une valeur à A, A et B sont à nouveau le même objet, car l'affectation en python change l'adresse pointée par A en l'adresse d'un autre objet, qui est différente de l'adresse dans B. La valeur de l'objet provoquée par l'adresse B ne sera pas affecté par l'affectation A.

2.python中同一个对象所具有的id可能是不同的,因为在没有指向该地址的变量时,python内存自动清理会清理掉这个对象。再次使用到具有相同数值的对象可能是在前一个对象自动清理之后创建的新对象。

针对第一个情况我们首先通过对True和False和数字来确定哪些值对象的id是系统自带的,即便这些值对象不被变量使用python内存清理也不会清理这些对象!

通过id来判断数值和布尔值中的值对象是否是系统自带的对象


>>> id(True)
1538937056
>>> id(False)
1538937088
>>> id(False) - id(True)
32
>>> id(-5)
1539416992
>>> id(-6)
1667933956912
>>> id(-4)
1539417024
>>> id(-4)-id(-5)
32
>>> id(-3)-id(-4)
32
>>> id(-3)
1539417056
>>> id(-2)
1539417088
>>> id(-2) - id(-3)
32
>>> id(255)
1539425312
>>> id(256)
1539425344
>>> id(256) - id(255)
32
>>> id(257)
1667904611440
>>> id(1.0)
1667904643192

你会发现数字-5到256是连续的,他们相邻的id值相差是32,意思是他们是32表示的数值。id返回的值就是他们在python中逻辑内存地址的值,在不同python进程中这些相同值对象返回的id值是一致的。而小于-5或者大于256的数值,小数,超过单个字符的字符串都是python在用户使用时创建的值对象,在不同的python进程中相同的值的id是不同的!其他值在不使用时有的就会被python内存清理程序清理掉释放内存!

当然,python中还有很多对象、类、函数等是python自创建的不会因为不使用而被内存清理程序清理掉。比如 int,None,dict,list。

不够值得一提的是 None is None是返回True 。并且id(None)的返回值是1538983120。这说明与其他脚本(比如javascript)不一样,None是空值,是一个唯一的空值对象,程序中所有的None都是相等的。都是同一个内存地址中存放的值。

很多情况下,我们想判断两个变量是否指向同一个内存地址块存放的值,可以使用is来判断。

python中对于全局变量,局部变量,外部变量有着额外的处理方式

如果一个函数中定义了与外部名称相同的变量,在函数内部如何能够获得外部定义的变量呢?在其他语言中,我们都知道局部变量会覆盖掉同名的外部变量。而在python中虽然也是这个逻辑,但是他提供了 3个函数来使得我们能够获得不同作用域中定义的同名的变量值。

globals()获取所有全局变量值

locals()获取所有局部变量值

nonlocals()获取所有外部变量值(因为python是支持函数嵌套的,内部函数如果想要获得外部函数局部变量的值可以使用这个)

在局部变量中获取全局变量中同名变量


>>> a = 234
>>> globals()
{&#39;__name__&#39;: &#39;__main__&#39;, &#39;__doc__&#39;: None, &#39;__package__&#39;: None, &#39;__loader__&#39;: <class &#39;_frozen_importlib.BuiltinImporter&#39;>, &#39;__spec__&#39;: None, &#39;__annotations__&#39;: {}, &#39;__builtins__&#39;: <module &#39;builtins&#39; (built-in)>, &#39;a&#39;: 234}
>>> def s():
...  a = &#39;hello&#39;
...  print(locals())
...
>>> s()
{&#39;a&#39;: &#39;hello&#39;}
>>> def u():
...  a = &#39;world&#39;
...  c = globals()[&#39;a&#39;]
...  print(c)
...
>>> u()
234

如上面代码显示的,在函数u()中a的值是‘world'而在全局变量中a的值是234,函数s()中局部变量a的值是'hello'通过globals()[变量名]就可以获得全局变量中同名的变量的值。

局部改变上段代码中同名的全局变量值


>>> def e():
...  a = &#39;sdf&#39;
...  globals()[&#39;a&#39;] = a
...
>>> e()
>>> a
&#39;sdf&#39;
>>>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn