python高级特性+函数式编程

函数参数

1.可变参数

def print_args(*args):
	print(args)
print_args(1,2,3,4)
#结果:1 2 3 4

2.关键字参数(两种方法)

def print_args(**args):
	print(args)
print_args(name='adam',age=12,ID = '123456')
#结果:{'name': 'adam', 'age': 12, 'ID': '123456'}

_args = {'name': 'adam', 'age': 12, 'ID': '123456'}
print_args(**_args)
#结果:{'name': 'adam', 'age': 12, 'ID': '123456'}
迭代器

1.利用for迭代(可迭代:)任何可以迭代的对象(srt,dict,list)

_args = {'name': 'adam', 'age': 12, 'ID': '123456'}
for i in _args:
    print(i)
结果:
name
age
ID

2.dict迭代

_args.items()
结果:dict_items([('name', 'adam'), ('age', 12), ('ID', '123456')])

_args.keys()
结果:dict_keys(['name', 'age', 'ID'])

_args.values()
结果:dict_values(['adam', 12, '123456'])

3.迭代处理(enumerate)

>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C

4.生成器(yield)

def triangles():
    L=[1]
    while True:
        yield L
        L = [1]+[L[x]+L[x+1] for x in range(len(L)-1)]+[1]
for x,y in enumerate(g()):
     if(x==10):
         break
     print(y)
结果:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
L = [x for x in range(10)]
print(L)
结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)
... 
0
1
4
9
16
25
36
49
64
81
map/reduce(被移除,目前位于:from functools import reduce)

1.map接受两个参数(function,iter),将可迭代的对象的每一个迭代元素,生成新的元素。

L= [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
def up(x):
    return x+1
list(map(up,L))
结果:[2, 10, 37, 85, 127, 127, 85, 37, 10, 2]

2.reduce(function,iter)作用类似于求和,以指定的函数方法进行求和。

filter 过滤元素
L= [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
def check(x):
	return x%2==0
list(filter(check,L))
结果:[36, 84, 126, 126, 84, 36]
sorted排序
#reverse=True是否逆序,keys指定用于排序的值
X = {"name":12,"HH":1,"AA":15,"BB":5,"CC":3}
def AB(x):
     return x[-1]
sorted(X.items(),key=AB)
结果:[('HH', 1), ('CC', 3), ('BB', 5), ('name', 12), ('AA', 15)]
返回函数

将函数作为返回值。

def count():
    def f(j):
        def g():
            return j*j
        return g
    fs = []
    for i in range(1, 4):
        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
    return fs
>>> f1, f2, f3 = count()
>>> f1()
1
>>> f2()
4
>>> f3()
9

可以在闭包函数中使用nonlocal 修饰全局变量取消其全局性。
关于global,nonlocal,local的使用

lambda匿名函数
list(filter(lambda n:n%2, range(1, 20)))
结果:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
装饰器

动态扩展已经定义好的函数,简单来说就是函数嵌套函数。

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

上面的代码就对func函数进行的装饰(扩展),返回为扩展后的函数方法。

偏函数

小知识:int(str,base=?),可以将str按特定进制(base)转换为的整数。
类似于装饰器,可以说是其的简化版,其可以降低函数的调用难度
示例

def int2(x, base=2):
    return int(x, base)
>>> int2('1000000')
64
>>> int2('1010101')
85
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值