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 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)
如图:

即:*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)
如图:

注意:传参数的原则 name=value ,不允许赋 重复值
 name=value 如果**kw 实参前没面没有赋相应的实参,则优先匹配形参的 name
总结:要注意定义可变参数和 **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)
如图:

2.
def test2():
    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)
如图:


循环输出:
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)

大数据用到的函数:

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)
如图:

利于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,
并返回最终结果值。
import  math,functools as f #as :起别名
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)#默认升序
print(new_r)
print(r)
 
  
如图:

new_r = sorted(r,reverse=True)#降序
print(new_r)
print(r)
如图:

排序列表:
L = [('DFG', 75), ('ADF', 92), ('Bart', 66), ('Lisa', 88)]
n_l = sorted(L)
print(n_l)
是以ASCII码比较
如图:


L = [('55', 75), ('44', 92), ('Bart', 66), ('Lisa', 88)]
这个时候就得用指定key的方式排序:
n_l = sorted(L,key=lambda x:x[1],)
print(n_l)
如图:


完毕!

猜你喜欢

转载自blog.csdn.net/angelayouran/article/details/80358939