Python De Cero a Héroe(四)- Función

¡Acostúmbrate a escribir juntos! Este es el sexto día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

En primer lugar, la definición de la función

La función es:

  • Encapsule los pasos de una cosa y obtenga el resultado final
  • El nombre de la función representa lo que hace la función.
  • El cuerpo de la función es el proceso de implementación de la función.
  • método o función
  • se puede reutilizar

Las funciones se dividen en funciones integradas y funciones personalizadas. Los métodos que pueden ser llamados por cada tipo de datos mencionado anteriormente son funciones integradas. Cuando las funciones integradas no pueden satisfacer nuestras necesidades, necesitamos implementar funciones personalizadas.

Las funciones están definidas por la palabra clave def en Python

def func_name(args..)
    todo
    返回值
复制代码

Ejecutar una función o llamar a una función en forma de nombre de función ()

El retorno del resultado de la función:

  • return es la palabra clave que devuelve el resultado de la función
  • return solo se puede usar dentro del cuerpo de una función
  • return admite la devolución de todos los tipos de datos de Python
  • Una función con un valor devuelto puede asignar el valor devuelto directamente a una variable

Personalizar una función de mayúsculas

def capitalize(data):
    index = 0
    # 保存新字符串
    temp = ''

    for item in data:
        # 第一次循环获取到第一个字符
        if index == 0:
            temp = item.upper()
        else:
            temp += item
        index += 1
    return temp


res = capitalize('hello')
print(res)
复制代码

imagen.png

res = capitalize(123)
print(res)
复制代码

imagen.png

definir una función sin valor de retorno

def message(mes, mes_type):
    new_mes = '[%s]%s' % (mes_type, mes)
    print(new_mes)


message('I am IronMan', 'info')
复制代码

imagen.pngEl resultado devuelto por la función es Ninguno.

res = message('Tomorrow is Friday', 'info')
print('res:%s' % res)
复制代码

imagen.png

La diferencia entre devolución e impresión:

  • print simplemente imprime el objeto, no admite declaraciones de asignación
  • return es el retorno del resultado de la ejecución de la función y también admite declaraciones de asignación

Los parámetros de la función.

Los parámetros de la función deben pasar parámetros, parámetros por defecto y parámetros indeterminados

Parámetros obligatorios y parámetros predeterminados

Los parámetros definidos en la función no tienen valores predeterminados y se informará un error si no se pasan al llamar a la función.

Los parámetros requeridos tienen las siguientes características

  • No hay un valor predeterminado en la función y se informará un error si no se pasa
  • Al definir una función, el parámetro se asigna sin signo igual
  • Al definir una función, no hay un valor predeterminado y los parámetros que deben pasarse cuando se ejecuta la función, y el orden es el mismo que el orden de los parámetros, es decir, los parámetros deben pasarse

Al definir una función, el parámetro definido contiene un valor predeterminado, y se le da un valor predeterminado al parámetro a través de una instrucción de asignación. Si al parámetro predeterminado se le asigna un nuevo valor cuando se llama a la función, la función usará el valor pasado en primero.

def add(a, b, c=3):
    return a + b + c

result = add(1, 2)
print(result)

result = add(1, 2, 6)
print(result)

result = add()
print(result)
复制代码

imagen.png

Parámetros inciertos

Los parámetros indeterminados también son parámetros variadicos:

  • No hay un nombre y un número de parámetro fijos, el nombre del parámetro que se pasará es incierto y la cantidad de parámetros que se pasarán es incierta
  • *args representa la combinación de un número indeterminado de argumentos en una tupla
  • **kwargs significa combinar declaraciones con parámetros y valores predeterminados en un diccionario
def alpha(*args, **kwargs):
    print(args, type(args))
    print(kwargs, type(kwargs))


alpha(1, 2, 3, name='stark', address='NY')
复制代码

imagen.png

def bravo(*args, **kwargs):
    if len(args) > 0:
        for i in args:
            print(i)

    if 'name' in kwargs:
        print(kwargs['name'])

bravo('stark', 'peter', 'banner', 'clint', name='小明', address='上海')
复制代码

imagen.png

Pasar parámetros de tipo tupla y diccionario

tuple_01 = (1,3,5,8,0,11)
dict_01 = {'name': 'stark', 'address':'NY'}

bravo(tuple_01, dict_01)
bravo(*tuple_01, **dict_01)
复制代码

imagen.png

reglas de parámetros

imagen.png

def alpha(x, y = 1):
    print(x + y)

# 使用位置传参
alpha(1, 2)

# 位置传参,只传必填参数
alpha(1)

# 使用关键字传参
alpha(x = 1, y = 2)

# 关键字传参,只传必填参数
alpha(x = 1)

# 关键字传参,不必遵循参数先后顺序
alpha(y = 1, x = 2)
复制代码

