zoukankan      html  css  js  c++  java
  • Python语言精要---下

    函数:
    可以返回多个值,其实函数是返回一个对象,就是元组,元组中的元素被拆分到各个结果变量中了

    匿名函数:
    lambda函数,仅仅由单条语句组成,结果就是返回值
    这种函数没有提供名称属性

    闭包:
    closure就是其他函数动态生成并返回的函数
    被返回的函数可以访问其创建者的局部命名空间
    1. def make_closure(a):
    2. def closure():
    3. print("I know the secret: %d" % a)
    4. return closure()
    5. closure = make_closure(5)
    和标准函数的区别就是,即使创建者已经执行完成,闭包仍然可以访问创建者的局部命名空间
    #I know the secret: 5

    扩展调用语法:
    1. def say_hello_then_call_f(f,*args,**kwargs):
    2. print("arg is " + str(args))
    3. print("kwargs is %s "% kwargs)
    4. print("hello now i am gonna to call %s" % f)
    5. return f(*args,**kwargs)
    6. def g(x,y,z = 1):
    7. return (x+y) / z
    8. say_hello_then_call_f(g,1,2,z = 5)
    9. print(say_hello_then_call_f(g,1,2,z = 5))
    10. print(g(1,2,z = 5))
     
    柯里化:
    通过部分参数应用从现有函数派生出来的新函数技术
    1. def add_numbers(x,y):
    2. return x+y
    3. add_five = lambda y: add_numbers(5, y)
    4. print(add_five(2))
    5. #这里的add_numbers的第二个参数是柯里化的,就是定义了一个可以调用现有函数的新函数而已
    6. #还可以使用下面的模块函数简化这个过程
    7. from functools import partial
    8. add_five_ = partial(add_numbers,5)
    9. print(add_five_(9))
    在pandas和时间序列中,可以用这个技术创建专门的数据序列转换函数
    1. #计算时间序列x的60日移动平均
    2. ma60 = lambda x:pandas.rolling_mean(x,60)
    3. #计算data中所有时间序列的60日移动平均
    4. data.apply(ma60)
    pandas:Python Data Analysis Library

    生成器:
    能以一种一致的方式对序列进行迭代
    通过一种迭代器协议实现的
    生成器是构造性的可迭代对象的一种简单方式
    一般的函数执行之后只返回单个值
    生成器则是以延时的方式返回一个序列
    每返回一个值之后暂停
    直到下一个值被请求时再继续
    要创建一个生成器,只需要将函数中的return替换成yeild即可
    1. def squares(n=10):
    2. print('Generating squares from 1 to %d' % (n**2))
    3. for i in range(1,n+1):
    4. yield i**2
    5. gen = squares()
    6. print(gen)
    7. #直到从生成器中请求元素时候,才会执行代码
    8. for x in gen:
    9. print(x)
    10. '''
    11. <generator object squares at 0x000000BD50384518>
    12. Generating squares from 1 to 100
    13. 1
    14. 4
    15. 9
    16. 16
    17. 25
    18. 36
    19. 49
    20. 64
    21. 81
    22. 100
    23. '''

    生成器表达式:
    是构造生成器的最简单的方式,方式就是把列表推导两边的方括号改成圆括号
    1. gen= (x ** 2 for x in range(100))
    2. print(gen)
    3. print(sum(x**2 for x in range(100)))
    4. print(dict((i,i**2) for i in range(7)))
    5. '''
    6. <generator object <genexpr> at 0x0000007F13491938>
    7. 328350
    8. {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}
    9. '''

    itertools模块:
    这个模块中有一组可以用于许多常见数据算法的生成器
    groupby可以接受任何序列和一个函数,根据函数的返回值对序列中的连续元素进行分组
    1. import itertools
    2. first_letter = lambda x: x[0]
    3. names = ['jason','peggy','charles','heather','whitney','thea','ana','jane','aya']
    4. for letter,name in itertools.groupby(names,first_letter):
    5. print(letter,list(name))
    6. '''
    7. j ['jason']
    8. p ['peggy']
    9. c ['charles']
    10. h ['heather']
    11. w ['whitney']
    12. t ['thea']
    13. a ['ana']
    14. j ['jane']
    15. a ['aya']
    16. '''
    文件操作:
    1. with open('temp_temp.txt','w') as handle:
    2. handle.writelines(x for x in open('temp.txt') if len(x)> 1)
    3. open('temp_temp.txt').readline()






    万事走心 精益求美


  • 相关阅读:
    HTML中使用Vue+Dhtmlxgantt制作任务进度图
    Vue中使用js-xlsx导出Data数据到Excel
    Vue生命周期
    ajax调用免费的天气API
    maven无法自动下载依赖包settings.xml文件配置
    idea打开项目没有src目录
    java jdk idea maven安装及配置
    CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/pytorch
    The procedure entry point OPENSSL_sk_new_reserve could not be located in the dynamic link library
    Nuget打包没有注释显示
  • 原文地址:https://www.cnblogs.com/kongchung/p/5805284.html
Copyright © 2011-2022 走看看