函数式编程与高阶函数
来源:互联网 发布:淘宝的服务器有多大 编辑:程序博客网 时间:2024/05/18 00:39
初步接触了以下几种高阶函数,还用的不是很熟练。
1、map(): 这个函数接受两个参数: ‘map(function, sequence)’ 第一个必需参数是一个编辑好的函数,第二个参数是一个序列,map()的作用是按照序列的顺序依次对元素使用function。个人理解就类似于批处理吧,比如由一大堆名字组成的序列,其中没有规范的使用大小写,那我们可以定义一个修改函数,并依次对列表元素使用。以下是廖雪峰大大布置的作业:
思路:1、用map()函数来处理列表。所以
map(func, ['aDam', 'BerT', 'JERRY'])
2、定义func函数,输入一个字符串,输出成为首字母大写,其余小写的字符串。
3、使用lower()函数,在此我遇到了一个错误,以为lower()还属于半自动化的函数,比如一个指令小写一个字母,因此我用了迭代的方法去使用这个函数:
def func(word): for s in word: return s.lower()
结果:
>>>func('Adam')'a'
一时间没想通,后来在交互式界面中发现lower()可以直接将一整个字符串改写为小写。囧
于是修改后的函数:
def func(word): return word.lower()
这样就能得到全是小写的string。用map函数套用上,得到三个小写的string,想再定义一个函数,使所有字符串的首字母大写。
想到字符串也是一个列表,用string[0]可以定位到第一个字母,但是回想起之前所学的slice操作,发现可以减少不少步骤:
def func(s): return s[0].upper() + s[1:].lower()
于是这样就在一行里完成了这个函数。(其实这一步参考了大家的想法。。sad。。思维还是比较死板的,也反映出了基础打得不扎实)
接着套用map函数就可以完成作业了。
4、质数的判定:伪代码:
n是否是大于1 的正整数--T/F
大于1则生成2~n-1的列表a
迭代,若在a中有一个数使得n能被整除,则不是质数。
def is_prime(x): if type(x) != int or x <= 1: return False else: for n in range(2, x): if (x % n) == 0: return False break else: return True
def sum(*args): #输入多个变量 ax = 0 for n in args: #迭代输入的变量 ax = ax + n #依次相加求和 return ax
这里的返回值是ax 是一个整数,代表着前面*args的总和
def lazy_sum(*args): def sum(): ax = 0 for n in args: ax = ax + n return ax return sum
到这里已经开始有点迷惑了 来一步步分析:
def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fsf1, f2, f3 = count()
第一步 定义count()函数, 调用函数时,内部先创建一个空列表,接着生成一个从1-3的列表进行迭代
再来一波: 避免在返回的函数里(f())引用循环变量,或者后续会发生的变量,比如刚才的i*i
def count(): fs = [] for i in range(1, 4): def f(j): def g(): return j*j return g fs.append(f(i)) return fsf1, f2, f3 = count()
第一步 定义count函数,函数中有一个空列表fs 生成1-3的列表。
第二部 定义f函数,参数是j ,在f函数内部定义函数g 返回j*j, 再将此函数返回f函数,此时函数f(j)返回一个函数j*j(g).
第三步 向fs列表中添加 参数是i的f(), 此时j=i 代入运算返回 g1=i*i(此时i = 1) 所以g1 = 1*1
第四步 向fs列表中添加 参数是i的f(), 此时j=i 带入运算返回 g2 = i * i (此时 i=2 )所以g2 = 2 * 2
第五步 同上
第六步 迭代完成后fs中有三个f() 分别为g1 g2 g3 要再次进行调用才能得出结果。分别赋值给f123 3个变量
第七步 运行 得到结果 不受i的影响,因为j取值是i是固定的 随后i改变时j不变 因此得以保存
弄了这么多还没有触及到闭包 囧。。。
教程说 “在外函数中定义了内函数,并且 内部函数可以引用外部函数的参数和局部变量。当外层函数返回内层函数时,相关参数和变量都保存在返回的函数(内函数)中,这种称为闭包的程序结构 巴拉巴拉” 似乎懂一点,
先拿它的作用来凑个数 [转载 来自 ] what? 为啥连超链接和下面的url都不能用复制 我都写了转载。。
- 函数式编程与高阶函数
- 高阶函数式编程
- 5函数式编程---高阶函数
- Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏
- python 学习笔记---函数式编程之高阶函数
- 8.函数式编程和高阶函数
- python 函数式编程和高阶函数的概念
- C#函数式编程之标准高阶函数
- python 函数式编程 一些高阶函数的使用
- Python函数式编程之高阶函数
- C#函数式编程之标准高阶函数
- 【Python学习日记】函数式编程 之 高阶函数
- 【Python学习笔记】函数式编程:高阶函数
- 【Python学习笔记】函数式编程:高阶函数filter
- 【Python学习笔记】函数式编程:高阶函数sorted
- Learning Python 012 函数式编程 1 高阶函数
- Python (九)函数式编程,高阶函数
- 5函数式编程---高阶函数sorted()
- 推广配置表
- 初学Python,从认识Python、安装Python开始
- 遍历父物体下所有子物体的几种方式
- 无聊写个手势插件
- 矩阵
- 函数式编程与高阶函数
- 实现FreeBSD 与Linux Mint 多系统共存的安装
- IPython 交互式调试器
- Windows:Windows桌面显示计算机、回收站、用户文件等
- AndroidStudio将logcat打印到指定文件
- 【学习相关】:研究生报考简单资料整理,会更新
- Android 拨打电话 发短信
- adb命令之:手机与电脑文件之间的粘贴复制
- SURF特征点检测(阈值和绘点方式均可通过滚动条调节)