精华内容
下载资源
问答
  • 主要是:"\\|\\|" 代表什么意思?开始有点蒙,后来仔细一看明白了,原来是这样的:\\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|,所以\\|实际上是“|”。更深层次研究:ja...

    看一段程序

    String t = "a||b||c||d";

    String[] temp = t.split("\\|\\|");

    System.out.println(temp.length);

    主要是:"\\|\\|" 代表什么意思?

    开始有点蒙,后来仔细一看明白了,原来是这样的:

    \\会转义成反斜杠,反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|,所以\\|实际上是“|”。

    更深层次研究:java的转义字符

    1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'      \0:空字符

    2.Unicode转义字符:\u + 四个十六进制数字;0~65535       \u0000:空字符

    3.特殊字符:就3个

    \":双引号

    \':单引号

    \\:反斜线

    4.控制字符:5个

    \' 单引号字符

    \\ 反斜杠字符

    \r 回车

    \n 换行

    \f 走纸换页

    \t 横向跳格

    \b 退格

    点的转义:. ==> u002E

    美元符号的转义:$ ==> u0024

    乘方符号的转义:^ ==> u005E

    左大括号的转义:{ ==> u007B

    左方括号的转义:[ ==> u005B

    左圆括号的转义:( ==> u0028

    竖线的转义:| ==> u007C

    右圆括号的转义:) ==> u0029

    星号的转义:* ==> u002A

    加号的转义:+ ==> u002B

    问号的转义:? ==> u003F

    反斜杠的转义: ==> u005C

    所以\\|实际上还可以写成:\\u007C

    以上所述就是本文的全部内容了,希望大家能够喜欢。

    展开全文
  • 反斜杠后的元字符将失去其特殊含义。字符类:单个字符和数字元字符/元符号 匹配情况 . 匹配除换行符外的任意字符 [a-z0-9] 匹配括号中的字符集中的任意字符 [^a-z0-9] 匹配任意不在括号中的字符集中的字符 \d 匹配...

    正则表达式元字符是包含特殊含义的字符。它们有一些特殊功能,可以控制匹配模式的方式。反斜杠后的元字符将失去其特殊含义。

    字符类:单个字符和数字

    元字符/元符号

    匹配情况

    .

    匹配除换行符外的任意字符

    [a-z0-9]

    匹配括号中的字符集中的任意字符

    [^a-z0-9]

    匹配任意不在括号中的字符集中的字符

    \d

    匹配数字

    \D

    匹配非数字,同[^0-9]相同

    \w

    匹配字母和数字及_

    \W

    匹配非字母和数字及_

     

    字符类:空白字符

    元字符/元符号

    匹配情况

    \0

    匹配null字符

    \b

    匹配空格字符

    \f

    匹配进纸字符

    \n

    匹配换行符

    \r

    匹配回车字符

    \t

    匹配制表符

    \s

    匹配空白字符、空格、制表符和换行符

    \S

    匹配非空白字符

     

    字符类:锚字符

    元字符/元符号

    匹配情况

    ^

    行首匹配

    $

    行尾匹配

    \A

    只有匹配字符串开始处

    \b

    匹配单词边界,词在[]内时无效

    \B

    匹配非单词边界

    \G

    匹配当前搜索的开始位置

    \Z

    匹配字符串结束处或行尾

    \z

    只匹配字符串结束处

     

    字符类:重复字符

    元字符/元符号

    匹配情况

    x?

    匹配0个或1个x

    x*

    匹配0个或任意多个x

    x+

    匹配至少一个x

    (xyz)+

    匹配至少一个(xyz)

    x{m,n}

    匹配最少m个、最多n个x

     

    字符类:替代字符

    元字符/元符号

    匹配情况

    this|where|logo

    匹配this或where或logo中任意一个

     

     

    字符类:记录字符

    元字符/元符号

    匹配情况

    (string)

    用于反向引用的分组

    \1或$1

    匹配第一个分组中的内容

    \2或$2

    匹配第二个分组中的内容

    \3或$3

    匹配第三个分组中的内容

     

    /*使用点元字符*/

    var pattern = /g..gle/;                                        //.匹配一个任意字符

    var str = 'google';

    alert(pattern.test(str));

     

    /*重复匹配*/

    var pattern = /g.*gle/;                                        //.匹配0个一个或多个

    var str = 'google';                                              //*,?,+,{n,m}

    alert(pattern.test(str));

     

    /*使用字符类匹配*/

    var pattern = /g[a-zA-Z_]*gle/;                          //[a-z]*表示任意个a-z中的字符

    var str = 'google';

    alert(pattern.test(str));

     

    var pattern = /g[^0-9]*gle/;                                //[^0-9]*表示任意个非0-9的字符

    var str = 'google';

    alert(pattern.test(str));

     

    var pattern = /[a-z][A-Z]+/;                               //[A-Z]+表示A-Z一次或多次

    var str = 'gOOGLE';

    alert(pattern.test(str));

     

    /*使用元符号匹配*/

    var pattern = /g\w*gle/;                                     //\w*匹配任意多个所有字母数字_

    var str = 'google';

    alert(pattern.test(str));

     

    var pattern = /google\d*/;                                  //\d*匹配任意多个数字                     

    var str = 'google444';

    alert(pattern.test(str));

     

           var pattern = /\D{7,}/;                                       //\D{7,}匹配至少7个非数字     

           var str = 'google8';

           alert(pattern.test(str));

     

    /*使用锚元字符匹配*/

    var pattern = /^google$/;                                   //^从开头匹配,$从结尾开始匹配

    var str = 'google';

    alert(pattern.test(str));

     

           var pattern =/goo\sgle/;                                     //\s可以匹配到空格            

           var str = 'google';

           alert(pattern.test(str));

     

           var pattern =/google\b/;                                    //\b可以匹配是否到了边界               

           var str ='google';

           alert(pattern.test(str));

     

    /*使用或模式匹配*/

    var pattern = /google|baidu|bing/;                       //匹配三种其中一种字符串

    var str = 'google';

    alert(pattern.test(str));

     

    /*使用分组模式匹配*/

    var pattern = /(google){4,8}/;                             //匹配分组里的字符串4-8            

    var str = 'googlegoogle';

    alert(pattern.test(str));

     

    var pattern = /8(.*)8/;                                        //获取8..8之间的任意字符

    var str = 'This is 8google8';

    str.match(pattern);                                           

    alert(RegExp.$1);                                             //得到第一个分组里的字符串内容

     

    var pattern = /8(.*)8/;    

    var str = 'This is 8google8';

    var result =str.replace(pattern,'<strong>$1</strong>');       //得到替换的字符串输出

    document.write(result);                                    

     

    var pattern = /(.*)\s(.*)/;

    var str = 'google baidu';

    var result = str.replace(pattern, '$2 $1');               //将两个分组的值替换输出

    document.write(result);                             

     

    贪  婪

    惰  性

    +

    +?

    ?

    ??

    *

    *?

    {n}

    {n}?

    {n,}

    {n,}?

    {n,m}

    {n,m}?

     

     

    /*关于贪婪和惰性*/

    var pattern = /[a-z]+?/;                                      //?号关闭了贪婪匹配,只替换了第一个

    var str = 'abcdefjhijklmnopqrstuvwxyz';

    var result = str.replace(pattern, 'xxx');

    alert(result);

     

    var pattern = /8(.+?)8/g;                                    //禁止了贪婪,开启的全局

    var str = 'This is 8google8, That is 8google8,There is 8google8';

    var result =str.replace(pattern,'<strong>$1</strong>');

    document.write(result); 

     

    var pattern = /8([^8]*)8/g;                                 //另一种禁止贪婪

    var str = 'This is 8google8, That is 8google8,There is 8google8';

    var result =str.replace(pattern,'<strong>$1</strong>');

    document.write(result); 

     

    /*使用exec返回数组*/

    var pattern = /^[a-z]+\s[0-9]{4}$/i;

    var str = 'google 2012';

    alert(pattern.exec(str));                                     //返回整个字符串

     

    var pattern = /^[a-z]+/i;                                     //只匹配字母

    var str = 'google 2012';

    alert(pattern.exec(str));                                     //返回google

     

    var pattern = /^([a-z]+)\s([0-9]{4})$/i;                //使用分组

    var str = 'google 2012';

    alert(pattern.exec(str)[0]);                                 //google 2012

    alert(pattern.exec(str)[1]);                                 //google

    alert(pattern.exec(str)[2]);                                 //2012

     

    /*捕获性分组和非捕获性分组*/

    var pattern = /(\d+)([a-z])/;                                //捕获性分组

    var str = '123abc';

    alert(pattern.exec(str));

     

    var pattern = /(\d+)(?:[a-z])/;                             //非捕获性分组

    var str = '123abc';

    alert(pattern.exec(str));

     

    /*使用分组嵌套*/

    var pattern = /(A?(B?(C?)))/;                             //从外往内获取

    var str = 'ABC';

    alert(pattern.exec(str));

     

    /*使用前瞻捕获*/

    var pattern = /(goo(?=gle))/;                              //goo后面必须跟着gle才能捕获

    var str = 'google';

    alert(pattern.exec(str));

     

     

    /*使用特殊字符匹配*/

    var pattern = /\.\[\/b\]/;                                      //特殊字符,用\符号转义即可

    var str = '.[/b]';

    alert(pattern.test(str));

     

    /*使用换行模式*/

    var pattern = /^\d+/mg;                                     //启用了换行模式

    var str = '1.baidu\n2.google\n3.bing';

    var result = str.replace(pattern, '#');

    alert(result);


    展开全文
  • 字符串前面加个r‘是什么意思

    千次阅读 2020-05-13 15:07:04
    有时候可以看到字符串前面加了一个r‘,那么这个代表什么意思呢? 在字符串的最左边加上r,是告诉解释器所有字符按照原本的样子进行解释 In [48]: r'12\24' Out[48]: '12\\24' 原字符串中有一个反斜杠,输出的是...

    有时候可以看到字符串前面加了一个r‘,那么这个代表什么意思呢?

    在字符串的最左边加上r,是告诉解释器所有字符按照原本的样子进行解释

    In [48]: r'12\24'                                                               
    Out[48]: '12\\24'
    

    原字符串中有一个反斜杠,输出的是’12\24’,这里的一个反斜杠是转义字符,第二个反斜杠代表原本想要输出的那个反斜杠。

    如果想要展示反斜杠,必须要再加一个反斜杠进行转义,否则得到的可能不是你想要的结果。

    In [51]: '12\24'                                                                
    Out[51]: '12\x14'
    

    👏👏👏再看看我们以前的文章😃😃😃
    🌺 Excel中数据分析工具库-相关系数篇
    🌺 干货,手把手教会你做相关性分析
    🌺 5年数据分析路,小结。
    🌺 用户细分及画像分析
    🌺 K-近邻算法及实践

    欢迎关注,微信公众号“数据分析师之家
    扫描二维码 关注我们
    💁提供职业规划、简历指导、面试辅导服务哦
    QQ交流群:254674155
    在这里插入图片描述

    展开全文
  • 1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f 换页oyy 八进制数yy代表的字符,例如:o12代表换行xyy 十...

    1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f 换页oyy 八进制数yy代表的字符,例如:o12代表换行xyy 十进制数yy代表的字符,例如:x0a代表换行other 其它的字符以普通格式输出

    2.字符串格式化

    3.操作符

    一、算术运算符

    注意:

    双斜杠 // 除法总是向下取整。

    从符点数到整数的转换可能会舍入也可能截断,建议使用math.floor()和math.ceil()明确定义的转换。

    Python定义pow(0, 0)和0 ** 0等于1。

    二、比较运算符

    运算符 描述< 小于<= 小于或等于

    大于= 大于或等于== 等于

    != 不等于is 判断两个标识符是不是引用自一个对象is not 判断两个标识符是不是引用自不同对象注意:

    八个比较运算符优先级相同。

    Python允许x < y <= z这样的链式比较,它相当于x < y and y <= z。

    复数不能进行大小比较,只能比较是否相等。

    三、逻辑运算符

    运算符 描述 备注x or y if x is false, then y, elsex x andy if x is false, then x, elsey not x if x is false, then True,elseFalse 注意: or是个短路运算符,它只有在第一个运算数为False时才会计算第二个运算数的值。

    and也是个短路运算符,它只有在第一个运算数为True时才会计算第二个运算数的值。

    not的优先级比其他类型的运算符低,所以not a == b相当于not (a == b),而 a == not b是错误的。

    四、位运算符

    运算符 描述 备注x | y 按位或运算符 x ^ y 按位异或运算符 x & y 按位与运算符 x << n 左移动运算符 x >> n 右移动运算符 ~x 按位取反运算符 五、赋值运算符

    复合赋值运算符与算术运算符是一一对应的:

    六、成员运算符

    Python提供了成员运算符,测试一个元素是否在一个序列(Sequence)中。

    运算符 描述in 如果在指定的序列中找到值返回True,否则返回False。not in 如果在指定的序列中没有找到值返回True,否则返回False。

    4.关键字总结

    Python中的关键字包括如下:

    and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try你想看看有哪些关键字?OK,打开一个终端,就像这样~

    long@zhouyl:~$ pythonPython 2.7.3 (default, Jan 2 2013, 16:53:07) [GCC 4.7.2] on linux2Type "help", "copyright", "credits" or "license" for more information.

    import keywordkeyword.kwlist

    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

    ============================== 华丽的 正文分隔符 ========================================

    看到这些关键字你还能记得多少?你不妨自己一个一个对照想想它的用法,下面是我总结的,我根据前面的学习笔记将上述关键字分为以下几类:

    1.判断、循环

    对于Python的循环及判断主要包括这些关键字:

    if elif else for while break continue and or is not in

    这几个关键字在前面介绍 if 语法、while语法、for语法以及and...or语法中已有介绍,下面再一笔带过:

    1.1 if 语法

    if语法与C语言、shell脚本之下的非常类似,最大的区别就是冒号以及严格的缩进,当然这两点也是Python区别于其他语言的地方:

    if condition1:

    do something

    elif condition2:

    do another thing

    else:

    also do something

    1.2 while 语法

    Python的while语法区别于C、shell下的while除了冒号及缩进之外,还有一点就是while可以携带一个可选的else语句:

    while condition:

    do something

    else:

    do something

    注:else语句是可选的,但是使用while语句时一定要注意判断语句可以跳出!

    1.3 for 语法

    与while类似,Python的for循环也包括一个可选的else语句(跳出for循环时执行,但是如果是从break语句跳出则不执行else语句块中的代码!),而且for 加上 关键字in就组成了最常见的列表解析用法(以后会写个专门的博客)。

    下面是for的一般用法:

    for i in range(1,10,2):

    do something

    if condition:

    break

    else:

    do something

    for的列表解析用法:

    for items in list:

    print items

    1.4 and...or 语法

    Python的and/or操作与其他语言不同的是它的返回值是参与判断的两个值之一,所以我们可以通过这个特性来实现Python下的 a ? b : c !

    有C语言基础的知道 “ a ? b : c ! ” 语法是判断 a,如果正确则执行b,否则执行 c!

    而Python下我们可以这么用:“ a and b or c ”(此方法中必须保证b必须是True值),python自左向右执行此句,先判断a and b :如果a是True值,a and b语句仍需要执行b,而此时b是True值!所以a and b的值是b,而此时a and b or c就变成了b or c,因b是True值,所以b or c的结果也是b;如果a是False值,a and b语句的结果就是a,此时 a and b or c就转化为a or c,因为此时a是 False值,所以不管c是True 还是Flase,a or c的结果就是c!!!捋通逻辑的话,a and b or c 是不是就是Python下的a ? b : c ! 用法?

    1.5 is ,not

    is 和 is not 是Python下判断同一性的关键字,通常用来判断 是 True 、False或者None(Python下的NULL)!

    比如 if alue is True : ...

    (不记得本节的童鞋罚复习:python 学习笔记 2 -- 判断语句)

    2.函数、模块、类

    对于Python的函数及模块主要包括这些关键字:

    from import as def pass lambda return class 那么你还能记得它们么?下面简单介绍一下:

    2.1 模块

    Python的编程通常大量使用标准库中的模块,使用方法就是使用import 、from以及as 关键字。

    比如: import sys # 导入sys模块

    from sys import argv # 从sys模块中导入argv ,这个在前面介绍脚本传参数时使用到

    import cPickle as p # 将cPickle模块导入并在此将它简单命名为p,此后直接可以使用p替代cPickle模块原名,这个在介绍文件输入输出时的存储器中使用到

    2.2 函数

    Python中定义函数时使用到def关键字,如果你当前不想写入真实的函数操作,可以使用pass关键字指代不做任何操作:

    def JustAFunction:

    pass

    当然,在需要给函数返回值时就用到了return关键字,这里简单提一下Python下的函数返回值可以是多个(接收返回值时用相应数量的变量接收!)!

    此外Python下有个神奇的Lambda函数,它允许你定义单行的最小函数,这是从Lisp中借用来的,可以用在任何需要函数的地方。比如:

    g = lambda x : x*2 # 定义一个Lambda函数用来计算参数的2倍并返回!

    print g(2) # 使用时使用lambda函数返回的变量作为这个函数的函数名,括号中带入相应参数即可!

    (不记得本节的童鞋罚复习:python 学习笔记 4 -- 函数篇)

    3.异常

    对于Python的异常主要包括这些关键字:

    try except finally raise 异常这一节还是比较简单的,将可能出现的异常放在 try: 后面的语句块中,使用except关键字捕获一定的异常并在接下来的语句块中做相应操作,而finally中接的是无论出现什么异常总在执行最后做finally: 后面的语句块(比如关闭文件等必要的操作!)

    raise关键字是在一定的情况下引发异常,通常结合自定义的异常类型使用。

    (不记得本节的童鞋罚复习:python 学习笔记 6 -- 异常处理)

    4.其他

    上面的三类过后,还剩下这些关键字:

    print del global with assert yield exec

    首先print 在前面的笔记或者任何地方你都能见到,所以还是比较熟悉的,此处就不多介绍了!del 关键字在前面的笔记中已有所涉及,比如删除列表中的某项,我们使用 “ del mylist[0] ”

    可能这些剩下来的关键字你比较陌生,所以下面来介绍一下:

    4.1.global 关键字

    当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。

    eg.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    !/usr/bin/python

    Filename: func_local.py

    def func(x):

    print'x is', x

    x = 2

    print'Changed local x to', x

    x = 50

    func(x)

    print'x is still', x

    运行的结果是这样的:?

    1

    2

    3

    4

    $ python func_local.py

    x is 50 # 运行func函数时,先打印x的值,此时带的值是作为参数带入的外部定义的50,所以能正常打印 x=50

    Changed local x to 2 # 在func函数中将x赋2,并打印

    x is still 50 # 运行完func函数,打印x的值,此时x的值仍然是之前赋给的50,而不是func函数中修改过的2,因为在函数中修改的只是函数内的局部变量

    那么为什么我们要在这提到局部变量呢?bingo,聪明的你一下就猜到这个global就是用来定义全局变量的。也就是说如果你想要为一个在函数外定义的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。eg.?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    !/usr/bin/python

    Filename: func_global.py

    def func():

    global x

    print'x is', x

    x = 2

    print'Changed local x to', x

    x = 50

    func()

    print'Value of x is', x

    运行的结果是这样的:?

    1

    2

    3

    4

    $ python func_global.py

    x is 50

    Changed global x to 2

    Value of x is 2 # global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。

    你可以使用同一个global语句指定多个全局变量。例如global x, y, z。

    4.2.with 关键字

    有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。如果不用with语句,打开一个文件并读文件的代码如下:?

    1

    2

    3

    file = open("/tmp/foo.txt")

    data = file.read()

    file.close()

    当然这样直接打开有两个问题:一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是添加上异常处理的版本:?

    1

    2

    3

    4

    5

    file = open("/tmp/foo.txt")

    try:

    data = file.read()

    finally:

    file.close()

    虽然这段代码运行良好,但是太冗余了。这时候就是with一展身手的时候了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是with版本的代码:?

    1

    2

    with open("/tmp/foo.txt") as file:

    data = file.read()

    这看起来充满魔法,但不仅仅是魔法,Python对with的处理还很聪明。基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。with语句的执行逻辑如下:紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

    下面例子可以具体说明with如何工作:?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    !/usr/bin/python

    with_example01.py

    classSample:

    def __enter__(self):

    print"In __enter__()"

    return"Foo"

    def __exit__(self, type, value, trace):

    print"In __exit__()"

    def get_sample():

    returnSample()

    with get_sample() as sample:

    print"sample:", sample

    运行代码,输出如下?

    1

    2

    3

    4

    $python with_example01.py

    In __enter__() # __enter__()方法被执行

    sample: Foo # __enter__()方法返回的值 - 这个例子中是"Foo",赋值给变量'sample',执行代码块,打印变量"sample"的值为"Foo"

    In __exit__() # __exit__()方法被调用

    4.3.assert 关键字

    assert语句是一种插入调试断点到程序的一种便捷的方式。assert语句用来声明某个条件是真的,当assert语句失败的时候,会引发一AssertionError,所以结合try...except我们就可以处理这样的异常。

    mylist # 此时mylist是有三个元素的列表['a', 'b', 'c']assert len(mylist) is not None # 用assert判断列表不为空,正确无返回assert len(mylist) is None # 用assert判断列表为空

    Traceback (most recent call last): File "", line 1, in AssertionError # 引发AssertionError异常

    4.4.yield 关键字

    我们先看一个示例:?

    1

    2

    3

    4

    5

    6

    7

    8

    def fab(max):

    n, a, b = 0,0,1

    whilen < max:

    yield b

    # print b

    a, b = b, a + b

    n = n + 1

    '''

    使用这个函数:?

    1

    2

    3

    4

    5

    6

    7

    8

    forn in fab(5):

    ... print n

    ...

    1

    1

    2

    3

    5

    简单地讲,yield 的作用就是把一个函数变成一个 generator(生成器),带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable(可迭代的)对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。也可以手动调用 fab(5) 的 next() 方法(因为 fab(5) 是一个 generator 对象,该对象具有 next() 方法),这样我们就可以更清楚地看到 fab 的执行流程:?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    f = fab(5)

    f.next()

    1

    f.next()

    1

    f.next()

    2

    f.next()

    3

    f.next()

    5

    f.next()

    Traceback (most recent call last):

    File"", line 1, in

    StopIteration

    当函数执行结束时,generator 自动抛出 StopIteration 异常,表示迭代完成。在 for 循环里,无需处理 StopIteration 异常,循环会正常结束。

    我们可以得出以下结论:一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

    yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。

    注:如果看完此段你还未明白yield,没问题,因为yield是初学者的一个难点,那么你下一步需要做的就是……看一看下面参考资料中给的关于yield的博文!

    4.5.exec 关键字

    官方文档对于exec的解释: "This statement supports dynamic execution of Python code."也就是说使用exec可以动态执行Python代码(也可以是文件)。?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    longer = "print "Hello World ,my name is longer"" # 比如说我们定义了一个字符串

    longer

    'print "Hello World ,my name is longer"'

    exec(longer) # 使用exec 动态执行字符串中的代码

    Hello World ,my name is longer

    exec(sayhi) # 使用exec直接打开文件名(指定sayhi,sayhi.py以及"sayhi.py"都会报一定的错,但是我觉得直接带sayhi报错非常典型)

    Traceback (most recent call last):

    File"", line 1, in

    TypeError: exec: arg 1must be a string, file, or code object # python IDE报错,提示exec的第一个参

    数必须是一个字符串、文件或者一个代码对象

    f = file("sayhi.py") # 使用file打开sayhi.py并创建f实例

    exec(f) # 使用exec直接运行文件描述符f,运行正常!!

    Hi,thisis [''] script

    上述给的例子比较简单,注意例子中exec语句的用法和eval_r(), execfile()是不一样的. exec是一个关键字(要不然我怎么会在这里介绍呢~~~), 而eval_r()和execfile()则是内建函数。更多关于exec的使用请详看引用资料或者Google之

    在需要在字符中使用特殊字符时,python用反斜杠()转义字符。

    原始字符串 有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。如:

    print r’tr’

    实际输出为“tr”。

    转义字符 描述 (在行尾时) 续行符 反斜杠符号 ’ 单引号 ” 双引号 a 响铃 b 退格(Backspace) e 转义 000 空 n 换行 v 纵向制表符 t 横向制表符 r 回车 f 换页 oyy 八进制数yy代表的字符,例如:o12代表换行 xyy 十进制数yy代表的字符,例如:x0a代表换行 other 其它的字符以普通格式输出

    展开全文
  • 总结1、'''作用: 可以表示 "多行注释" 、"多行字符串" 、"其内的单双引号不转义"2、r 代表意思是: raw3、r 只对其内的反斜杠起作用(注意单个 \ 的问题)raw string 有什么用处呢? raw string 就是会自动将反斜杠...
  • 1、'''作用: 可以表示 "多行注释" 、"多行字符串" 、"其内的单双引号不转义"2、r 代表意思是: raw3、r 只对其内的反斜杠起作用(注意单个 \ 的问题)raw string 有什么用处呢? raw string 就是会自动将反斜杠转义。...
  • 总结1、”’作用: 可以表示 “多行注释” 、”多行字符串” 、”其内的单双引号不转义”2、r 代表意思是: raw3、r 只对其内的反斜杠起作用(注意单个 的问题)raw string 有什么用处呢? raw string 就是会自动将...
  • 总结1、'''作用: 可以表示 "多行注释" 、"多行字符串" 、"其内的单双引号不转义"2、r 代表意思是: raw3、r 只对其内的反斜杠起作用(注意单个 \ 的问题)raw string 有什么用处呢? raw string 就是会自动将反斜杠...
  • input_file = r"C:\Users\Administrator\Desktop\python-master\csv\supplier_data.csv"#r代表不转义,如果不加r那么""中就要加双反斜杠。output_file = r"C:\Users\Administrator\Desktop\abc.txt"important_dates ...
  • 网上查看资料: u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行...r/R:非转义的原始字符串 与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加...
  • 本文以GitHub上为素材,规划为约100天的练习,每次的...使用字符串字符串的表示字符串通常用单引号或双引号表示,例如:在字符串中 反斜杠不是反斜杠本身的意思,而是代表的转义字符。例如 代表意思是换行,代表...
  • DIRECTORY_SEPARATOR在php是什么意思呢,在什么时候使用DIRECTORY_SEPARATOR最合理呢?下面来给各位介绍一下php DIRECTORY_SEPARATOR常量。 我们知道DIRECTORY_SEPARATOR是一个PHP常量,代表反斜杠,因为windows系统...
  • 虽然在windows系统当中读取文件路径可以使用,但是在python字符串中\有转义的含义,如\t可代表TAB,\n代表换行,所以我们需要采取一些方式使得\不被解读为转义字符,有三种方法: 解决办法 1、在路径前面加r,即保持...
  • 1.2 JAVA中:\\的意思是要插入一个正则表达式反斜杠,所以其后的字符具有特殊的意义。例如:如果你想表示一位数字,那么正则表达式应该是\\d,如果要插入一个普通的反斜杠,则应该是\\\\。不过换行和制表符之类的...
  • 我们知道DIRECTORY_SEPARATOR是一个PHP常量,代表反斜杠,因为windows系统和linux系统的反斜杠不一样。在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符,在linux上路径的分隔符是”/”。 那么在PHP代码中...
  • java 转义符 \\|

    2017-09-21 16:17:00
    看一段程序 String t ="a||b||c||d";...主要是:"\\|\\|"代表什么意思? 开始有点蒙,后来仔细一看明白了,原来是这样的: \\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|...
  • 浅谈Java转义符\\|

    2016-08-17 16:40:00
    看一段程序 String t = "a||b||c||d";...主要是:"\\|\\|" 代表什么意思? 开始有点蒙,后来仔细一看明白了,原来是这样的: \\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行...
  • 2016年1月9日 总结 1、'''作用: 可以表示 "多行...2、r 代表意思是: raw 3、r 只对其内的反斜杠起作用(注意单个 \ 的问题) raw string 有什么用处呢? raw string 就是会自动将反斜杠转义。 >>> pri...
  • 主要是:"\\|\\|" 代表什么意思?开始有点蒙,后来仔细一看明白了,原来是这样的:\\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|,所以\\|实际上是“|”。更深层次研究:ja...
  • 主要是:"\\|\\|" 代表什么意思?开始有点蒙,后来仔细一看明白了,原来是这样的:\\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|,所以\\|实际上是“|”。更深层次研究:ja...
  • 主要是:"\\|\\|" 代表什么意思?开始有点蒙,后来仔细一看明白了,原来是这样的:\\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|,所以\\|实际上是“|”。更深层次研究:ja...
  • 主要是:"\\|\\|" 代表什么意思?开始有点蒙,后来仔细一看明白了,原来是这样的:\\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|,所以\\|实际上是“|”。更深层次研究:ja...
  • 主要是:"\\|\\|" 代表什么意思?开始有点蒙,后来仔细一看明白了,原来是这样的:\\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”,在进行转义就是|,所以\\|实际上是“|”。更深层次研究:ja...
  • Java转义符\\|

    2020-06-30 18:29:23
    Java转义符\\| ... 看一段程序 String t ="a||b||c||d";...主要是:"\\|\\|"代表什么意思? 开始有点蒙,后来仔细一看明白了,原来是这样的: \\会转义成反斜杠反斜杠本身就是转义符,所有就成了“\|”...
  • Java转义符\\的品读

    2019-03-05 14:48:06
    看一段程序 ... 代表什么意思? 开始有点蒙,后来仔细一看明白了,原来是这样的: \会转义成反斜杠反斜杠本身就是转义符,所有就成了“|”,在进行转义就是|,所以\|实际上是“|”。 更深层次研究:ja...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

反斜杠代表什么意思