{"id":2156,"date":"2020-06-26T17:06:14","date_gmt":"2020-06-26T22:06:14","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2156"},"modified":"2020-06-29T14:27:35","modified_gmt":"2020-06-29T19:27:35","slug":"funciones-en-python-argumentos-y-retorno","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/funciones-en-python-argumentos-y-retorno\/","title":{"rendered":"Funciones en Python: argumentos y retorno de m\u00faltiples valores"},"content":{"rendered":"<p>Veremos qu\u00e9 son las funciones en Python, las diferentes formas de pasar y recibir argumentos, y c\u00f3mo devolver m\u00faltiples valores en una funci\u00f3n.<\/p>\n<p><!--more--><\/p>\n<p>\u00c9ste art\u00edculo est\u00e1 explicado en video. Puedes verlo aqu\u00ed:<a href=\"https:\/\/youtu.be\/8YQhPHAmvxk\" target=\"_blank\" rel=\"noopener\">https:\/\/youtu.be\/8YQhPHAmvxk<\/a><\/p>\n<p>Si est\u00e1s aprendiendo a programar has podido comprobar que un programa puede hacerse muy grande a medida que realiza m\u00e1s operaciones. Pues bien, un programa muy grande puede ser dividido en bloques<br \/>\nm\u00e1s peque\u00f1os y manejables. A \u00e9stos bloques se les llama funciones.<\/p>\n<p>Ahora bien, dividir un programa en funciones no es simplemente juntar unas lineas y separar otras.\u00a0Una funci\u00f3n tiene una estructura que seguir:<\/p>\n<h2>Funciones en Python: Estructura de una funci\u00f3n<\/h2>\n<p>Una funci\u00f3n contiene:<\/p>\n<ul>\n<li>Nombre de la funci\u00f3n<\/li>\n<li>Argumentos<\/li>\n<li>C\u00f3digo de la funci\u00f3n<\/li>\n<li>Valor de retorno (valores)<\/li>\n<\/ul>\n<p>Para que una funci\u00f3n trabaje, debe ser invocada. (<a href=\"https:\/\/books.google.com.mx\/books?id=jMpjAgAAQBAJ&amp;lpg=PA105&amp;dq=funcion%20programar&amp;pg=PA109#v=onepage&amp;q=funcion%20programar&amp;f=false\" target=\"_blank\" rel=\"noopener\">Eslava, 2012<\/a>)<\/p>\n<div id=\"attachment_2158\" style=\"width: 577px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/06\/Funciones-en-Python.-Estructura-de-una-funci\u00f3n.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2158\" class=\" wp-image-2158\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/06\/Funciones-en-Python.-Estructura-de-una-funci\u00f3n.png\" alt=\"Funciones en Python. Estructura de una funci\u00f3n\" width=\"567\" height=\"425\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/06\/Funciones-en-Python.-Estructura-de-una-funci\u00f3n.png 1200w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/06\/Funciones-en-Python.-Estructura-de-una-funci\u00f3n-300x225.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/06\/Funciones-en-Python.-Estructura-de-una-funci\u00f3n-768x576.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/06\/Funciones-en-Python.-Estructura-de-una-funci\u00f3n-1024x768.png 1024w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/a><p id=\"caption-attachment-2158\" class=\"wp-caption-text\">Funciones en Python. Estructura de una funci\u00f3n<\/p><\/div>\n<h2>Funciones en Python sin argumentos<\/h2>\n<p>Para crear una funci\u00f3n se utiliza la palabra def, seguida del nombre de la funci\u00f3n y entre par\u00e9ntesis se anotan los par\u00e1metros que la funci\u00f3n necesita para trabajar.<\/p>\n<pre class=\"lang:python decode:true\">def ejemplo():\r\n\tprint (\"Esto es una funcion sin argumentos\")\r\n\r\nejemplo()<\/pre>\n<p>Una vez creada, puede ser invocada en cualquier momento, utilizando su nombre y pasando los argumentos (valores) necesarios.<\/p>\n<p>En el ejemplo anterior, la funci\u00f3n no requiere de argumentos.<\/p>\n<h2>Paso de argumentos por posici\u00f3n<\/h2>\n<p>En el caso de que una funci\u00f3n tenga par\u00e1metros, una forma de utilizarlos es considerando su posici\u00f3n.<\/p>\n<pre class=\"lang:python decode:true \">def suma(a,b):\r\n\tresultado = a+b\r\n\treturn resultado\r\n\r\nprint(suma(5,6))<\/pre>\n<p>En el ejemplo anterior, la funci\u00f3n suma requiere dos par\u00e1metros (a, b). Cuando es llamada,\u00a0<em>print (suma(5,6)),<\/em>\u00a0los argumentos \u00a0le\u00eddos en el orden en que son pasados. En el ejemplo anterior a tomar\u00e1 el valor de 5, y b el valor de 6.<\/p>\n<h2>Paso de argumentos por nombre<\/h2>\n<p>En Python no es necesario escribir los argumentos en el orden en que la funci\u00f3n define sus par\u00e1metros. Podemos especificar el nombre del par\u00e1metro y de esa manera escribir los argumentos en cualquier orden.<\/p>\n<pre class=\"lang:python decode:true \">def restar (actual, nacimiento):\r\n\tresultado = actual - nacimiento\r\n\treturn resultado\r\n\r\n\r\nedad_erronea = restar(1990,2020)\r\nedad = restar(nacimiento=1990, actual=2020)\r\nprint (edad_erronea)\r\nprint (edad)<\/pre>\n<p>En el ejemplo anterior podemos llamar la funci\u00f3n restar pas\u00e1ndole como argumentos 1990 y 2020. Por default copiar\u00e1 el valor 1990 al par\u00e1metro <em>actual<\/em> y el valor 2020 al par\u00e1metro <em>nacimiento<\/em>. Pero podemos pasar los argumentos por nombre:<\/p>\n<p><em>edad = restar (nacimiento =1990, actual=2020)<\/em><\/p>\n<p>y poner los argumentos en cualquier orden.<\/p>\n<h2>Argumentos por default<\/h2>\n<p>En Python tambi\u00e9n podemos especificar argumentos por default, de modo que, aunque no se pase el valor correspondiente, la funci\u00f3n la asume por default.<\/p>\n<p>Por ejemplo:<\/p>\n<pre class=\"lang:python decode:true \">def dividir (dividendo, divisor=2):\r\n\tresultado = dividendo\/divisor\r\n\treturn resultado\r\n\r\ncuarto = dividir(40,4)\r\nmitad = dividir(40)\r\nprint (cuarto,mitad)<\/pre>\n<p>En la funci\u00f3n anterior se define un par\u00e1metro por default, <em>divisor=2<\/em>. Es posible llamar a la funci\u00f3n pas\u00e1ndole los dos par\u00e1metros:<\/p>\n<p><em>cuarto = dividir(40,4)<\/em><\/p>\n<p>o pasando solamente uno:<\/p>\n<p><em>mitad = dividir(40).<\/em><\/p>\n<p>En \u00e9ste \u00faltimo caso no hay error, porque fue especificado el par\u00e1metro divisor, y lo asume por default.<\/p>\n<h2>Argumentos indeterminados en Python<\/h2>\n<p>Una funci\u00f3n puede utilizar par\u00e1metros indeterminados. Python utiliza la expresi\u00f3n *args para indicar una serie de argumentos indeterminados.<\/p>\n<pre class=\"lang:python decode:true \">def sumarx(*args):\r\n\tresultado = 0\r\n\tfor valor in args:\r\n\t\tresultado = resultado + valor\r\n\treturn resultado\r\n\r\ntotal = sumarx(4,3,6,2,6)\r\nprint (total)<\/pre>\n<p>En la funci\u00f3n anterior, es posible invocar a sumarx con la cantidad de datos que nosotros queramos.<\/p>\n<p><em>total = sumarx(4,3,6,2,6)<\/em><\/p>\n<p>o bien<\/p>\n<p><em>total = sumarx(4,3,5)<\/em><\/p>\n<p>Cualquiera de las dos formas ser\u00e1 correcta, pues la funci\u00f3n est\u00e1 programada para recorrer utilizando un <a href=\"https:\/\/naps.com.mx\/blog\/uso-de-for-en-python-usando-listas\/\">for<\/a> \u00a0todos los argumentos (valores) pasados (<em>for valor in args<\/em>).<\/p>\n<h2>Retorno de m\u00faltiples valores en una funci\u00f3n en Python<\/h2>\n<p>Hasta aqu\u00ed hemos visto c\u00f3mo retornar (<em>return<\/em>) un valor en una funci\u00f3n en Python, pero \u00e9ste lenguaje permite devolver m\u00faltiples valores.<\/p>\n<pre class=\"lang:python decode:true\">def cuadradoycubo (n):\r\n\tcuadrado = n ** 2\r\n\tcubo = n ** 3\r\n\treturn cuadrado, cubo\r\n\t#return [cuadrado,cubo]\r\n\r\n\r\nprint (cuadradoycubo(5))\r\nc2, c3 = cuadradoycubo(5)\r\nprint (c2)\r\nprint (c3)\r\n\r\nlista = cuadradoycubo(3)\r\nprint (lista)<\/pre>\n<p>La funci\u00f3n anterior devuelve dos valores (return cuadrado, cubo). Entonces cuando la funci\u00f3n sea invocada:<\/p>\n<p><em>c2,c3 = cuadradoycubo(5)\u00a0<\/em><\/p>\n<p>debe de haber dos variables que reciban los datos. De lo contrario, la variable ser\u00e1 una tupla y si la imprimimos se ver\u00e1 el resultado as\u00ed:<\/p>\n<p>(25,125)<\/p>\n<p>Los par\u00e9ntesis indican que es una tupla.<\/p>\n<p>Si quisi\u00e9ramos que los datos los reciba una <a href=\"https:\/\/naps.com.mx\/blog\/listas-en-python\/\">lista<\/a> para posteriormente procesarla como lista, entonces la funci\u00f3n deber\u00eda retornar y dato tipo lista:<\/p>\n<p><em>return [cuadrado,cubo]<\/em><\/p>\n<p>y cuando sea llamada:<\/p>\n<p><em>lista = cuadradoycubo(3)<\/em><\/p>\n<p>los datos devueltos ser\u00e1n elementos de una lista Python.<\/p>\n<p>Si aprendes mejor en video, te dejamos \u00e9ste:<\/p>\n<p><iframe loading=\"lazy\" width=\"806\" height=\"453\" src=\"https:\/\/www.youtube.com\/embed\/8YQhPHAmvxk\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veremos qu\u00e9 son las funciones en Python, las diferentes formas de pasar y recibir argumentos, y c\u00f3mo devolver m\u00faltiples valores en una funci\u00f3n.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[301,188],"tags":[287,299,290],"class_list":["post-2156","post","type-post","status-publish","format-standard","hentry","category-curso-python-analisis-datos","category-programacion-basica","tag-curso-python","tag-funciones-en-python","tag-listas-en-python"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=2156"}],"version-history":[{"count":8,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2156\/revisions"}],"predecessor-version":[{"id":2165,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2156\/revisions\/2165"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}