python2與python3的print及字串格式化總結
最近一直在用python寫程式,對於python的print一直很惱火,老是不按照預期輸出。在python2中print是一種輸出語句,和if語句,while語句一樣的東西,在python3中為了填補python2的各種坑,將print變為函式,因此導致python3中print的一些使用和python2很不一樣。同時,python3大改python2中的字串格式化,主推format()函式格式,用法很是靈活,讓老使用者一時摸不著頭腦。今天特來總結一樣print和format,也希望能幫助大家徹底理解它們。
1.print使用說明
在python2中print是這樣的:
在python3中print是以函式形式出現的:
可以很明顯的看出python3已經不支援print非函式格式了,在python3中使用print,必須加()。
我們在python3中help(print): (注意,在python2中是不能help(print)的,因為其不是一個函式)
可以清楚看到print函式的幾個引數,file是檔案描述符,flush控制是否沖刷緩衝區,end為結束字元,預設為換行,sep是輸出的幾個變數間的字元,預設為空格。弄清楚這些,以後操作起來就順溜了。
試試看:
上面是python3,可以看到改變end為空字元就能避免換行,下面是python2,奇怪的是說好的不換行還是換了。。。
誰能告訴我怎麼打出a不換行啊。。。
總結一下,感覺python3還是非常優秀的,比python2上了一個檔次,更加方便開發者了,與python2中異常醜陋的print >> file相比,print的函式化確實更上一層樓。print也就這樣啦,下面來看看字串格式化把。
2. 字串格式化
在python2中一直使用形如: “%s .... %d” % (str, ... , intNum)格式化字串的。這是python從C系列借鑑過來的語法,但是這種語法對於C這種靜態語言足夠快足夠好,但是對於擁有很多先進資料結構的python來說就有點心有餘來力不足了。為什麼這麼說呢?python的幾把利刃:元組,列表,字典,集合等不適合用這種結構表示,這些利刃大多元素用下標表示,在這種結構中寫出來很醜陋,不信你試試。
不管怎麼樣,這種表示方法還是必須掌握的,大多數情況下表示起來還是特別快速的。
字串格式化程式碼:
格式 | 描述 |
---|---|
%% | 百分號標記 |
%c | 字元及其ASCII碼 |
%s | 字串 |
%d | 有符號整數(十進位制) |
%u | 無符號整數(十進位制) |
%o | 無符號整數(八進位制) |
%x | 無符號整數(十六進位制) |
%X | 無符號整數(十六進位制大寫字元) |
%e | 浮點數字(科學計數法) |
%E | 浮點數字(科學計數法,用E代替e) |
%f | 浮點數字(用小數點符號) |
%g | 浮點數字(根據值的大小採用%e或%f) |
%G | 浮點數字(類似於%g) |
%p | 指標(用十六進位制列印值的記憶體地址) |
%n | 儲存輸出字元的數量放進引數列表的下一個變數中 |
看著這麼的多格式,其實常用的也就那麼幾個,總結一些只需要記住: %d, %s, %f就OK了,其實等需要用的時候查詢就可以了,畢竟我們大腦的資源是很寶貴的,可不能全用來記這些死板的東西
再來看看《Python基礎程式設計》中對格式化輸出的總結:
(1). %字元:標記轉換說明符的開始
(2). 轉換標誌:-表示左對齊;+表示在轉換值之前要加上正負號;“”(空白字元)表示正數之前保留空格;0表示轉換值若位數不夠則用0填充
(3). 最小欄位寬度:轉換後的字串至少應該具有該值指定的寬度。如果是*,則寬度會從值元組中讀出。
(4). 點(.)後跟精度值:如果轉換的是實數,精度值就表示出現在小數點後的位數。如果轉換的是字串,那麼該數字就表示最大欄位寬度。如果是*,那麼精度將從元組中讀出。
下面來看看python3主打的格式化函式format().
字串的format函式可以通過以下幾個方式靈活的完成字串格式化:
1. 通過位置標號
{0}表示第一個元素, {1}表示第二個元素, {2}表示第三個元素,以此類推。。。
注意在這裡的順序是按照format中的引數順序而言的,在字串中{0},{1}位置隨便。
2.通過關鍵字引數
3.通過屬性和下標
但是不知道字典怎麼回事,和正常的鍵值索引不一樣,貌似字串不需要加引號,加引號反而出錯了。。。
各位可以自己試一下。當鍵值為整數的時候可以順利輸出,鍵值為字串時不需要加‘’。
4.格式化限定符
{0:0.2f} {1:3d},在序號後面加上格式符就可以了,不用加%哦。
5.填充與對齊(更加方便的語法,雖然用到的比較少)填充常跟對齊一起使用
^、<、>分別是居中、左對齊、右對齊,後面頻寬度
:號後面帶填充的字元,只能是一個字元,不指定的話預設是用空格填充
是不是很方便,注意<>^號後面加寬度哦。
好啦,print和格式化的用法基本講完了。大家掌握的怎麼樣啦下面還沒完,略微吐槽一下python中矩陣的輸出。。。
在python2.7.6中矩陣輸出:
在python3.4中還是不能正常輸出,總是錯位。。。
因為現在python主打大資料領域,所以特別希望python未來能特別為矩陣輸出優化一下。
相關推薦
python2與python3的print及字串格式化總結
最近一直在用python寫程式,對於python的print一直很惱火,老是不按照預期輸出。在python2中print是一種輸出語句,和if語句,while語句一樣的東西,在python3中為了填補python2的各種坑,將print變為函式,因此導致python3中pr
Python隨心記--集合及字串格式化
可變不可變型別 可變:列表、字典 不可變變數:字串、數字、元祖訪問順序 直接訪問:數字 順序訪問:字串、列表、元祖 對映:字典存放元素個數 容器型別:列表、元祖、字典 原子容器:數字、字串 集合定義 集合自能存放不可變型別變數:字串、數字、元祖 集合
709 to lower case 及字串方法總結
/** * @param {string} str * @return {string} */ var toLowerCase = function(str) { var result = ''; for(var i =0; i<
python2 與 python3 不相容問題總結【持續更新】
1.python3 下報錯:’dict’ object has no attribute ‘iteritems’ python2 下為 .iteritems() python3 下為 .items() a={'1':1,'2':2} a.items() O
Python中的元組,字典、計算器代碼實例及python2與python3的區別
所有 time tor result inpu __name__ 字符 img 歡迎來到 1.計算器實例#/usr/bin/env python # -*- coding:utf-8 -*- # @time :2018/1/22 21:09 # @Author :Fen
python2 與python3 的總結
環境 關聯 無序 python3 range 重復 post 區別 odin 1.python2,python3區別大環境下: python2: 1,源碼都含有php,Java,C,等語言的規範陋習, 2,重復代碼特別多.python3:源碼很規範,清晰,簡
python字串格式化% 操作符 {}操作符 python字串格式化 %操作符 {}操作符---總結 Python字串格式化 (%佔位操作符)
python字串格式化 %操作符 {}操作符---總結 Python字串格式化 (%佔位操作符) 在許多程式語言中都包含有格式化字串的功能,比如C和Fortran語言中的格式化輸入輸出。Python中內建有對字串進行格式化的操作 %。 模板 格式化字串時,Python使用一個字串作為模板。模
java二進位制數原碼補碼反碼,運算子 與(&)、非(~)、或(|)、異或(^)及位運算總結
看過博主另一篇文章--Java集合--HashMap,對裡面使用的運算子及位運算不是很清楚的童鞋可以看下這篇文章,對理解hashMao原始碼很有幫助,自己也可以在程式中寫寫,逼格絕對滿分!!! 大家都知道一個位元組是8個二進位制
Python類與物件技巧(1):字串格式化、封裝屬性名、可管理的屬性、呼叫父類方法
1. 自定義字串的格式化 _formats = { 'ymd' : '{d.year}-{d.month}-{d.day}', 'mdy' : '{d.month}/{d.day}/{d.year}', 'dmy' : '{d.day}/{d.month}/{d.ye
字串屬性及方法大總結
字串屬性及方法 .length  
NOIP總結與反思及對今後的期望
對於OI 雖然成績還未出,反正1=是肯定沒有了的。 洛谷283,牛客276。 橫豎沒有1=。 但是比賽什麼的不僅要寫遊記,還要寫反思。不然比賽有啥意義。 檢查檔案是否會CE,如果有分的題被CE了是很可惜的。(比如這次day1t3) 檢查資料夾,輸入輸出檔案。
2018年12月7日 字串格式化2 format與函式1
tp7="i am \033[44;1m %(name)-25.6s\033[0m"%{"name":"sxj2343333"} print(tp7) #-為左對齊,\033[44;1m \033[0m 為選取44色號的顏色 tp1="I am {},age{}
Atitit 演算法原理與導論 目錄 1. Attilax總結的有用演算法 按用途分類 1 1.1. 排序演算法 字串匹配(String Matching) 1 1.2. 加密演算法 編碼演算法 序列
Atitit 演算法原理與導論 目錄 1. Attilax總結的有用演算法 按用途分類 1 1.1. 排序演算法 字串匹配(String Matching) 1 1.2. 加密演算法 編碼演算法 序列化演算法 1 1.3. 查
python2 與 python3 編碼問題總結
之前遇到過好多各種各樣的問題, 特別是在python2下, 先在準備總結, 遇到一個總結一個: unicode 字元在python2下采用 ,在python3下統一為 string 型別. 那麼
Python--字串 及 切片--學習總結
Python的簡單輸入輸出函式: 輸出函式: # 符號要用英文符號 print("這是輸出函式”); 輸入函式: input("現在可以輸入了:"); # 把輸入的資料賦值給變數 name = input("輸入值賦值給name:"); 例如: name =
php xml與陣列轉換問題,封裝方法及字串替換
/** * [將xml轉為array] * @param string $xml xml字串或者xml檔名 * @param bool $isFile 傳入的是否是xml檔名 * @re
JAVA字串格式化-String.format()的使用總結
1.常規型別的格式化 String類的format()方法用於建立格式化的字串以及連線多個字串物件。熟悉C語言的同學應該記得C語言的sprintf()方法,兩者有類似之處。format()方法有兩種過載形式。 |-----format(S
塊級元素與內聯元素(行內元素)及浮動知識總結
塊級元素 顧名思義就是以塊顯示的元素,高度寬度都是可以設定的。比如我們常用的div、p、ul預設狀態下都是屬於塊級元素。塊級元素比較霸道,預設狀態下每次都佔據一整個行,寬度始終是與瀏覽器寬度一樣,塊級
c++字串、陣列輸入輸出及相互轉化總結
★★int轉char //輸出a,i當作十進位制ASCii碼看待。 i=97; c=i; cout<<c; ★★int轉char陣列 //方法一:使用itoa()函式。10表示進位制。只能用整數轉陣列。 itoa(i,cc,10); //方法二:使用spr
Python之time模組的時間戳、時間字串格式化與轉換(13位時間戳)
Python處理時間和時間戳的內建模組就有time,和datetime兩個,本文先說time模組。 關於時間戳的幾個概念 時間戳,根據1970年1月1日00:00:00開始按秒計算的偏移量。 時間元組(struct_time),包含9個元素。 t