python 函数

1. 调用:abs(-20)     调用时若传入的参数不对,报错 TypeError   定义:使用def

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

2. 空函数:pass

3. 返回值:可以有多个(其实是一个tuple)

def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

x, y = move(100, 100, 60, math.pi / 6)

4. 参数:

  默认参数(若只传入一位参数,则默认n=2)

def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

  可变参数(传入参数个数不确定,参数作为一个list或tuple传进来)

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

>>> calc(1, 2, 3)
14

 5. 函数本身也可以赋值给变量,即:变量可以指向函数。并可以用该变量调用函数(相当于变量是指针)

>>> f = abs
>>> f(-10)
10

6. map()
map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

7. reduce()
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

8. filter()
filter()接收一个函数和一个序列。把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

9. sorted()
  从小到大排序。

  还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]


10. 返回函数

  返回值是一个函数,形成闭包。

11. 匿名函数

  lambda x: x * x

  关键字lambda表示匿名函数,冒号前面的x表示函数参数。

  匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

12. 装饰器

  在代码运行期间动态增加功能。

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

@log
def now():
    print('2015-3-25')

>>> now()
call now():
2015-3-25

13. 偏函数
  functools.partial帮助我们创建一个偏函数。functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数。

>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64

 

posted @ 2017-10-22 20:08  farmerspring  阅读(140)  评论(0编辑  收藏  举报