inspect a function object
def clip(text, max_len=80):
""" return text clipped at the last space before or after max_len
"""
end = None
if len(text) > max_len:
space_before = text.rfind(' ', 0, max_len)
if space_before >= 0:
end = space_before
else:
space_after = text.rfind(' ', max_len)
if space_after >= 0:
end = space_after
if end is None:
end = len(text)
return text[:end].rstrip()
clip.__defaults__ # return a tuple which contains the default value
(80,)
clip.__code__
<code object clip at 0x0000000003DA89C0, file "<ipython-input-1-90da76271be0>", line 1>
dir(clip.__code__)
['__class__',
'__delattr__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__le__',
'__lt__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'co_argcount',
'co_cellvars',
'co_code',
'co_consts',
'co_filename',
'co_firstlineno',
'co_flags',
'co_freevars',
'co_kwonlyargcount',
'co_lnotab',
'co_name',
'co_names',
'co_nlocals',
'co_stacksize',
'co_varnames']
clip.__code__.co_argcount # number of arguments
2
clip.__code__.co_varnames # name of variables
('text', 'max_len', 'end', 'space_before', 'space_after')
clip.__code__.co_freevars
()
clip.__code__.co_kwonlyargcount
0
clip.__code__.co_code
b'd\x01\x00}\x02\x00t\x00\x00|\x00\x00\x83\x01\x00|\x01\x00k\x04\x00rl\x00|\x00\x00j\x01\x00d\x02\x00d\x03\x00|\x01\x00\x83\x03\x00}\x03\x00|\x03\x00d\x03\x00k\x05\x00rB\x00|\x03\x00}\x02\x00ql\x00|\x00\x00j\x01\x00d\x02\x00|\x01\x00\x83\x02\x00}\x04\x00|\x04\x00d\x03\x00k\x05\x00rl\x00|\x04\x00}\x02\x00ql\x00n\x00\x00|\x02\x00d\x01\x00k\x08\x00r\x87\x00t\x00\x00|\x00\x00\x83\x01\x00}\x02\x00n\x00\x00|\x00\x00d\x01\x00|\x02\x00\x85\x02\x00\x19j\x02\x00\x83\x00\x00S'
import inspect
sig = inspect.signature(clip)
sig
<inspect.Signature at 0x4748710>
str(sig)
'(text, max_len=80)'
for name,param in sig.parameters.items():
print("{}:{} = {}".format(name,param.kind,param.default))
text:POSITIONAL_OR_KEYWORD = <class 'inspect._empty'>
max_len:POSITIONAL_OR_KEYWORD = 80
inspect 모듈에서의 _ParameterKind 클래스에는 다음과 같은 5가지 유형의 매개변수가 있습니다. 1.POSITIONAL_OR_KEYWORD 위치 매개 변수나 키워드 매개 변수, 대부분의 함수는 이런 종류의 매개 변수를 가지고 있다.2.VAR_POSITIONAL 위치 매개 변수, 이 위치 매개 변수는tuple 3을 형성한다.VAR_KEYWORD 키워드 값 유형 매개 변수, 이 매개 변수는 사전 4를 형성합니다.KEYWORD_ONLY는 키워드 매개 변수일 뿐,python3에 새로 나온 유형 5.POSITIONAL_ONLY는 위치 매개 변수일 수 있습니다.현재python 함수 정의 문법은 이 유형을 지원하지 않습니다.그러나 예외는 C가 실현하는 함수, 예를 들어 divmod에 존재하는데 이 함수는 키워드 함수를 지원하지 않는다.
my_tag = {'text': 'img', 'max_len': 80}
bound_args = sig.bind(**my_tag)
bound_args
<inspect.BoundArguments at 0x475cba8>
for name, value in bound_args.arguments.items():
print("{}={}".format(name, value))
text=img
max_len=80
del my_tag['max_len']
sig.bind(**my_tag) # that's ok the max_len has default value 80
<inspect.BoundArguments at 0x44c3400>
my_tag
{'text': 'img'}
my_tag['max_len'] = 80
del my_tag['text']
sig.bind(**my_tag) # error! need the value of text
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
C:\Python34\lib\inspect.py in _bind(self, args, kwargs, partial)
2532 try:
-> 2533 arg_val = next(arg_vals)
2534 except StopIteration:
StopIteration:
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
<ipython-input-49-1c401fb09162> in <module>()
----> 1 sig.bind(**my_tag)
C:\Python34\lib\inspect.py in bind(*args, **kwargs)
2650 if the passed arguments can not be bound.
2651 '''
-> 2652 return args[0]._bind(args[1:], kwargs)
2653
2654 def bind_partial(*args, **kwargs):
C:\Python34\lib\inspect.py in _bind(self, args, kwargs, partial)
2569 msg = '{arg!r} parameter lacking default value'
2570 msg = msg.format(arg=param.name)
-> 2571 raise TypeError(msg) from None
2572 else:
2573 # We have a positional argument to process
TypeError: 'text' parameter lacking default value
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.