python 函数参数与局部变量( 二)
关键字参数:允许你传入0个或任意多个含参数名(命名关键字参数)的参数:
def show(name,age,**key):#**key:任意多个参数 组成字典 即:**:为字典
print('名字:{} 周岁:{} 虚岁:{} 性别:{}'.format(name, age, age + 1,key))
show('李四',18,sey='男',hs = '函数')
如图:
简约形式:
def show(name,age,**key):
print('名字:{} 周岁:{} 虚岁:{} 性别:{}'.format(name, age, age + 1,key))
dict = {'sex':'男','体重':'50'}
show('悠然',18,**dict)# **:把**dict里面的值拷贝出来
如图:
不定长参数(=可变参数) 自动组装
def cala(*nums):# *:为元组
print(type(nums))
sum = 0
for n in nums:
sum += n
return sum
n= (2,3,4,5)
print(cala(*n))#自动解析
如图:
组合参数
def f1(a,b,c=0,*args,**kw):
print('f1 a =',a,'b=',b,'c=',c,'args =',args,'kw =',kw)
f1(1,2,3,4,5,w=7,q=8)
def f1(a,b,c=0,*args,**kw):
print('f1 a =',a,'b=',b,'c=',c,'args =',args,'kw =',kw)
f1(1,2,3,4,5,w=7,q=8)
如图:
def f2(a,b,c=0,*args,d,**kw):
print('f1 a =', a, 'b=', b, 'c=', c,'d =',d ,'args =', args, 'kw =', kw)
t=(1,2,5,6,8,9)
f2(*t,d=4,s=99)
print('f1 a =', a, 'b=', b, 'c=', c,'d =',d ,'args =', args, 'kw =', kw)
t=(1,2,5,6,8,9)
f2(*t,d=4,s=99)
如图:
即:*t: 解析t 把t里面的值逐个赋值
def f2(a,b,c=0,*args,d,**kw):
print('f1 a =', a, 'b=', b, 'c=', c,'d =',d , 'kw =', kw)
kw = {'a1':1,'b':2,'d':3}
f2(6,**kw)
print('f1 a =', a, 'b=', b, 'c=', c,'d =',d , 'kw =', kw)
kw = {'a1':1,'b':2,'d':3}
f2(6,**kw)
如图:
注意:传参数的原则 name=value ,不允许赋 重复值
name=value 如果**kw 实参前没面没有赋相应的实参,则优先匹配形参的 name
总结:要注意定义可变参数和 **kw 关键字参数的语法:
*args是可变参数,args接收的是一个tuple(元组);
**kw是关键字参数,kw接收的是一个dict(字典)。
传参数:*args 会先复制元素数据 再逐个分割args 逐个对应形参列表
如果元素不够(报错!)
**kw 只能对应到形参列表的 **kw
*args是可变参数,args接收的是一个tuple(元组);
**kw是关键字参数,kw接收的是一个dict(字典)。
传参数:*args 会先复制元素数据 再逐个分割args 逐个对应形参列表
如果元素不够(报错!)
**kw 只能对应到形参列表的 **kw
变量作用域
分为全局变量和局部变量:
分为全局变量和局部变量:
1.
g_a = 20
def testl():
a = 10
global g_a #声明调用的是 全局变量
g_a = g_a+a
print(a)
testl()
print(g_a)
g_a = 20
def testl():
a = 10
global g_a #声明调用的是 全局变量
g_a = g_a+a
print(a)
testl()
print(g_a)
如图:
2.
def test2():
global g_a
g_a = g_a+33
test2()
print(g_a)
global g_a
g_a = g_a+33
test2()
print(g_a)
如图:
二.全局变量和局部变量重名时:局部变量优先
c_m=10
def show():
c_m=30 #就近一致
print(c_m)
show()
即:局部变量特 特点===形参
匿名函数:
语法lambda [参数列表]:函数体内部代码
lam = lambda : print('this is a lambda')
lam() #():来调用/执行
案例:加法
he = lambda x,y:x+y
print(he(6,5))
def Youfun(x,y,fun):
print(fun(x,y))
# def myfun(x,y):
# return x+y
# Youfun(10,20,myfun)
更简单:
Youfun(20,30,lambda x,y:x+y)
print(fun(x,y))
# def myfun(x,y):
# return x+y
# Youfun(10,20,myfun)
更简单:
Youfun(20,30,lambda x,y:x+y)
如图:
循环输出:
wu = lambda x:[print(i) for i in range(x)]
wu(9)
wu = lambda x:[print(i) for i in range(x)]
wu(9)
定义函数:
(普通方式)
def func(arg):
return arg + 1
执行函数
result = func(123)
(lambda表达式)
my_lambda --》 lambda arg : arg + 1
执行函数
result = my_lambda(123)
my_lambda --》 lambda arg : arg + 1
执行函数
result = my_lambda(123)
大数据用到的函数:
python map():#逐个匹配 接收两个参数,一个是函数,
一个是序列,map将序列的每个元素传入函数中执行,并把结果作为新的map返回。
yu = list(map(lambda x:x+1,range(10)))
print(yu)
如图:
filter:过滤 即:筛选
案例筛选偶数:
list2 = [1,4,6,7,9,12,17]
filterl = list(filter(lambda x:x%2==0,list2))
print(type(filterl))
print(filterl)
案例筛选偶数:
list2 = [1,4,6,7,9,12,17]
filterl = list(filter(lambda x:x%2==0,list2))
print(type(filterl))
print(filterl)
如图:
利于filter(),可以完成很多有用的功能,例如 删除 None 或者空字符串
strs = [None,'','','df','丫丫','啦啦']
''''
过程:
def isNone(s):
return s and len(s.strip())>0
'''
strsl = list(filter(lambda s:s and len(s.strip())>0,strs))
print(strsl)
如图:
请利用filter()过滤出1~100中平方根是整数的数:
import math
filter1 = list(filter(lambda x:math.sqrt(x)%1==0,range(1,101)))
print(filter1)
如图:
reduce:求和 即:# 接收的参数和 map()类似,
一个函数 f,一个list,但行为和 map()不同,
reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,
并返回最终结果值。
一个函数 f,一个list,但行为和 map()不同,
reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,
并返回最终结果值。
import math,functools as f #as :起别名
li = [11,22,33,44,55]
# 把得到的元素的前两个进行运算 得到的值,在和第三个进行运算
red= f.reduce(lambda x,y:x+y,li,)
print(red)
li = [11,22,33,44,55]
# 把得到的元素的前两个进行运算 得到的值,在和第三个进行运算
red= f.reduce(lambda x,y:x+y,li,)
print(red)
如图:
python:中的内置求和函数 :sum
print(sum(li))
把值变负数:
red= f.reduce(lambda x,y:x-y,li,0)
print(red)
如图:
自定义排序: 复制数据不改变原数据 只从新排序
r = [1,5,2,8,3,9,4]
new_r = sorted(r)#默认升序
new_r = sorted(r)#默认升序
print(new_r)
print(r)
print(r)
如图:
new_r = sorted(r,reverse=True)#降序
print(new_r)
print(r)
print(r)
如图:
排序列表:
L = [('DFG', 75), ('ADF', 92), ('Bart', 66), ('Lisa', 88)]
n_l = sorted(L)
print(n_l)
是以ASCII码比较
如图:
是以ASCII码比较
如图:
L = [('55', 75), ('44', 92), ('Bart', 66), ('Lisa', 88)]
这个时候就得用指定key的方式排序:
n_l = sorted(L,key=lambda x:x[1],)
print(n_l)
如图:
完毕!