아래 편집기는 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({'__repr__': <slot wrapper '__repr__' of 'list' objects>, '__hash__': None, '__getattribute__': <slot wrapper '__getattribute__' of 'list' objects>, '__lt__': <slot wrapper '__lt__' of 'list' objects>, '__le__': <slot wrapper '__le__' of 'list' objects>, '__eq__': <slot wrapper '__eq__' of 'list' objects>, '__ne__': <slot wrapper '__ne__' of 'list' objects>, '__gt__': <slot wrapper '__gt__' of 'list' objects>, '__ge__': <slot wrapper '__ge__' of 'list' objects>, '__iter__': <slot wrapper '__iter__' of 'list' objects>, '__init__': <slot wrapper '__init__' of 'list' objects>, '__len__': <slot wrapper '__len__' of 'list' objects>, '__getitem__': <method '__getitem__' of 'list' objects>, '__setitem__': <slot wrapper '__setitem__' of 'list' objects>, '__delitem__': <slot wrapper '__delitem__' of 'list' objects>, '__add__': <slot wrapper '__add__' of 'list' objects>, '__mul__': <slot wrapper '__mul__' of 'list' objects>, '__rmul__': <slot wrapper '__rmul__' of 'list' objects>, '__contains__': <slot wrapper '__contains__' of 'list' objects>, '__iadd__': <slot wrapper '__iadd__' of 'list' objects>, '__imul__': <slot wrapper '__imul__' of 'list' objects>, '__new__': <built-in method __new__ of type object at 0x000000005BBAF530>, '__reversed__': <method '__reversed__' of 'list' objects>, '__sizeof__': <method '__sizeof__' of 'list' objects>, 'clear': <method 'clear' of 'list' objects>, 'copy': <method 'copy' of 'list' objects>, 'append': <method 'append' of 'list' objects>, 'insert': <method 'insert' of 'list' objects>, 'extend': <method 'extend' of 'list' objects>, 'pop': <method 'pop' of 'list' objects>, 'remove': <method 'remove' of 'list' objects>, 'index': <method 'index' of 'list' objects>, 'count': <method 'count' of 'list' objects>, 'reverse': <method 'reverse' of 'list' objects>, 'sort': <method 'sort' of 'list' objects>, '__doc__': "list() -> new empty list\nlist(iterable) -> new list initialized from iterable's items"})
dir()은 값과 속성 설명 없이 목록 형식으로 사용 가능한 모든 기능 속성을 제공합니다.
list dir()을 사용하여
1 >>> dir(list) 2 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
일반을 봅니다. 일반적으로 말하면 __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'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 --
__class__
>>> a=1
>>> dir(a)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__pmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floorp__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rpmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloorp__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruep__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truep__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> 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 '+' or '-' 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('0b100', base=0)
| 4
|
| Methods defined here:
|
| __abs__(self, /)
| abs(self)
|
| __add__(self, value, /)
| Return self+value.
|
| __and__(self, value, /)
| Return self&value.
|
-- More --
유형을 보려면 __class__를 사용하고 슈퍼 클래스를 보려면 __bases__를 사용하세요
>>> a =1 >>> a.__class__ <class 'int'> >>> b = 1.0 >>> b.__class__ <class 'float'> >>> c = '' >>> c.__class__ <class 'str'> >>> d = list() >>> d.__class__ <class 'list'> >>> e = tuple() >>> e.__class__ <class 'tuple'> >>> f = dict() >>> f.__class__ <class 'dict'> >>> list.__class__ <class 'type'> >>> dict.__class__ <class 'type'> >>> tuple.__class__ <class 'type'> >>> object.__class__ <class 'type'> >>> None.__class__ <class 'NoneType'>
>>> a = 1 >>> a.__class__ <class 'int'> >>> int.__class__ <class 'type'> >>> str.__class__ <class 'type'> >>> bool.__class__ <class 'type'> >>> list.__class__ <class 'type'> >>> dict.__class__ <class 'type'> >>> tuple.__class__ <class 'type'> >>> type.__class__ <class 'type'> >>> object.__class__ <class 'type'> >>> type.__bases__ (<class 'object'>,) >>> int.__bases__ (<class 'object'>,) >>> str.__bases__ (<class 'object'>,) >>> bool.__bases__ (<class 'int'>,) >>> float.__bases__ (<class 'object'>,) >>> object.__bases__ () >>>
is 및 id()에 포함된 내용을 통해 변수 간의 숨겨진 관계를 볼 수 있습니다!
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() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 234} >>> def s(): ... a = 'hello' ... print(locals()) ... >>> s() {'a': 'hello'} >>> def u(): ... a = 'world' ... c = globals()['a'] ... print(c) ... >>> u() 234
如上面代码显示的,在函数u()中a的值是‘world'而在全局变量中a的值是234,函数s()中局部变量a的值是'hello'通过globals()[变量名]就可以获得全局变量中同名的变量的值。
局部改变上段代码中同名的全局变量值
>>> def e(): ... a = 'sdf' ... globals()['a'] = a ... >>> e() >>> a 'sdf' >>>
위 내용은 Python을 시작하기 위한 기본 작업(반드시 읽어야 함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!