Directorio de artículos
05-función \ 01-función uno.pdf
05-función \ 02-función dos.pdf
1. Documentación de funciones
Pensando: Después de definir una función, ¿cómo pueden los programadores escribir programas que puedan activar rápidamente la función de esta función?
Respuesta: Notas
Pensando: si hay mucho código, ¿necesitamos encontrar la ubicación de esta definición de función en mucho código para ver el comentario? ¿Qué sucede si desea
ver el rol de la función de manera más conveniente?
Respuesta: La documentación de la función.
La documentación de la función también se denomina documentación de la función.
1. Gramática
Documentación para definir funciones
def 函数名(参数):
""" 说明⽂文档的位置 """
代码
......
Ver la documentación de la función
help(函数名)
2. Experiencia rápida
def sum_num(a, b):
""" 求和函数 """
return a + b
help(sum_num)
Producción:
Help on function sum_num in module __main__:
sum_num(a, b)
求和函数
2. Cómo modificar variables globales en el cuerpo de la función
Existe el siguiente código:
a = 100
def testA():
print(a) #这里的a应该是全局变量
def testB():
a = 200 #这里的a应该是局部变量
print(a)
testA() # 全局变量的值100
testB() # 局部的变量的值200
print(f'全局变量量a = {a}') # 全局变量量a = 100
Salida del programa:
100
200
全局变量量a = 100
Pensando: ¿Cómo modificar las variables globales dentro del cuerpo de la función testB ()?
Respuesta: use la palabra clave global para declarar
a = 100
def testA():
print(a)
def testB():
# global 关键字声明a是全局变量量
global a
a = 200
print(a)
testA() # 100
testB() # 200
print(f'全局变量量a = {a}') # 全局变量量a = 200
La salida del programa:
100
200
200
全局变量量a = 200
3. La función tiene varios valores de retorno
Pensando: cómo escribir código si una función tiene múltiples valores de retorno
def return_num():
return 1, 2
result = return_num()
print(result) # (1, 2)
La salida del programa:
(1, 2)
Nota:
- Devuelve a, b está escrito, cuando se devuelven varios datos, el valor predeterminado es el tipo de tupla.
- Una lista, tupla o diccionario se puede concatenar después de volver para devolver varios valores.
4. Parámetros de función
1. Parámetros de ubicación
Parámetros posicionales: Al llamar a una función, los parámetros se pasan de acuerdo con la posición del parámetro definido por la función.
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('TOM', 20, '男')
Salida del programa:
您的名字是TOM, 年龄是20, 性别是男
Nota: El orden y el número de parámetros pasados y definidos deben ser coherentes.
2. Parámetros de palabras clave
La llamada a la función está "键=值"
especificada por el formulario. Puede hacer que la función sea más clara y fácil de usar, y también elimina la necesidad de ordenar los parámetros.
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('Rose', age=20, gender='女')
user_info('小明', gender='男', age=16)
Salida del programa:
您的名字是Rose, 年龄是20, 性别是女
您的名字是小明, 年龄是16, 性别是男
3. Parámetros predeterminados
Los parámetros predeterminados también se denominan parámetros predeterminados, que se utilizan para definir funciones y proporcionar valores predeterminados para los parámetros. Al llamar a la función, es posible que no se pasen los valores de los parámetros predeterminados (nota
: todos los parámetros posicionales deben aparecer antes que los parámetros predeterminados). parámetros, incluidas las definiciones de funciones y las llamadas).
Nota: Cuando se llama a la función, si pasa el valor del parámetro predeterminado, modifique el valor del parámetro predeterminado; de lo contrario, use este valor predeterminado.
5. Parámetros de longitud variable
Los parámetros de longitud variable también se denominan parámetros variables. Se utiliza en escenarios en los que no está seguro de cuántos parámetros se pasarán al llamar (no se pueden pasar parámetros).
En este momento, es muy conveniente utilizar los parámetros posicionales de empaquetado o los parámetros de palabras clave de empaquetado para la transferencia de parámetros.
Cuando una función pasa variables, hay dos formas: una es los parámetros posicionales y la otra es los parámetros de palabra clave. De manera similar, también hay dos formas para los parámetros con longitudes variables.
1. Entrega de la ubicación de la parcela
def user_info(*args):
print(args)
user_info('TOM')
user_info('TOM', 20)
user_info('TOM', 20, '男')
La salida del programa:
('TOM',)
('TOM', 20)
('TOM', 20, '男')
Nota: Todos los parámetros pasados serán args
recopilados por variables. Se fusionarán en una tupla ( tuple
) de acuerdo con la posición del parámetro pasado, que es un args
tipo de tupla , que es la transferencia de la posición del paquete.
2. Entrega de la llave del paquete
def user_info(**kwargs):
print(kwargs)
# {'name': 'TOM', 'age': 18, 'id': 110}
user_info(name='TOM')
user_info(name='TOM', age=18)
user_info(name='TOM', age=18, id=110)
La salida del programa:
{
'name': 'TOM'}
{
'name': 'TOM', 'age': 18}
{
'name': 'TOM', 'age': 18, 'id': 110}
En resumen: ya se trate de transferencia de ubicación de paquete o transferencia de palabra clave de paquete, es un proceso de agrupación de un paquete.
6. Desembalaje
1. Desembalaje: tuplas
def return_num():
return 100, 200 #这种形式默认返回的是元组
num1, num2 = return_num()
print(num1) # 100
print(num2) # 200
2. Desembalaje: Diccionario
Desempaquete el diccionario y obtenga la clave del diccionario
dict1 = {
'name': 'TOM', 'age': 18}
a, b = dict1
# 对字典进行拆包,取出来的是字典的key
print(a) # name
print(b) # age
print(dict1[a]) # TOM
print(dict1[b]) # 18
La salida del programa:
name
age
TOM
18
3. Intercambiar valores de variables
a,b = 1,2
print(a)
print(b)
a,b = b,a
print(a)
print(b)
Salida del programa:
1
2
2
1
7. Cita
1. Conoce las referencias
En Python, los valores se pasan por referencia.
Podemos usar id()
para determinar si dos variables se refieren al mismo valor.
Podemos entender el valor id como la identificación de la dirección de esa parte de la memoria.
# 1. int类型
a = 1
b = a
print(b) # 1
print("id(a):", id(a))
print("id(b):", id(b))
a = 2
print(b) # 1,说明int类型为不可变类型
print("id(a):", id(a))
print("id(b):", id(b))
La salida del programa:
1
id(a): 2305065249072
id(b): 2305065249072
1
id(a): 2305065249104
id(b): 2305065249072
El comienzo de ayb son la misma dirección, también puede ver en la impresión que el valor de b es 1, y luego se ejecuta a = 2
después de que el original no está de acuerdo con el valor lógico de b debe ser 1, porque representan el misma pieza de área de memoria. Pero luego, se puede ver en la impresión que las direcciones de ayb son diferentes.
2. Lista de referencias
# 2. 列列表
aa = [10, 20]
bb = aa
print(id(aa))
print(id(bb))
aa.append(30)
print(bb) # [10, 20, 30], 列列表为可变类型
print(id(aa))
print(id(bb))
Salida del programa:
3066822266688
3066822266688
[10, 20, 30]
3066822266688
3066822266688
8. Cotizar como parámetro real
def test1(a):
print(a)
print("before a += a, id(a):", id(a))
a += a
print(a)
print("after a += a,id(a):", id(a))
# int:计算前后id值不不同
b = 100
print('id(b):', id(b))
test1(b)
# 列列表:计算前后id值相同
c = [11, 22]
print('id(c):', id(c))
test1(c)
Salida del programa:
id(b): 2453566281168
100
before a += a, id(a): 2453566281168
200
after a += a,id(a): 2453566284432
id(c): 2453567835904
[11, 22]
before a += a, id(a): 2453567835904
[11, 22, 11, 22]
after a += a,id(a): 2453567835904
La primera es la variable entera b = 100, la dirección de b es 2453566281168
, antes de que se 2453566281168
ejecute a + = a, la dirección de a es , después de la ejecución, la dirección de a se convierte en2453566284432
Pero la lista no cambió la dirección.
9. Tipos mutables e inmutables
El llamado tipo variable y tipo inmutable se refieren a: los datos se pueden modificar directamente, si se pueden modificar directamente, entonces es variable, de lo contrario es inmutable
- Tipo variable
- Lista de columnas
- diccionario
- colocar
- Tipo inmutable
- Entero
- Punto flotante
- Cuerda
- Tupla