> 백엔드 개발 > 파이썬 튜토리얼 > Python을 시작하기 위한 기본 작업(반드시 읽어야 함)

Python을 시작하기 위한 기본 작업(반드시 읽어야 함)

黄舟
풀어 주다: 2017-07-26 15:46:13
원래의
1351명이 탐색했습니다.

아래 편집기는 Python 기초를 시작하기 위해 꼭 읽어야 할 작업을 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 에디터를 따라가서 살펴보세요

파이썬으로 개발할 때 흔히 사용하는 방법과 기법이 있으니, 틀린 부분이 있으면 비판하고 고쳐주세요.

핵심 사항: 개발 중 클래스 및 변수 특성 쿼리, 유형은 클래스, 어설션 사용, 깊은 복사본과 얕은 복사본 판단 등

Python 스크립트 파일은 UTF-8을 사용하여 인코딩되므로 한자를 찾으면 왜곡된 경우 UTF-8로 인코딩된 텍스트 파일인지 고려해야 합니다.

다른 인코딩을 지정하려면 소스 코드 파일 시작 부분에 다음과 같은 주석을 추가해야 합니다.


# -*- coding: utf-8 -*-
로그인 후 복사

Python이 Linux 및 Unix 시스템에서 실행되는 경우 다음을 추가해야 합니다.


소스코드 첫줄에
#!/usr/bin/python3
로그인 후 복사

파이썬에서 각 모듈, 변수, 클래스 등의 내용을 어떻게 얻어오나요?

파이썬의 도움말 그룹에 대한 쿼리는 변수 __all__, __dict__, 함수 help(), dir()을 통해 얻을 수 있습니다.

클래스나 모듈에 __all__을 정의하면 일반적으로 외부에서 호출할 수 있는 기능이 포함됩니다. 할당 없이 정의하면 밑줄로 시작하지 않는 기능으로 자동으로 채워집니다. 매개변수가 없으면 __all__python은 AttributeError 속성 오류를 표시합니다.

__dict__는 일반적으로 클래스나 모듈에 정의된 특성(속성 및 메서드 포함)을 제공하며, 이는 매개변수 및 매개변수 값(매개변수, 매개변수 값 또는 설명)을 나타내는 튜플을 사용하여 사전 형식으로 출력됩니다.

list __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()은 값과 속성 설명 없이 목록 형식으로 사용 가능한 모든 기능 속성을 제공합니다.

list dir()을 사용하여


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;]
로그인 후 복사

일반을 봅니다. 일반적으로 말하면 __dict__ 및 dir()을 사용하면 됩니다. 물론 자세한 문서(실제로는 __doc__의 내용)를 보려면 help()가 필요한 경우가 많습니다.

list


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 --
로그인 후 복사
를 보려면 help()를 사용하세요. 이제 객체 a = list()를 생성하고 객체 a의 특징적인 메서드를 얻으려면 dir() 및 help()도 사용합니다.

여기서 강조해야 할 점은 dir()과 help()의 힘은 클래스뿐만 아니라 우리가 정의한 변수도 확인할 수 있다는 것입니다. 이렇게 하면 인코딩 프로세스 중에 더 많은 콘텐츠를 얻을 수 있습니다.

a=1 Python에서 dir(), help(), __all__, __dict__를 사용하는 것 외에도 원본을 확인하세요. 디자인의 내용을 정의하는 것 외에도 정의된 여러 기능을 사용하여 더 많은 정보를 얻을 수 있습니다.

메서드 변수 유형 및 객체 유형을 얻으려면:


__class__

>>> 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 --
로그인 후 복사
를 통해 변수 및 클래스 유형을 쿼리합니다. 위를 통해 우리는 코드에서 클래스가 유형이면 실제로는 클래스의 정의이고, 어떤 것이라면 클래스의 정의라는 것을 발견했습니다. 그렇지 않으면 객체입니다.

파이썬의 기본 변수도 객체라고 생각한 적이 있나요?

일반 언어에서는 유형이 정수, 부동 소수점 유형, 문자열 등으로 구분됩니다. 그러나 Python에서는 이러한 유형이 실제로 클래스 형태로 정의되며 클래스도 최상위 슈퍼클래스를 상속합니다.


유형을 보려면 __class__를 사용하고 슈퍼 클래스를 보려면 __bases__를 사용하세요

>>> 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;>
로그인 후 복사
아니요, 우리가 사용하는 유형은 실제로 클래스 int를 상속하는 bool을 제외하고 나머지는 슈퍼 클래스 객체를 상속합니다. 객체 클래스에는 슈퍼클래스가 없습니다. 유형은 유형 클래스라고 말해야 합니다! 물론 None 유형은 NoneType이지만 NoneType은 클래스가 아닙니다. 이는 None이 null 값임을 의미합니다. 타입 클래스에 포함된 내용과 객체 클래스

>>> 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__
()
>>>
로그인 후 복사

is 및 id()에 포함된 내용을 통해 변수 간의 숨겨진 관계를 볼 수 있습니다!

우리 모두는 파이썬이 약한 유형을 사용하는 편리함을 가지고 있다는 것을 알고 있습니다. 물론, Python에는 동일한 값을 갖는 변수가 하나만 있습니다! 왜 이런가요? 이는 모두 동일한 메모리 주소를 가리키기 때문입니다. 이러한 변수는 메모리 주소를 하나씩 저장하는 것으로 생각할 수 있습니다. !

포인터의 관점에서 파이썬을 이해하는 것이 도움이 됩니다. 변수 자체는 포인터를 저장한다. 이것을 이해하면 파이썬의 변수와 메모리 재활용 메커니즘을 쉽게 이해하고 사용할 수 있다.


A는 B입니다. 연산의 기능은 A가 B인지 확인하는 것입니다. true인 경우 A와 B가 동일한 객체라는 의미이며, false인 경우 A와 B는 동일한 객체가 아니라는 의미입니다. .

id(A) 연산의 기능은 메모리에서 A의 ID 시퀀스 번호를 결정하는 것입니다. 파이썬에서 관련된 현상을 자세히 설명하자면:

1. 파이썬에서 A와 B는 동일한 객체이지만, A에 값을 할당한 후에는 A와 B가 다시 동일한 객체이기 때문입니다. 파이썬에서 할당은 A가 가리키는 주소를 B의 주소와 다른 다른 개체의 주소로 변경하므로 B의 주소로 인해 발생하는 개체의 값은 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;
>>>
로그인 후 복사

위 내용은 Python을 시작하기 위한 기본 작업(반드시 읽어야 함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