位置参数、关键字参数(forever在后面)
1. Namespaces, Scope, and Local Functions(命名空间,作用范围,局部函数)
global关键字
2. Returning Multiple Values(返回多个值)
原理:其实函数还是返回了一个object,即tuple,然后这个tuple被解压给了result variables.
3. Functions Are Objects(函数是对象)
哇塞python是真滴牛批。
函数可以当作参数传进去函数里面,在for loop里面执行。详情看例子:
对states进行数据清洗。
import re #正则表达式
states = [' Alabama ', 'Georgia!', 'Georgia', 'georgia',
'FlOrIda', 'south carolina##', 'West virginia?']
def remove_punctuation(value):
return re.sub('[!#?]', '', value)
dataclean_ops = [str.strip, remove_punctuation, str.title]#把一系列操作放在一个list里
def data_cleaning(strings, ops):
result = []
for value in strings:
for function in ops:
value = function(value) #对每一个value进行每一个function操作
result.append(value)
return result
data_cleaning(states, dataclean_ops)
#result:
#['Alabama',
#'Georgia',
#'Georgia',
#'Georgia',
#'Florida',
#'South Carolina',
#'West Virginia']
一个更函数化的方式能让你方便得在一个高等级上转变string。
可以把函数当做其他函数的参数,比如用内建的map函数,这个map函数能把一个函数用于一个序列上
for x in map(remove_punctuation, states):
print(x)
#result: Alabama
#Georgia
#Georgia
#georgia
#FlOrIda
#south carolina
#West virginia
4. Anonymous (Lambda) Functions(匿名函数,lambda函数)
NEED TO LEARN MORE
5. Currying: Partial Argument Application(柯里化:局部参数应用)
6. Generators(生成器)
歪楼:
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
iter()创建迭代器,next()返回迭代器的下一个项目。
一个生成器能产生object给python 解释器,当遇到for loop这样的情景时。大部分方法,除了list之类的object,都能接受迭代器。比如内建的函数min, max, sum,或是类型构造器 list, tuple:
states_iter = iter(states)
iter(states)
#result: <dict_keyiterator at 0x104c92ef8>
list(states_iter)
#result: [' Alabama ',
# 'Georgia!',
# 'Georgia',
# 'georgia',
# 'FlOrIda',
# 'south carolina##',
# 'West virginia?']
yield:
yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
记住这里还有一部分没看完