resueltos propias otra lista globales funciones funcion for ejercicios dentro python function

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={})


inspect.getargspec()

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 .



someMethod.func_code.co_argcount

o, si el nombre de la función actual es indeterminado:

import sys sys._getframe().func_code.co_argcount