imagen.pngSe deben pasar los parámetros requeridos, de lo contrario se informará un error

def bravo(x, y=1, *args):
    print('x={}, y={}, args={}'.format(x, y, args))


tuple_01 = (1, 2)

bravo(1, 2, *tuple_01)

# 这种传参方式会报错
bravo(x=1, y=2, *tuple_01)
复制代码

imagen.pngCuando los parámetros obligatorios se mezclan con parámetros predeterminados y parámetros de tipo tupla, se recomienda utilizar parámetros posicionales

def charlie(x, y=1, **kwargs):
    print('x={}, y={}, kwargs={}'.format(x, y, kwargs))


dict_01 = {'name': 'stark', 'address': 'NY'}

charlie(1, 2, **dict_01)
# 这种传参方式会报错, 位置传参字典必须放到最后
# charlie(**dict_01, 1, 2)


charlie(x=1, y=2, name='stark', address='NY')

charlie(name='stark', address='NY', x=1, y=2)
复制代码

imagen.png

def delta(x, y=1, **kwargs):
    print('x={}, y={}, kwargs={}'.format(x, y, **kwargs))


dict_01 = {'name': 'stark', 'address': 'NY'}
delta(1, 2, **dict_01)
复制代码

imagen.png

El cuerpo de la función no puede agregar * o **

Tipos de parámetros de función

Los tipos de parámetros de función se pueden definir de la siguiente manera

imagen.png

  • Defina el tipo de parámetro por nombre de parámetro: tipo de datos de parámetro
  • Solo disponible después de Python 3.7
  • El tipo de parámetro no está marcado.
def foxtrot(x:str, y:int=1):
    print('x={}, y={}'.format(x, y))

foxtrot('stark')

foxtrot('stark', 2)

foxtrot(1, 'stark')
复制代码

imagen.png

def golf(x:str, y:int=1, *args:int, **kwargs:str):
    print('x={}, y={}, args={}, kwargs={}'.format(x, y, args, kwargs))

golf('stark', 2, 1, 2, name='stark')

golf(1, 3, 2, 3, id=1)
复制代码

imagen.png

Tercero, variables globales y variables locales.

Las variables globales son variables definidas en el bloque de código de nivel superior de una secuencia de comandos de Python. Las variables globales se pueden leer en el cuerpo de la función, pero no se pueden modificar en el cuerpo de la función.

name = 'stark'

def hotel():
    print('函数体内打印出name的值为:', name)

hotel()
print('函数体外打印出name的值为:', name)
复制代码

imagen.png

Las variables definidas en el cuerpo de la función se denominan variables locales. Las variables locales solo se pueden usar en el cuerpo de la función definida actualmente, pero no se pueden usar fuera del cuerpo de la función.

def iris():
    address = 'New York'
    print('函数体内使用局部变量:',address)

iris()
print('函数体外使用局部变量:', address)
复制代码

imagen.png

Use la palabra clave global para modificar variables globales dentro del cuerpo de la función

name = 'stark'

print('函数体外打印出修改前name的值为:', name)
def hotel():
    global name
    name = 'tony stark'
    print('函数体内修改name的值为:', name)

hotel()
print('函数体外再次打印出name的值为:', name)
复制代码

imagen.png

glob solo admite cadenas numéricas, tipos vacíos y tipos booleanos. La palabra clave global no es necesaria para modificar la lista de diccionarios en la clase del cuerpo de la función. No se recomienda usar la palabra clave global en el cuerpo de la función para modificar variables globales.

4. Función recursiva

Una función que se ejecuta repetidamente puede llamarse función recursiva

count = 0
def juliet():
    global count
    count += 1

    if count != 5:
        print('count!=5时重复执行自己,当前count为:', count)
        return juliet()
    else:
        print('count:',count)

juliet()
复制代码

imagen.png

La función recursiva causará un desbordamiento de memoria si no hay condiciones para salir de la recursividad

5. Funciones anónimas

lambda puede definir una función ligera, que se puede eliminar inmediatamente después de su uso

Cómo definir una función anónima sin parámetros

f = lambda: value
f()
复制代码

Cómo definir una función anónima con parámetros

f = lambda x, y: x + y
f(1, 2)
复制代码
kilo = lambda: 1
res = kilo()
print(res)
复制代码

imagen.png

El contenido después de los dos puntos lambda es el contenido devuelto. La palabra clave de retorno se omite de forma predeterminada. Si se agrega la palabra clave de retorno, se informará de un error.

lima = lambda : print('I am IronMan')
lima()
复制代码

imagen.png

mike = lambda x, y: x * y
print(mike(9, 8))
复制代码

imagen.png

Supongo que te gusta

Origin juejin.im/post/7083883116456050719
Recomendado
Clasificación