PHP의 var_dump ()와 동등한 파이썬은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
PHP로 디버깅 할 때 , 변수가 무엇인지, 변수가 무엇인지, 변수가 포함되어있는 변수가 무엇인지를 보여주기 위해 코드에 var_dump () 를 붙이는 것이 유용한 경우가 많습니다 .
이것에 대해 좋은 파이썬은 무엇입니까?
값을 잘 표시하려면 pprint 모듈을 사용하면 됩니다 . 모든 변수를 덤프하는 가장 쉬운 방법은
from pprint import pprint
pprint(globals())
pprint(locals())
CGI에서 실행중인 경우 유용한 디버깅 기능은 cgitb 모듈로, 로컬 변수 값을 역 추적의 일부로 표시합니다.
PHP와 가장 동등한 var_dump($foo, $bar)
것은 다음과 결합하는 것 print
입니다 vars
.
print vars(foo),vars(bar)
가장 가까운 것은 PHP '들 var_dump()
입니다 pprint()
로 getmembers()
의 기능을 내장 inspect
모듈 :
from inspect import getmembers
from pprint import pprint
pprint(getmembers(yourObj))
PHP의 var_export ()는 일반적으로 객체를 재 작성하기 위해 exec () 할 수있는 직렬화 된 버전의 객체를 보여줍니다. 파이썬에서 가장 가까운 것은 repr ()
"많은 유형의 경우,이 함수는 eval () [...]에 전달 될 때 동일한 값을 가진 객체를 생성하는 문자열을 반환하려고 시도합니다."
파이썬에서 사용하기 위해 PHP의 var_dump에 대한 매우 가벼운 대안을 작성하여 나중에 오픈 소스로 만들었습니다.
GitHub : https://github.com/sha256/python-var-dump
다음을 사용하여 간단히 설치할 수 있습니다 pip
.
pip install var_dump
그래서 나는이 질문과 다른 질문 에서 대답을 취했으며 아래에 나왔습니다. 나는 이것이 대부분의 사람들에게 충분히 파이썬 적이 지 않다고 생각하지만 실제로는 알려지지 않은 변수의 가치를 깊이있게 표현할 수있는 무언가를 원했습니다. 이를 개선하거나 동일한 동작을 쉽게 달성 할 수있는 방법에 대한 제안을 부탁드립니다.
def dump(obj):
'''return a printable representation of an object for debugging'''
newobj=obj
if '__dict__' in dir(obj):
newobj=obj.__dict__
if ' object at ' in str(obj) and not newobj.has_key('__type__'):
newobj['__type__']=str(obj)
for attr in newobj:
newobj[attr]=dump(newobj[attr])
return newobj
사용법은 다음과 같습니다
class stdClass(object): pass
obj=stdClass()
obj.int=1
obj.tup=(1,2,3,4)
obj.dict={'a':1,'b':2, 'c':3, 'more':{'z':26,'y':25}}
obj.list=[1,2,3,'a','b','c',[1,2,3,4]]
obj.subObj=stdClass()
obj.subObj.value='foobar'
from pprint import pprint
pprint(dump(obj))
그리고 결과.
{'__type__': '<__main__.stdClass object at 0x2b126000b890>',
'dict': {'a': 1, 'c': 3, 'b': 2, 'more': {'y': 25, 'z': 26}},
'int': 1,
'list': [1, 2, 3, 'a', 'b', 'c', [1, 2, 3, 4]],
'subObj': {'__type__': '<__main__.stdClass object at 0x2b126000b8d0>',
'value': 'foobar'},
'tup': (1, 2, 3, 4)}
오래된 주제이지만 시도해 볼 가치가 있습니다.
간단하고 효율적인 var_dump
기능 은 다음과 같습니다 .
def var_dump(var, prefix=''):
"""
You know you're a php developer when the first thing you ask for
when learning a new language is 'Where's var_dump?????'
"""
my_type = '[' + var.__class__.__name__ + '(' + str(len(var)) + ')]:'
print(prefix, my_type, sep='')
prefix += ' '
for i in var:
if type(i) in (list, tuple, dict, set):
var_dump(i, prefix)
else:
if isinstance(var, dict):
print(prefix, i, ': (', var[i].__class__.__name__, ') ', var[i], sep='')
else:
print(prefix, '(', i.__class__.__name__, ') ', i, sep='')
샘플 출력 :
>>> var_dump(zen)
[list(9)]:
(str) hello
(int) 3
(int) 43
(int) 2
(str) goodbye
[list(3)]:
(str) hey
(str) oh
[tuple(3)]:
(str) jij
(str) llll
(str) iojfi
(str) call
(str) me
[list(7)]:
(str) coucou
[dict(2)]:
oKey: (str) oValue
key: (str) value
(str) this
[list(4)]:
(str) a
(str) new
(str) nested
(str) list
print
자신의 클래스의 경우 __str__
메소드를 정의하십시오.
PHP 경험이 없지만 Python 표준 라이브러리에 대한 이해가 있습니다.
당신의 목적을 위해, 파이썬에는 몇 가지 방법이 있습니다 :
로깅 모듈;
pickle 이라는 객체 직렬화 모듈 . 자신 만의 피클 모듈 래퍼를 작성할 수 있습니다.
var_dump
테스트에 사용 하는 경우 Python에는 자체 doctest 및 unittest 모듈이 있습니다. 디자인이 매우 간단하고 빠릅니다.
자체 작성 프린터 클래스를 사용하지만 dir () 또한 인스턴스 필드 / 값을 출력하는 데 좋습니다.
class Printer:
def __init__ (self, PrintableClass):
for name in dir(PrintableClass):
value = getattr(PrintableClass,name)
if '_' not in str(name).join(str(value)):
print ' .%s: %r' % (name, value)
사용 샘플 :
Printer(MyClass)
참고 : https://stackoverflow.com/questions/383944/what-is-a-python-equivalent-of-phps-var-dump
'development' 카테고리의 다른 글
UUID는 얼마나 독특합니까? (0) | 2020.02.22 |
---|---|
SVG 채우기 색상 투명도 / 알파? (0) | 2020.02.22 |
bool의 printf 형식 지정자는 무엇입니까? (0) | 2020.02.22 |
Git 커밋 훅 건너 뛰기 (0) | 2020.02.22 |
잘못된 병합을 수정하고 올바른 병합을 고정 병합으로 재생하는 방법은 무엇입니까? (0) | 2020.02.22 |