这句用了以逻辑实现分支的起点原理...
当xy成立,xy返回真, 真 and [x]返回[x], [x][0]得x
当xy不成立,xy返回假 , 假 and [x]返回假, 假 or [y]返回[y], [y][0]得y
py没有三元,但有分支表达式,整句可改写成
(x if xy else y)
首先让我们构成一个正则表达式.为简单起见,先构成一个正则表达式来识别下面格式的电话号码数字:(nnn)nnn-nnnn.
是不是很简单?但是,如果把这个正则表达式的模式用在java程序中,还要做两件事.对java的解释器来说,在反斜线字符(\)前的字符有特殊的含义.在java中,与regex有关的包,并不都能理解和识别反斜线字符(\),尽管可以试试看.但为避免这一点,即为了让反斜线字符(\)在模式对象中被完全地传递,应该用双反斜线字符(\).此外圆括号在正则表达中两层含义,如果想让它解释为字面上意思(即圆括号),也需要在它前面用双反斜线字符(\).也就是像下面的一样:
现在介绍怎样在java代码中实现刚才所讲的正则表达式.要记住的事,在用正则表达式的包时,在你所定义的类前需要包含该包,也就是这样的一行:
import java.util.regex.*;
下面的一段代码实现的功能是,从一个文本文件逐行读入,并逐行搜索电话号码数字,一旦找到所匹配的,然后输出在控制台.
BufferedReader in;
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
System.out.println(matcher.group());
}
in.close();
对那些熟悉用Python或Javascript来实现正则表达式的人来说,这段代码很平常.在Python和Javascript这些语言中,或者其他的语言,这些正则表达式一旦明确地编译过后,你想用到哪里都可以.与Perl的单步匹配相比,看起来多多做了些工作,但这并不很费事.
find()方法,就像你所想象的,用来搜索与正则表达式相匹配的任何目标字符串,group()方法,用来返回包含了所匹配文本的字符串.应注意的是,上面的代码,仅用在每行只能含有一个匹配的电话号码数字字符串时.可以肯定的说,java的正则表达式包能用在一行含有多个匹配目标时的搜索.本文的原意在于举一些简单的例子来激起读者进一步去学习java自带的正则表达式包,所以对此就没有进行深入的探讨.
这相当漂亮吧! 但是很遗憾的是,这仅是个电话号码匹配器.很明显,还有两点可以改进.如果在电话号码的开头,即区位号和本地号码之间可能会有空格.我们也可匹配这些情况,则通过在正则表达式中加入\s?来实现,其中?元字符表示在模式可能有0或1个空格符.
Pattern pattern =
可以确定的是,你可以自己试着进一步改进上面的代码.
现在看看第二个例子,它是从Friedl的中改编过来的.其功能是用来检查文本文件中是否有重复的单词,这在印刷排版中会经常遇到,同样也是个语法检查器的问题.
匹配单词,像其他的一样,也可以通过好几种的正则表达式来完成.可能最直接的是\b\w+\b,其优点在于只需用少量的regex元字符.其中\w元字符用来匹配从字母a到u的任何字符.+元字符表示匹配匹配一次或多次字符,\b元字符是用来说明匹配单词的边界,它可以是空格或任何一种不同的标点符号(包括逗号,句号等).
现在,我们怎样来检查一个给定的单词是否被重复了三次?为完成这个任务,需充分利用正则表达式中的所熟知的向后扫描.如前面提到的,圆括号在正则表达式中有几种不同的用法,一个就是能提供组合类型,组合类型用来保存所匹配的结果或部分匹配的结果(以便后面能用到),即使遇到有相同的模式.在同样的正则表达中,可能(也通常期望)不止有一个组合类型.在第n个组合类型中匹配结果可以通过向后扫描来获取到.向后扫描使得搜索重复的单词非常简单:\b(\w+)\s+\1\b.
圆括号形成了一个组合类型,在这个正则表示中它是第一组合类型(也是仅有的一个).向后扫描\1,指的是任何被\w+所匹配的单词.我们的正则表达式所以呢能匹配这样的单词,它有一个或多个空格符,后面还跟有一个与此相同的单词.注意的是,尾部的定位类型(\b)必不可少,它可以防止发生错误.如果我们想匹配"Paris in the the spring",而不是匹配"Java's regex package is the theme of this article".根据java现在的格式,则上面的正则表达式就是:Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b");
最后进一步的修改是让我们的匹配器对大小写敏感.比如,下面的情况:"The the theme of this article is the Java's regex package.",这一点在regex中能非常简单地实现,即通过使用在Pattern类中预定义的静态标志CASE_INSENSITIVE :
Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b",
Pattern.CASE_INSENSITIVE);
有关正则表达式的话题是非常丰富,而且复杂的,用Java来实现也非常广泛,则需要对regex包进行的彻底研究,我们今天这一节所讲的只是冰山一角.即使你对正则表达式比较陌生,使用regex包后会很快发现它强大功能和可伸缩性.如果你是个来自Perl或其他语言王国的老练的正则表达式的黑客,使用过regex包后,你将会安心地投入到java的世界,而放弃其他的工具,并把java的regex包看成是手边必备的利器.
Python没有三目运算符(?:),但有类似的替代方案,如下:
为真时的结果 if 判定条件 else 为假时的结果
举例:
参考:
①.、 冰与火之歌:Python的三元表达式
(1) variable = a if exper else b
上面三种用法都可以达到目的,类似C语言中 variable = exper ? b : c;即:如果exper表达式的值为true则variable = b,否则,variable = c
例如:
max = (a if a b else b)
max = (a b and [a] or [b])[0] #list
max = (a b and a or b)
现在大部分高级语言都支持"?"这个三元运算符(ternary operator),它对应的表达式如下:condition ? value if true : value if false.很奇怪的是,这么常用的运算符python居然不支持!诚然,我们可以通过if-else语句表达,但是本来一行代码可以完成的非要多行,明显不够简洁.没关系,在python里其实还是有对应的表达方式的.
以上就是土嘎嘎小编为大家整理的python函数三元计算相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!