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

Python语言精要---下

2016-08-25 07:24 176 查看
函数:可以返回多个值,其实函数是返回一个对象,就是元组,元组中的元素被拆分到各个结果变量中了
匿名函数:lambda函数,仅仅由单条语句组成,结果就是返回值这种函数没有提供名称属性闭包:closure就是其他函数动态生成并返回的函数被返回的函数可以访问其创建者的局部命名空间
def make_closure(a):

def closure():

print("I know the secret: %d" % a)

return closure()

closure = make_closure(5)

[/code]和标准函数的区别就是,即使创建者已经执行完成,闭包仍然可以访问创建者的局部命名空间#I know the secret: 5
扩展调用语法:
def say_hello_then_call_f(f,*args,**kwargs):

print("arg is " + str(args))

print("kwargs is %s "% kwargs)

print("hello now i am gonna to call %s" % f)

return f(*args,**kwargs)

def g(x,y,z = 1):

return (x+y) / z

say_hello_then_call_f(g,1,2,z = 5)

print(say_hello_then_call_f(g,1,2,z = 5))

print(g(1,2,z = 5))

[/code] 柯里化:通过部分参数应用从现有函数派生出来的新函数技术
def add_numbers(x,y):

return x+y

add_five = lambda y: add_numbers(5, y)

print(add_five(2))

#这里的add_numbers的第二个参数是柯里化的,就是定义了一个可以调用现有函数的新函数而已

#还可以使用下面的模块函数简化这个过程

from functools import partial

add_five_ = partial(add_numbers,5)

print(add_five_(9))

[/code]在pandas和时间序列中,可以用这个技术创建专门的数据序列转换函数
#计算时间序列x的60日移动平均

ma60 = lambda x:pandas.rolling_mean(x,60)

#计算data中所有时间序列的60日移动平均

data.apply(ma60)

[/code]pandas:Python Data Analysis Library
生成器:能以一种一致的方式对序列进行迭代通过一种迭代器协议实现的生成器是构造性的可迭代对象的一种简单方式一般的函数执行之后只返回单个值生成器则是以延时的方式返回一个序列每返回一个值之后暂停直到下一个值被请求时再继续要创建一个生成器,只需要将函数中的return替换成yeild即可
def squares(n=10):

print('Generating squares from 1 to %d' % (n**2))

for i in range(1,n+1):

yield i**2

gen = squares()

print(gen)

#直到从生成器中请求元素时候,才会执行代码

for x in gen:

print(x)

'''

<generator object squares at 0x000000BD50384518>

Generating squares from 1 to 100

1

4

9

16

25

36

49

64

81

100

'''

[/code]生成器表达式:是构造生成器的最简单的方式,方式就是把列表推导两边的方括号改成圆括号
gen= (x ** 2 for x in range(100))

print(gen)

print(sum(x**2 for x in range(100)))

print(dict((i,i**2) for i in range(7)))

'''

<generator object <genexpr> at 0x0000007F13491938>

328350

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}

'''

[/code]
itertools模块:这个模块中有一组可以用于许多常见数据算法的生成器groupby可以接受任何序列和一个函数,根据函数的返回值对序列中的连续元素进行分组
import itertools

first_letter = lambda x: x[0]

names = ['jason','peggy','charles','heather','whitney','thea','ana','jane','aya']

for letter,name in itertools.groupby(names,first_letter):

print(letter,list(name))

'''

j ['jason']

p ['peggy']

c ['charles']

h ['heather']

w ['whitney']

t ['thea']

a ['ana']

j ['jane']

a ['aya']

'''

[/code]文件操作:
with open('temp_temp.txt','w') as handle:

handle.writelines(x for x in open('temp.txt') if len(x)> 1)

open('temp_temp.txt').readline()

[/code]

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: