初步接触了以下几种高阶函数,还用的不是很熟练。
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 fs
f1, 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 fs
f1, 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都不能用复制 我都写了转载。。