zoukankan      html  css  js  c++  java
  • 一些琐碎细节——str.split("\s")与re.split("\s",str)以及python的lambda

    str.split("\s")与re.split("\s",str)是不一样的。

    两者区别如下:

    1,str.split("\s")是照字面上来按照"\s"字符来分割字符串

    2,re.split("\s", str)是按照空白来分割,因为正则表达式中的"\s"就是空白space的意思


    另外,正则表达式中的中括号意为列举,如[abc]则能匹配含有a或b或c的字符串。

    另外python的lambda(实际来自lisp)则能定义匿名函数:

    看个例子:     

    1 g = lambda x:x+1

      看一下执行的结果: 

      g(1)

      >>>2

      g(2)

      >>>3

      当然,你也可以这样使用:

      lambda x:x+1(1)

      >>>2   

      可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:

    1 def g(x):
    2 return x+1

      非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。

    所以了解了以上这些之后,第一眼看上去完全看不懂的语句现在可以懂了:

    get_dt_from_str = lambda time_str: datetime(tzinfo=utils.LOCAL_TIMEZONE, *([int(i) for i in re.split("[\s:-]", time_str)]))


    start_time = get_dt_from_str(start_time) if start_time else None

    上面这两个表达式,第一个表达式定义了一个函数,这个函数是根据传入的时间字符串参数,把这个时间字符串

    转化为当前时区的datetime参数,这个lambda的第一个变量就是函数传入的参数。在这个表达式中:

    re.split("[\s:-]", time_str) 是把time_str这个变量根据空白,:以及- 分割成为字符串list,并分别处理。

    所以第二个表达式就可以根据上面定义的匿名函数来直接调用使用了。

  • 相关阅读:
    ios swift模仿qq登陆界面,xml布局
    类和结构体的区别
    获取或者设置时,无后缀和A后缀和W后缀的区别
    mfc控件学习
    MFC之简单计算器
    双冒号、点操作、箭头的区别
    MFC使用MsComm做串口通信
    保存结构体到本地(二进制)
    文件管理函数
    文件定位的几个函数
  • 原文地址:https://www.cnblogs.com/andy071001/p/3008516.html
Copyright © 2011-2022 走看看