Funciones de Python3
Una función es un bloque de código organizado, reutilizable, que se utiliza para implementar una función única o relacionada.
Las funciones mejoran la modularidad de la aplicación y la tasa de reutilización del código. Ya sabes que Python proporciona muchas funciones integradas, como print(). Pero también puedes crear tus propias funciones, lo que se llama funciones definidas por el usuario.
Definir una función
Puedes definir una función con la funcionalidad que desees. Estas son las reglas simples:
- El bloque de código de la función comienza con ladefpalabra clave def, seguida del nombre del identificador de la función y paréntesis.()。
- Cualquier parámetro entrante y argumento debe colocarse entre paréntesis. Los paréntesis se pueden usar para definir parámetros.
- La primera línea de declaración de la función puede usar opcionalmente una cadena de documentación, para almacenar la descripción de la función.
- El contenido de la función comienza con dos puntos:y sangría.
- return [expresión]Finaliza la función y, opcionalmente, devuelve un valor a la persona que llama. return sin expresión equivale a devolver None.

Sintaxis
Python usa la palabra clave def para definir funciones. El formato general es el siguiente:
def 函数名(参数列表):
函数体
Por defecto, los valores de los parámetros y los nombres de los parámetros coinciden en el orden definido en la declaración de la función.
Ejemplo
Usemos una función para imprimir "Hello World!":
def hello() :
print("Hello World!")
hello()
Una aplicación más compleja: la función incluye variables de parámetros:
Ejemplo (Python 3.0+)
Compara dos números y devuelve el mayor:
El resultado del ejemplo anterior:
5
Ejemplo (Python 3.0+)
Función para calcular el área:
El resultado del ejemplo anterior:
Welcome Ejemplo width = 4 height = 5 area = 20
Llamada a la función
Definir una función: darle un nombre a la función, especificar los parámetros que contiene y la estructura del bloque de código.
Una vez completada la estructura básica de esta función, puedes llamarla y ejecutarla a través de otra función, o directamente desde el símbolo del sistema de Python.
El siguiente ejemplo llama a laprintme()función:
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior:
¡Quiero llamar a una función definida por el usuario! Llamar a la misma función de nuevo
Paso de parámetros
En Python, los tipos pertenecen a los objetos, y los objetos se distinguen por diferentes tipos; las variables no tienen tipo:
a=[1,2,3] a="Ejemplo"
En el código anterior,[1,2,3]es de tipo List,"Ejemplo"es de tipo String, y la variable a no tiene tipo; es solo una referencia a un objeto (un puntero), que puede apuntar a un objeto de tipo List o a un objeto de tipo String.
Objetos mutables e inmutables
En Python, strings, tuples y numbers son objetos inmutables, mientras que list, dict, etc. son objetos modificables.
Tipos inmutables:Asignación de variablea=5y luego reasignara=10Aquí en realidad se genera un nuevo objeto int con valor 10, y luego a apunta a él, mientras que 5 se descarta. No es que se cambie el valor de a, equivale a que se haya generado una nueva a.
Tipos mutables:Asignación de variablela=[1,2,3,4]y luego reasignarla[2]=5Aquí se cambia el valor del tercer elemento de la lista la; la en sí no se modifica, solo se cambia una parte interna de sus valores.
Paso de parámetros en funciones de Python:
Tipos inmutables:Similar a la transferencia por valor en C++, como enteros, cadenas, tuplas. Por ejemplo fun(a), solo se pasa el valor de a, sin afectar al objeto a en sí. Si se modifica el valor de a dentro de fun(a), se genera un nuevo objeto a.
Tipos mutables:Similar a la transferencia por referencia en C++, como listas, diccionarios. Por ejemplo fun(la), se pasa la verdadera la; después de la modificación, la la externa a fun también se verá afectada.
En Python, todo es un objeto. Estrictamente hablando, no podemos decir transferencia por valor o transferencia por referencia; deberíamos decir pasar objetos inmutables y pasar objetos mutables.
Ejemplo de paso de objeto inmutable en Python
Mediante laid()función id() para observar el cambio de dirección de memoria:
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior:
4379369136 4379369136 4379369424
Se puede ver que antes y después de llamar a la función, el parámetro formal y el argumento apuntan al mismo objeto (el id del objeto es el mismo). Después de modificar el parámetro formal dentro de la función, el parámetro formal apunta a un id diferente.
Ejemplo de paso de objeto mutable
Si un objeto mutable se modifica dentro de la función, entonces en la función que llama a esta función, el parámetro original también se cambia. Por ejemplo:
Ejemplo (Python 3.0+)
El objeto pasado a la función y el objeto al que se le agrega nuevo contenido al final usan la misma referencia. Por lo tanto, el resultado de salida es el siguiente:
函数内取值: [10, 20, 30, [1, 2, 3, 4]] 函数外取值: [10, 20, 30, [1, 2, 3, 4]]
Parámetros
A continuación se muestran los tipos de parámetros formales que se pueden usar al llamar a una función:
- Parámetros obligatorios
- Parámetros de palabra clave
- Parámetros por defecto
- Parámetros de longitud variable
Parámetros obligatorios
Los parámetros obligatorios deben pasarse a la función en el orden correcto. El número al llamar debe ser el mismo que al declarar.
Al llamar a la función printme(), debes pasar un parámetro; de lo contrario, se producirá un error de sintaxis:
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior:
Traceback (most recent call last):
File "test.py", line 10, in <module>
printme()
TypeError: printme() missing 1 required positional argument: 'str'
Parámetros de palabra clave
Los parámetros de palabra clave están estrechamente relacionados con la llamada a la función. La llamada a la función usa parámetros de palabra clave para determinar el valor del parámetro pasado.
El uso de parámetros de palabra clave permite que el orden de los parámetros al llamar a la función no coincida con el de la declaración, porque el intérprete de Python puede usar los nombres de los parámetros para hacer coincidir los valores.
El siguiente ejemplo usa el nombre del parámetro al llamar a la función printme():
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior:
Tutorial para novatos
El siguiente ejemplo demuestra que el uso de parámetros de función no requiere especificar el orden:
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior:
名字: ejemplo 年龄: 50
Parámetros por defecto
Al llamar a una función, si no se pasa un parámetro, se utiliza el parámetro predeterminado. En el siguiente ejemplo, si no se pasa el parámetro age, se usa el valor predeterminado:
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior es:
名字: ejemplo 年龄: 50 ------------------------ 名字: ejemplo 年龄: 35
Parámetros de longitud variable
Puede que necesites una función que pueda manejar más parámetros de los que se declararon originalmente. Estos parámetros se llaman parámetros de longitud variable y, a diferencia de los 2 tipos de parámetros anteriores, no se nombran al declararlos. La sintaxis básica es la siguiente:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
Los parámetros con asterisco*se importan en forma de tupla (tuple), y almacenan todos los parámetros variables sin nombre.
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior es:
输出: 70 (60, 50)Si no se especifica ningún parámetro al llamar a la función, esta recibe una tupla vacía. También podemos no pasar variables sin nombre a la función. Como en el siguiente ejemplo:
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior es:
输出: 10 输出: 70 60 50
También existe el caso de parámetros con dos asteriscos.**La sintaxis básica es la siguiente:
def functionname([formal_args,] **var_args_dict ): "函数_文档字符串" function_suite return [expression]
Los parámetros con dos asteriscos**se importan en forma de diccionario.
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior es:
输出:
1
{'a': 2, 'b': 3}
Al declarar una función, el asterisco en los parámetros*puede aparecer solo, por ejemplo:
def f(a,b,*,c):
return a+b+c
Si el asterisco aparece solo*, los parámetros después del asterisco*deben pasarse utilizando palabras clave.
>>> def f(a,b,*,c): ... return a+b+c ... >>> f(1,2,3) # 报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given >>> f(1,2,c=3) # 正常 6 >>>
Funciones anónimas
Python usalambdapara crear funciones anónimas.
La llamada "anónima" significa que ya no se usadefla forma estándar de la instrucción def para definir una función.
- lambdalambda es solo una expresión, el cuerpo de la función esdefmucho más simple que el de def.
- El cuerpo de lambda es una expresión, no un bloque de código. Solo se puede encapsular una lógica limitada dentro de una expresión lambda.
- Las funciones lambda tienen su propio espacio de nombres y no pueden acceder a parámetros fuera de su lista de parámetros ni a los del espacio de nombres global.
- Aunque las funciones lambda parecen poder escribirse en una sola línea, no son equivalentes a las funciones inline de C o C++. El propósito de las funciones inline es no ocupar memoria de pila al llamar a funciones pequeñas, reduciendo así la sobrecarga de las llamadas a funciones y aumentando la velocidad de ejecución del código.
Sintaxis
La sintaxis de la función lambda contiene solo una declaración, como sigue:
lambda [arg1 [,arg2,.....argn]]:expression
Establece el parámetro a más 10:
Ejemplo
El resultado del ejemplo anterior es:
15
El siguiente ejemplo de función anónima establece dos parámetros:
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior es:
相加后的值为 : 30 相加后的值为 : 40
Podemos encapsular funciones anónimas dentro de una función, de modo que podamos usar el mismo código para crear múltiples funciones anónimas.
El siguiente ejemplo encapsula la función anónima dentro de la función myfunc, creando diferentes funciones anónimas al pasar diferentes parámetros:
Ejemplo
El resultado del ejemplo anterior es:
22 33
Para más funciones anónimas, también se puede consultar:Python lambda (funciones anónimas)
Sentencia return
return [expresión]La declaración return se utiliza para salir de una función y devolver opcionalmente una expresión al llamador. La declaración return sin un valor de parámetro devuelve None. Los ejemplos anteriores no demostraron cómo devolver un valor numérico; el siguiente ejemplo ilustra el uso de la declaración return.
Ejemplo (Python 3.0+)
El resultado del ejemplo anterior es:
函数内 : 30 函数外 : 30
Parámetros solo posicionales
Python 3.8 añadió una sintaxis de parámetros formales / para indicar que los parámetros formales deben usar posiciones específicas y no pueden usar la forma de parámetros por palabra clave.
En el siguiente ejemplo, los parámetros formales a y b deben usar posiciones específicas, c o d pueden ser parámetros posicionales o de palabra clave, mientras que e y f deben ser parámetros de palabra clave:def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
Las siguientes formas de uso son correctas:
f(10, 20, 30, d=40, e=50, f=60)
Las siguientes formas de uso causarán errores:
f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用关键字参数的形式 f(10, 20, 30, 40, 50, f=60) # e 必须使用关键字参数的形式Otras extensiones