关于函数
# #1.解包写法
# list=[1,2,3,'a']
# tuple=(1,2,3,'a')
# x,y,z,w=list
# a,b,c,d=tuple
# print(x,y,z,w)
# print(a,b,c,d)
#********************************************
#解包运算符 *
# def f(a,b,c):
# print(a,b,c)
# list=[1,2,3]
#
# f(*list)#* 表示将list解包,传参。个数需要一样,调用函数的时候,*表示解包
#****************************************
#
# #2.封包
# x=1,2,3,'a'
# print(x,type(x)) #x是一个元祖
#def foo1(x,*y):#函数体里面的参数前面的*表示封包,定义函数的时候,*表示封包
return x,y
#print(foo1(1,2,3,4,5))#封包后的返回值也是一个元祖
#***************************************
# #3.函数返回多个值,是一个元祖
# def returnValue():
# return 1,2,3,'a'
# x=returnValue()
# print(type(x),x)
#***********************************
# #4.交换位置
# def f(x,y):
# x,y=y,x
# return x,y
# a=f(1,2)
# print(a)#实际上是一个封包解包的过程
#**********************************************
#5.利用封包解包赋值,比如去掉最高和最低分
# list=[87,44,66,32,87,53,15,97,67]
# list.sort()#先排序,sort()方法没有返回新的列表,改变了原来列表的顺序
# first,*list,last=list
# print(list)
#*****************************************
#6.关于函数传参
# def f(*agrs,**dicts):#一个*表示元祖,两个*表示字典,这里表示参数任意
# print(agrs)
# print(dicts)
# f(1,2,'x',a=1,b=2)
#***************************************************************
#7.关于全局变量与声明
# x=1
# y=1
# def f():
# global x#声明x是全局变量,一旦执行f(),函数外部x的值就发生改变
# x=5
# y=5
# print(x,y)
# f()
# print(x,y)#y没有被声明,y的值没被函数改变。因为def定义的函数不能改变不可变类型变量的值,
# # 如果传入的参数是可变类型参数,则函数可以改变他的值
#********************************************************************************
# #8.嵌套函数
# def outer():
# num=1
# def inner():
# nonlocal num#关键字声明
# num=100
# print(num)
# inner()#外部函数可以直接调用内部函数
# print(num)#有了nonlocal关键字声明之后外部函数的num也会变成100,如果没有声明还是1
# outer()
#*******************************************
# def outer(x,y):
# def inner():
# return x+y
# return inner()#外部函数的返回值是内部函数对象,调用外部函数的时候相当于执行内部函数
# a=outer(2,3)
# print(a)
#
def outer():
def inner1(x):
return x
def inner2(x,y):
return x*y
return inner1,inner2 #也可以返回多个内部函数对象
a=outer()#a是一个元祖,元素就是内函数对象
print(type(a))
print(a[0](123))
print(a[1](2,3))
#9.lambada函数
#格式 lambda 参数列表:表达式
# z=lambda x,y:x+y
#
# print(z(2,1))