python_学习笔记0829
2015-08-29 20:57
549 查看
今天是二零一伍年八月二十九日
1、在python中,函数名其实也是一个变量。比如我可以把一个变量的值修改成函数名。当然,我们还有更能体现他是变量的方法:
我们尝试把一个其他类型的值赋值给我们的函数名,没想到它接收了。那么就更加说明我们的函数名是一种变量,而且当我们再次调用这个函数的时候,原来内容就被我们的-10覆盖了。
2、我们之前已经看过了map等函数,他们是一种可以接受函数作为变量的函数。这样的函数往往被称为高阶函数,而我们自己也可以写这样的函数:
3、关于map函数,他的一个参数是函数,另外一个是可迭代对象。
4、把list变成一个数字:
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]
那么重点来了,我廖雪峰大神写了一个简单的程序,我们可以来研究一下:
首先,我廖大的这个句柄是用来筛选出list中有意义的字符串。我们先关注我们要筛除掉的内容,None、空字符和空格。首先我们要了解,空字符和None的返回结果都是false。这时我们想要筛选掉空格,就需要strip函数,strip在接受空格字符以后返回的也是一个空字符,那么它的布尔值也是false了。于是,按照这个思路,我们的return 就是像廖大那样了。
6、然后廖大还用python的filter函数演示了产生素数序列的方法。首先我们要知道,生成器的序列是惰性的,这一点也就为我们尝试得到素数序列提供了可能性。要知道,非惰性变量是无法表示无限对象的。我们在产生素数方面使用的是埃拉托色尼选筛法,我们先要生成一个对象序列供我们筛选:
>>> def _odd_iter():
... n = 1
... while True:
... n = n + 2
... yield n
然后我们需要建立函数,要知道,底层函数往往比高级函数更重要:
我们原本的对象就是一个生成器,然后我们这个函数所返回的也是一个函数。然后就尝试去用埃式筛法得到我们素数序列:
我们的primes是一个惰性无限数列,当然你可以打印其中一部分,毕竟我们得到的是一个生成器:
不得不提的是,其实我们的埃式筛法也是用了容斥原理的思想。
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动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法