擊上方頭像關(guān)注我,每周上午 09:00準(zhǔn)時推送,每月不定期贈送技術(shù)書籍。
本文1210字,閱讀約需4分鐘
Hi,大家好,我是胖虎。在上一篇Python自動化測試系列文章:Python自動化之Python輸出函數(shù),主要介紹python輸出函數(shù)print的詳細用法。
今天我們主要介紹Python中的輸入函數(shù)、轉(zhuǎn)義字符的含義、作用及具體實例。
一
input輸入函數(shù)
input函數(shù)是Python的內(nèi)置函數(shù), 用來接收用戶輸入的內(nèi)容。
input函數(shù)接收用戶輸入的信息, 然后返回字符串類型信息。
實例1:
運行后,在控制臺輸入字符:
實例2:
gf=input('女:')
bf=input('男:')
gf=input('女:')
在控制臺輸入字符:
二
轉(zhuǎn)義字符
簡單來說, 反斜杠+需要轉(zhuǎn)義的字符。
用普通字符無法表達出特殊字符的含義,需要進行轉(zhuǎn)義。
列舉下常用的轉(zhuǎn)義字符:
實例1:
有時我們輸入的字符需要換行展示,可以在行尾加上\
輸出結(jié)果為:
hello,終于等到你,歡迎關(guān)注ITester軟件測試小棧
實例2:
雙引號的轉(zhuǎn)義字符為 \"
輸出結(jié)果為:
ITester軟件測試小棧("coco")
實例3:
制表符的轉(zhuǎn)義字符為 \t
實例4:
換行符的轉(zhuǎn)義字符為 \n, 這個我們在上一篇文章print函數(shù)用法的時候介紹過。
print結(jié)尾默認是\n即換行符。
實例5:
顏色控制的轉(zhuǎn)義字符為3
輸出結(jié)果為:
以上就是今天的全部內(nèi)容,希望對大家有所幫助,也希望大家多多?? 支持。 咱們下篇文章見,Bye~
以上
That‘s all
更多系列文章
敬請期待
ITester軟件測試小棧(ID:ITestingA),專注于軟件測試技術(shù)和寶藏干貨分享,每周準(zhǔn)時更新原創(chuàng)技術(shù)文章,每月不定期贈送技術(shù)書籍,愿我們在更高處相逢。喜歡記得星標(biāo)?我,每周及時獲得最新推送,第三方轉(zhuǎn)載請注明出處。
想獲取更多最新干貨內(nèi)容
快來星標(biāo) 置頂 關(guān)注我
天學(xué)習(xí)的是劉金玉老師零基礎(chǔ)Python教程第21-22期,主要內(nèi)容是python編程字符串轉(zhuǎn)義與拼接。
一、python編程字符串轉(zhuǎn)義與拼接
(一)什么是字符串?
字符串:可以理解成一串文本或者多個字符的組合。
(二)用什么來表示字符串?
符號1:單引號括起來'字符串內(nèi)容'
符號2:雙引號括起來“字符串內(nèi)容”
(三)字符串的賦值
給某個變量賦值為字符串類型,所有的變量第二次賦值的時候會覆蓋前一次賦的值。通過單引號或者雙引號單獨或者嵌套給變量賦值,賦值的時候同時使用多次單引號或者雙引號需使用轉(zhuǎn)義符來轉(zhuǎn)義重復(fù)使用的單引號或者雙引號。
(四)字符串的轉(zhuǎn)義
轉(zhuǎn)義符\后面跟上單引號或者雙引號,可以直接輸出單引號或者雙引號。
\"會被解析成"
\'會被解析成'
\n會被解析成換行
二、編程注釋
(一)單行注釋:寫在需要注釋的代碼最后,使用#連接注釋的內(nèi)容即可。比如:# 這是注釋內(nèi)容
(二)多行注釋:寫在需要注釋的多行代碼前,使用英文狀態(tài)下的3個單引號或雙引號隔開即可。比如:
'''
軟件開發(fā)者:四川二流子
軟件開發(fā)時間:2021年5月6日
'''
"""
ava 14預(yù)定于3月17日發(fā)布。那么,14版究竟有什么新功能,對于整天寫代碼、維護代碼的Java開發(fā)者來說,哪些功能最有用呢?
作者 | Raoul-Gabriel Urma
譯者 | 彎月,責(zé)編 | 郭芮
出品 | CSDN(ID:CSDNnews)
以下為譯文:
第14版包含的JEP(Java Enhancement Proposals,Java增強提案)比12版和13版加起來還要多。在這篇文章中,我將主要討論以下幾點:
改進的switch表達式,第一次出現(xiàn)在Java 12和13中,在Java 14中獲得了完全的支持
instanceof支持模式匹配(語言特性)
PointerException(JVM特性)
希望你在閱讀完本文后,積極地代碼中實驗這些功能,為Java團隊提供反饋,并為Java的發(fā)展做出貢獻。
Switch表達式
Java 14中的switch表達式將會永久存在。如果你需要回憶一下什么是switch表達式,可以參考下以前這兩篇文章(https://blogs.oracle.com/javamagazine/new-switch-expressions-in-java-12,https://blogs.oracle.com/javamagazine/inside-java-13s-switch-expressions-and-reimplemented-socket-api)。
在之前的發(fā)布中,switch表達式只是一個“預(yù)覽”階段的特性。我想提醒一下,“預(yù)覽”階段的特性的目的是為了收集反饋,這些特性可能會隨時改變,根據(jù)反饋結(jié)果,這些特性甚至可能會被移除,但通常所有預(yù)覽特性最后都會在Java中固定下來。
新的switch表達式的優(yōu)點是,不再有缺省跳過行為(fall-through),更全面,而且表達式和組合形式更容易編寫,因此出現(xiàn)bug的可能性就更低。例如,switch表達式現(xiàn)在可以使用箭頭語法,如下所示:
var log=switch (event) {
case PLAY -> "User has triggered the play button";
case STOP, PAUSE -> "User needs a break";
default -> {
String message=event.toString;
LocalDateTime now=LocalDateTime.now;
yield "Unknown event " + message +
" logged on " + now;
}
};
文本塊
Java 13引入的一個預(yù)覽功能是文本塊。有了文本塊,多行的字符串字面量就很容易編寫了。這個功能在Java 14中進行第二次預(yù)覽,而且發(fā)生了一些變化。例如,多行文本的格式化可能需要編寫許多字符串連接操作和轉(zhuǎn)義序列。下面的代碼演示了一個HTML的例子:
String html="<HTML>" +
"\n\t" + "<BODY>" +
"\n\t\t" + "<H1>\"Java 14 is here!\"</H1>" +
"\n\t" + "</BODY>" +
"\n" + "</HTML>";
有了文本塊,就可以簡化這一過程,只需使用三引號作為文本塊的起始和結(jié)束標(biāo)記,就能編寫出更優(yōu)雅的代碼:
String html="""
<HTML>
<BODY>
<H1>"Java 14 is here!"</H1>
</BODY>
</HTML>""";
與普通的字符串字面量相比,文本塊的表達性更好。更多的內(nèi)容可以參考這篇文章(https://blogs.oracle.com/javamagazine/text-blocks-come-to-java)。
Java 14引入了兩個新的轉(zhuǎn)義序列。第一,可以使用新的 \s 轉(zhuǎn)義序列來表示一個空格。第二,可以使用反斜杠 \ 來避免在行尾插入換行字符。這樣可以很容易地在文本塊中將一個很長的行分解成多行來增加可讀性。
例如,現(xiàn)在編寫多行字符串的方式如下:
String literal=
"Lorem ipsum dolor sit amet, consectetur adipiscing " +
"elit, sed do eiusmod tempor incididunt ut labore " +
"et dolore magna aliqua.";
在文本塊中使用 \ 轉(zhuǎn)義序列,就可以寫成這樣:
String text="""
Lorem ipsum dolor sit amet, consectetur adipiscing \
elit, sed do eiusmod tempor incididunt ut labore \
et dolore magna aliqua.\
""";
instanceof的模式匹配
Java 14引入了一個預(yù)覽特性,有了它就不再需要編寫先通過instanceof判斷再強制轉(zhuǎn)換的代碼了。例如,下面的代碼:
if (obj instanceof Group) {
Group group=(Group) obj;
// use group specific methods
var entries=group.getEntries;
}
利用這個預(yù)覽特性可以重構(gòu)為:
if (obj instanceof Group group) {
var entries=group.getEntries;
}
由于條件檢查要求obj為Group類型,為什么還要像第一段代碼那樣在條件代碼塊中指明obj為Group類型呢?這可能會引發(fā)錯誤。
這種更簡潔的語法可以去掉Java程序里的大多數(shù)強制類型轉(zhuǎn)換。(2011年的一篇針對相關(guān)語言特性的研究論文(http://www.cs.williams.edu/FTfJP2011/6-Winther.pdf)指出,24%的類型轉(zhuǎn)換都來自于instanceof后的條件語句。)
JEP 305解釋了這項改變,并給出了Joshuoa Bloch的著作《Effective Java》中的一個例子,演示了下面兩種等價的寫法:
@Override public boolean equals(Object o) {
return (o instanceof CaseInsensitiveString) &&
((CaseInsensitiveString) o).s.equalsIgnoreCase(s);
}
這段代碼嗎中冗余的CaseInsensitiveString強制類型轉(zhuǎn)換可以去掉,轉(zhuǎn)換成下面的方式:
@Override public boolean equals(Object o) {
return (o instanceof CaseInsensitiveString cis) &&
cis.s.equalsIgnoreCase(s);
}
這個預(yù)覽特性很值得嘗試,因為它打開了通向更通用的模式匹配的大門。模式匹配的思想是為語言提供一個便捷的語法,根據(jù)特定的條件從對象中提取出組成部分。這正是instanceof操作符的用例,因為條件就是類型檢查,提取操作需要調(diào)用適當(dāng)?shù)姆椒ǎ蛟L問特定的字段。
換句話說,該預(yù)覽功能僅僅是個開始,以后該功能肯定能夠減少更多的代碼冗余,從而降低bug發(fā)生的可能性。
Record
另一個預(yù)覽功能就是record。與前面介紹的其他預(yù)覽功能一樣,這個預(yù)覽功能也順應(yīng)了減少Java冗余代碼的趨勢,能幫助開發(fā)者寫出更精準(zhǔn)的代碼。Record主要用于特定領(lǐng)域的類,它的位移功能就是存儲數(shù)據(jù),而沒有任何自定義的行為。
我們開門見山,舉一個最簡單的領(lǐng)域類的例子:BankTransaction,它表示一次交易,包含三個字段:日期,金額,以及描述。定義類的時候需要考慮多個方面:
構(gòu)造器
getter方法
toString
hashCode和equals
這些部分的代碼通常由IDE自動生成,而且會占用很大篇幅。下面是生成的完整的BankTransaction類:
public class BankTransaction {
private final LocalDate date;
private final double amount;
private final String description;
public BankTransaction(final LocalDate date,
final double amount,
final String description) {
this.date=date;
this.amount=amount;
this.description=description;
}
public LocalDate date {
return date;
}
public double amount {
return amount;
}
public String description {
return description;
}
@Override
public String toString {
return "BankTransaction{" +
"date=" + date +
", amount=" + amount +
", description='" + description + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this==o) return true;
if (o==|| getClass !=o.getClass) return false;
BankTransaction that=(BankTransaction) o;
return Double.compare(that.amount, amount)==0 &&
date.equals(that.date) &&
description.equals(that.description);
}
@Override
public int hashCode {
return Objects.hash(date, amount, description);
}
}
Java 14提供了一種方法可以解決這種冗余,可以更清晰地表達目的:這個類的唯一目的就是將數(shù)據(jù)整合在一起。Record會提供equals、hashCode和toString方法的實現(xiàn)。因此,BankTransaction類可以重構(gòu)如下:
public record BankTransaction(LocalDate date,
double amount,
String description) {}
通過record,可以“自動”地得到equals,hashCode和toString的實現(xiàn),還有構(gòu)造器和getter方法。
要想嘗試這個例子,需要用preview標(biāo)志編譯該文件:
javac --enable-preview --release 14 BankTransaction.java
record的字段隱含為final。因此,record的字段不能被重新賦值。但要注意的是,這并不代表整個record是不可變的,保存在字段中的對象可以是可變的。
如果你有興趣閱讀更多關(guān)于record的內(nèi)容,可以閱讀Ben Evans最近在《Java Magazine》上發(fā)表的文章(https://blogs.oracle.com/javamagazine/records-come-to-java)。
請繼續(xù)關(guān)注該功能。從培養(yǎng)新一代的Java開發(fā)者的視角來看,Record也很有意思。例如,如果你要培養(yǎng)初級開發(fā)者,那么record應(yīng)該什么時候講呢?是在講OOP之前還是之后?
PointerException
一些人認為,拋出PointerException異常應(yīng)該當(dāng)做新的“Hello World”程序來看待,因為PointerException是早晚會遇到的。玩笑歸玩笑,這個異常的確會造成困擾,因為它經(jīng)常出現(xiàn)在生產(chǎn)環(huán)境的日志中,會導(dǎo)致調(diào)試非常困難,因為它并不會顯示原始的代碼。例如,如下代碼:
var name=user.getLocation.getCity.getName;
在Java 14之前,你可能會得到如下的錯誤:
Exception in thread "main" java.lang.PointerException
at PointerExample.main(PointerExample.java:5)
不幸的是,如果在第5行是一個包含了多個方法調(diào)用的賦值語句(如getLocation()和getCity()),那么任何一個都可能會返回。實際上,變量user也可能是。因此,無法判斷是誰導(dǎo)致了PointerException。
在Java 14中,新的JVM特性可以顯示更詳細的診斷信息:
Exception in thread "main" java.lang.PointerException: Cannot invoke "Location.getCity" because the return value of "User.getLocation" is
at PointerExample.main(PointerExample.java:5)
該消息包含兩個明確的組成部分:
后果:Location.getCity無法被調(diào)用
原因:User.getLocation的返回值為
增強版本的診斷信息只有在使用下述標(biāo)志運行Java時才有效:
-XX:+ShowCodeDetailsInExceptionMessages
下面是個例子:
java -XX:+ShowCodeDetailsInExceptionMessages PointerExample
在以后的版本中,該選項可能會成為默認。
這項改進不僅對于方法調(diào)用有效,其他可能會導(dǎo)致PointerException的地方也有效,包括字段訪問、數(shù)組訪問、賦值等。
總結(jié)
Java 14提供了幾個新的預(yù)覽版語言特性和更新,能很好地幫助開發(fā)者完成日常工作。Java 14還引入了record,這是一種創(chuàng)建精確數(shù)據(jù)類的新方法。此外,PointerException的消息經(jīng)過了改進,能顯示明確的診斷信息。switch表達式也成了Java 14的一部分。文本塊功能可以幫你處理多行字符串,這是在引入了兩個新的轉(zhuǎn)義序列之后的另一預(yù)覽功能。還有一項改動就是JDK Flight Recorder的事件流。
可見,Java 14帶來了許多創(chuàng)新。你應(yīng)該嘗試一下這些功能,然后反饋給Java的開發(fā)團隊。
原文:https://blogs.oracle.com/javamagazine/java-14-arrives-with-a-host-of-new-features
本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。