propias - lista de funciones de python
¿Cómo puedo encontrar la cantidad de argumentos de una función de Python? (6)
Agregando a lo anterior, también he visto que la mayoría de las veces la función de ayuda () realmente ayuda
Por ejemplo, da todos los detalles sobre los argumentos que lleva.
help(<method>)
da el siguiente
method(self, **kwargs) method of apiclient.discovery.Resource instance
Retrieves a report which is a collection of properties / statistics for a specific customer.
Args:
date: string, Represents the date in yyyy-mm-dd format for which the data is to be fetched. (required)
pageToken: string, Token to specify next page.
parameters: string, Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1, app_name2:param_name2.
Returns:
An object of the form:
{ # JSON template for a collection of usage reports.
"nextPageToken": "A String", # Token for retrieving the next page
"kind": "admin#reports#usageReports", # Th
¿Cómo puedo encontrar la cantidad de argumentos de una función de Python? Necesito saber cuántos argumentos normales tiene y cuántos argumentos con nombre.
Ejemplo:
def someMethod(self, arg1, kwarg1=None):
pass
Este método tiene 2 argumentos y 1 argumento nombrado.
Como otras respuestas sugieren, getargspec
funciona bien siempre que lo que se está consultando sea en realidad una función. No funciona para funciones integradas como open
, len
, etc., y emitirá una excepción en tales casos:
TypeError: <built-in function open> is not a Python function
La función siguiente (inspirada en esta respuesta ) muestra una solución alternativa. Devuelve el número de args esperado por f
:
from inspect import isfunction, getargspec
def num_args(f):
if isfunction(f):
return len(getargspec(f).args)
else:
spec = f.__doc__.split(''/n'')[0]
args = spec[spec.find(''('')+1:spec.find('')'')]
return args.count('','')+1 if args else 0
La idea es analizar la especificación de la función de la cadena __doc__
. Obviamente, esto depende del formato de dicha cadena, ¡por lo que apenas es robusto!
La respuesta previamente aceptada ha quedado deprecated partir de Python 3.0
. En lugar de usar inspect.getargspec
, ahora debería optar por la clase Signature
que lo reemplazó.
Crear una Firma para la función es fácil a través de la función de signature
:
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Ahora, puede ver sus parámetros de forma rápida con solo str
:
str(sig) # returns: ''(self, arg1, kwarg1=None)''
o también puede obtener una asignación de nombres de atributos a objetos de parámetros a través de sig.parameters
.
params = sig.parameters
print(params[''kwarg1'']) # prints: kwarg1=20
Además, puede llamar a len
en sig.parameters
para ver también la cantidad de argumentos que requiere esta función:
print(len(params)) # 3
Cada entrada en el mapeo de params
es en realidad un objeto Parameter
que tiene más atributos que hacen su vida más fácil. Por ejemplo, agarrar un parámetro y ver su valor predeterminado ahora se realiza fácilmente con:
kwarg1 = params[''kwarg1'']
kwarg1.default # returns: None
de manera similar para el resto de los objetos contenidos en los parameters
.
En cuanto a los usuarios de Python 2.x
, mientras inspect.getargspec
no está en desuso, el idioma pronto será :-). La clase Signature
no está disponible en la serie 2.x
y no lo estará. Entonces todavía necesita trabajar con deprecated .
En cuanto a la transición entre Python 2 y 3, si tiene un código que depende de la interfaz de getargspec
en Python 2 y cambiar a la signature
en 3
es demasiado difícil, tiene la valiosa opción de usar inspect.getfullargspec
. Ofrece una interfaz similar a getargspec
(un único argumento invocable) con el fin de captar los argumentos de una función y al mismo tiempo manejar algunos casos adicionales que getargspec
no:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Al igual que con getargspec
, getfullargspec
devuelve un NamedTuple
que contiene los argumentos.
print(args)
FullArgSpec(args=[''self'', ''arg1'', ''kwarg1''], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
Obtenga los nombres y valores predeterminados de los argumentos de una función. Se devuelve una tupla de cuatro cosas: (args, varargs, varkw, por defecto). args es una lista de los nombres de los argumentos (puede contener listas anidadas). varargs y varkw son los nombres de los argumentos * y ** o Ninguno. los valores predeterminados son una tupla de valores de argumento predeterminados o Ninguno si no hay argumentos predeterminados; si esta tupla tiene n elementos, corresponden a los últimos n elementos listados en args.
Modificado en la versión 2.6: Devuelve una tupla llamada ArgSpec (args, varargs, keywords, defaults).
Consulte can-you-list-the-keyword-arguments-a-python-function-receives .
import inspect
inspect.getargspec(someMethod)
someMethod.func_code.co_argcount
o, si el nombre de la función actual es indeterminado:
import sys
sys._getframe().func_code.co_argcount