python-06

参数
默认参数
:参数有默认值,如果不传参则使用默认值
必需参数:须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
可变参数
1:最好写在最后,因为它将从它开始直到最后的所有元素组成一个元组
2:可以传递一个元组或列表,但是它将此元组或列表组成元组的第一个元素
3:可以在传参时加一个*,此时是将元组或列表中的元素取出来,传递给args,args将所有元素组成元祖
def test(a,b,c=0,*args):
    print(args)
    for i in args:
        for j in i:
            print(j)
    print(a,b,c)
tuples=['a','b','c']
test(1,2,33,*tuples)
结果:
('a', 'b', 'c')
a
b
c
1 2 33

关键字参数:
1:只接收键值对的形式
2:以  参数=值  的形式传参
3:如果值是一个字典,传参时加上**
def testkw(a,b,**kw):
    print(kw)
    print(a,b)
dicts={'c':3,'d':4}
testkw(1,2,**dicts)
结果:
{'c': 3, 'd': 4}
1 2


变量的作用域
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了。
a,b=1,2
def test():
    global a
    #表示在此函数中使用全局变量,如果没有此声明,下面的变量a就是局部变量
    a=10
    print(a,b)
def test2():
    print(a)
#调用函数:局部变量优先
test()
test2()
结果:
10 2
10


匿名函数
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
1:lambda 只是一个表达式,函数体比 def 简单很多。
2:lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
3:lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
4:虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
sum=lambda arg1,arg2:arg1+arg2;
print(sum(10,20))
#lambda表达式作为参数传递
def add(a,b,fun):
    print(fun(a,b))
add(11,22,lambda arg1,arg2:arg1+arg2)
结果:
30
33


filter(函数,可迭代的对象)表示如果if:过滤函数,满足lambda的条件即可返回,可强制转换成列表
map(函数,可迭代的对象):返回lambda后面表达式的值
foo=[2,15,48,65,94]
print(list(filter(lambda x:x%3==0,foo)))
print(list(map(lambda x:x*2+10,foo)))
from functools import reduce
print(reduce(lambda x,y:x+y,foo))
结果:
[15, 48]
[14, 40, 106, 140, 198]
224


上面filter例子可以写成:print([x for x in foo if x%3==0])
上面map例子可以写成:print([x*2+10 for x in foo])


例子:
1-10每个数的平方:print([x**2 for x in range(1,11)])
1-100的偶数:print([x for x in range(1,101) if x%2==0])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值