¿Qué es una función
ps: una función es un contenedor para contener código
Un contenedor con una función determinada ------ "Función
, el proceso de preparación de la herramienta primero -------" La definición de la función,
solo úsela cuando se encuentre con el escenario de la aplicación ----- - "La llamada de la función
Entonces, el principio de uso de la función:
definir primero y
luego llamar
Por qué utilizar funciones:
resuelva los siguientes problemas:
1. La organización del código no es clara y la legibilidad es deficiente
2. La escalabilidad es deficiente
Cómo utilizar las funciones
定义的语法:
def函数名(参数1,参数2,参数3,....):
"函数的文档注释”
代码1
代码2
代码3
return 返回值
Definir función
发生的事情
1.申请内存空间把函数体代码放进去
2.将函数内存地址绑定给函数名
强调:定义的函数只检测语法,不执行代码
def login(): #login = 函数的内存地址
print(111)
print(222)
print(333)
print(login) #<function login at 0x00EB8268>
x=10 #x = 10的内存地址
print(x) #打印出来的是x的值,python解释器会自动把变量名的值取出来返回给我们
本质上函数民跟变量名都是一样的,不过函数定义后我们主要是为了调用函数的功能,运行代码
变量名定义后,我们主要是想通过变量名取出变量值
Funciones de llamada:
发生的事情:
先通过函数名定位到函数的内存地址
函数的内存地址()-》触发函数体代码的运行
强调:调用函数才会执行函数体代码
longin 函数名指向函数的内存地址,()指向执行函数的代码
Definir las tres formas de
funciones sin parámetros
def func():
print(“xxxx”)
func()
函数体代码不需要外部传值的是无参函数
案例1:
def say():
print("===========")
print("welcome to here")
print("=========")
say()
案例2:
def login():
name=input("username").strip()
pwd=input("password").strip()
if name =="nana"and pwd=="123":
print("pass")
else:
print("fail")
Función de parámetro
def func(x):
print(x)
func(1111)
函数体代码需要外部传值的是有参函数
案例1:
def max2(x,y):
if x>y:
print(x)
else:
print(y)
max2(10,20)
Función vacía
def login():
pass
作用:刚开始写函数的时候用来搭函数的架构
Tres formas de funciones de llamada
语句
len(“hello”)
表达式
res=len(“hello”)*10
print(res) # 50
可以当做参数传给另一个函数
print(len(“hello”)) #5
有返回值的一般都会在表达式里面做赋值运算
没有返回值的一般都会直接调一下语句形式
Los parámetros de la función se dividen en dos categorías:
Parámetros formales : los parámetros especificados entre paréntesis durante la fase de definición de la función se denominan parámetros formales, o parámetros formales para abreviar: "Nombre de la variable y
parámetros reales : pasados entre paréntesis durante la fase de llamada de la función Valor, llamado parámetro actual, referido como parámetro actual - "valor variable
形参与实参的关系是:
在调用函数时,实参值会绑定给形参名,在函数调用完毕后解除绑定
def func(x,y): #形参
# x = 111
# y = 222
print(x,y)
m=111
n=222
func(m,n) #实参
Clase de parámetro formal
Parámetros posicionales : al definir una función, los nombres de variables definidos en orden de izquierda a derecha se denominan parámetros posicionales
特点:每次调用,必须被赋值
def func(x,y):
print(x)
print(y)
func(1,2,3) #报错,值多了一个
func(1) #报错,少了一个值
Parámetro predeterminado : cuando se define la función, un valor ya está asignado a un parámetro, que se denomina parámetro predeterminado
特点:调用函数时,可以不用为其赋值
def func(name,age=18):
print(name)
print(age)
func(“nana”)
func(“nana”,19) #打印结果为nana 19 默认参数可以为其赋值,也可以不为其赋值
注意:可以混用位置形参与默认形参,但是
1.位置形参必须在前面
2.默认形参的值通常时不可变类型
3.默认形参的值时在函数定义阶段赋值的
def func(age=18,name):
print(name)
print(age)
案例1:
def func(name, hobby, hobbies=None):
if hobbies is None:
hobbies = []
hobbies.append(hobby)
print("%s的爱好是%s" % (name, hobbies))
func("nana", "read") #nana的爱好是['read']
func("tom", "play") #tom的爱好是['play']
func("jack", "music") #jack的爱好是['music']
func("lili", "eat", ["moive"]) #lili的爱好是['moive', 'eat']
案例2:
m = 111
def func(x, y, z=m):
print(x) #x=1
print(y) # y=2
print(z) #z=111 默认形参的值时在函数定义阶段赋值的
m = 666
func(1, 2)
Serie de parámetros real
Posición de los parámetros reales : al llamar a la función, los valores pasados en orden de izquierda a derecha se denominan posición de los parámetros reales.
特点:按照位置为形参赋值,一一对应
def func(name,age):
print(name)
print(age)
func(“nana”,18)
Argumento de palabra clave : al llamar a la función, pase el valor en forma de clave = valor, que se denomina argumento de palabra clave
特点:可以打乱顺序,但是依然能够指名道姓的为指定的形参赋值
def func(name,age):
print(name)
print(age)
func(age=18,name="nana")
Preste atención cuando el puesto esté realmente involucrado en el uso mixto de palabras clave y argumentos.
1、位置实参必须在关键字实参的前面
2、不能为同一形参重复赋值
案例1:
def func(name,age):
print(name)
print(age)
func("egon",age=18)
func(age=18,"egon") # 语法错误,位置实参必须在关键字实参的前面
案例2:
def foo(x,y,z):
pass
foo(1,y=2,3) # y=2关键字形参在位置形参3的前面,所以报错
foo(1,y=2,z=3,x=4) # 重复赋值x,所以报错
Serie de longitud variable
可变长参数指的是在调用函数时,传入的实参个数不固定,对应着必须有特殊形式的形参来接收溢出的实参
实参无非分为两种形式
溢出的位置实参------->*
溢出的位置关键字实参--------->**
* 与**在形参中应用是一种汇总行为
1.*在形参中的应用,*会溢出的位置实参合并成一个元组,然后赋值给紧跟其后的那个形参名
def func(x, *args): # args=(2,3,4,5)
print(x) #x=1
print(args)
func(1, 2, 3, 4, 5)
案例:
用 *args 求和
def my_sum(*args):
res=0
for i in args:
res += i
print(res)
my_sum(1,2)
** Aplicación en parámetros formales
**会将溢出的关键字实参合并成一个字典,然后赋值给紧跟其后的那个形参名
def func(x, **kargs): #kwargs={
"a":2,"c":4,"b":3}
print(x)
print(**kargs)
func(1, a=2, b=3, c=4)
*与**在实参中是一种打散行为
*在实参中的应用:*后可以跟可以被for循环遍历的任意类型,*会将紧跟其后的那个值打散或位置实参
def func(x,y,z):
print(x)
print(y)
print(z)
func([11,22,33]) #列表为一个值,会报错
func(*[11,22,33]) #X=11 Y=22 Z=33
func(*"hello") #字符串值过多,报错
func(*{
"k1":111,"k2":222,"k3":555}) #func("k1","k2","k3")
** Aplicación en parámetros reales
**只能跟字典类型,**会将字典打散或关键字实参
def func(x,y,z):
print(x)
print(y)
print(z)
func(**{
"x":111,"y":222,"z":333}) #func(111,222,333)
例:
def index(x,y,z):
print(x,y,z)
例:
def index(x,y,z):
print(x,y,z)
def wrapper(*args,**kwargs): # args=(1,2,3,4,5,6) kwargs={
"a":1,"b":2,"c":3}
index(*args,**kwargs) # index(*(1,2,3,4,5,6),**{
"a":1,"b":2,"c":3})
index(1,2,3,4,5,6,a=1,b=2,c=3)
wrapper(1,2,3,4,5,6,a=1,b=2,c=3)
wrapper(1,y=2,z=3)
了解:命名关键字形参: 在*与**中间的形参称之为命名关键字形参
特点: 必须按照key=value的形式传值
def func(x,m=333,*args,y=222,z,**kwargs):
print(x)
print(args)
print(y)
print(z)
print(kwargs)
func(1,2,3,z=4,a=1,b=2,c=3)
func(1,2,3,4,5,6,7)
detalles de devolución
def max2(x, y):
if x > y:
return x
else:
return y
res = max2(10, 30)
print(res * 12) #360
函数可以有多个return,但只要执行依次return,整个函数就立即结束,并且return后的值当做本次调用的结果返回
def func():
print("=======") #只能反馈值====== ,111
return 111
print("******")
return 222
print("-----------")
return 333
res = func()
print(res)
return后的返回值有三种情况
return值:返回的就是一个值
return 值1 ,值2 ,值3:返回的是一个元组
def func():
return 111,"xxx",[22,33]
res=func()
print(res) #(111, 'xxx', [22, 33])
函数内可以没有return,或者是return None,或者return,默认返回None
def func():
pass
res = func()
print(res) #None
执行完函数功能之后想拿函数的值做进一步的出来的时候,需要用到返回值用return