您的位置:首页 > 编程语言 > Python开发

python_学习笔记0829

2015-08-29 20:57 549 查看
今天是二零一伍年八月二十九日

1、在python中,函数名其实也是一个变量。比如我可以把一个变量的值修改成函数名。当然,我们还有更能体现他是变量的方法:

>>> abs(-10)
10
>>> abs = -10
>>> abs
-10
>>> abs(-10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable


我们尝试把一个其他类型的值赋值给我们的函数名,没想到它接收了。那么就更加说明我们的函数名是一种变量,而且当我们再次调用这个函数的时候,原来内容就被我们的-10覆盖了。

2、我们之前已经看过了map等函数,他们是一种可以接受函数作为变量的函数。这样的函数往往被称为高阶函数,而我们自己也可以写这样的函数:

>>> def add( x , y , f):
...     return f(x) + f(y)
...
>>> add(-1 , 2 , abs)
3


3、关于map函数,他的一个参数是函数,另外一个是可迭代对象。

4、把list变成一个数字:

>>> from functools import reduce
>>> def fn(x,y):
...     return 10 * x + y
>>> reduce (fn , [1 , 3  , 5 , 7 ,9])
13579


5、在python中的内建函数filter提供序列筛选功能,它所需要的参数和map是一样的,一个是序列(可以是元组),另外一个是函数。filter的工作是使用函数遍历每一个序列的内容,将返还值为True的元素提取出来组成filter。

>>> def is_odd(n):
... return n % 2 == 1
>>> list(filter(is_odd , [1,2,3,4,5,6]))
[1, 3, 5]
>>> list(filter(is_odd , (1,2,3,4,5,6)))
[1, 3, 5]
那么重点来了,我廖雪峰大神写了一个简单的程序,我们可以来研究一下:
def not_empty(s):
return s and s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))

首先,我廖大的这个句柄是用来筛选出list中有意义的字符串。我们先关注我们要筛除掉的内容,None、空字符和空格。首先我们要了解,空字符和None的返回结果都是false。这时我们想要筛选掉空格,就需要strip函数,strip在接受空格字符以后返回的也是一个空字符,那么它的布尔值也是false了。于是,按照这个思路,我们的return 就是像廖大那样了。

6、然后廖大还用python的filter函数演示了产生素数序列的方法。首先我们要知道,生成器的序列是惰性的,这一点也就为我们尝试得到素数序列提供了可能性。要知道,非惰性变量是无法表示无限对象的。我们在产生素数方面使用的是埃拉托色尼选筛法,我们先要生成一个对象序列供我们筛选:

>>> def _odd_iter():
... n = 1
... while True:
... n = n + 2
... yield n


然后我们需要建立函数,要知道,底层函数往往比高级函数更重要:

>>> def _not_div(n):
...     return lambda x : x % n > 0


我们原本的对象就是一个生成器,然后我们这个函数所返回的也是一个函数。然后就尝试去用埃式筛法得到我们素数序列:
>>> def primes():
...     yield 2
...     it = _odd_iter()
...     while True:
...             n = next(it)
...             yield n
...             it = filter(_not_div(n) , it)


我们的primes是一个惰性无限数列,当然你可以打印其中一部分,毕竟我们得到的是一个生成器:
>>> for n in primes():
...    if n < 1000:
...        print(n)
...    else:
...        break


不得不提的是,其实我们的埃式筛法也是用了容斥原理的思想。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 学习笔记 新手