1. 程式人生 > >python2與python3的print及字串格式化總結

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未來能特別為矩陣輸出優化一下。


相關推薦

python2python3的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中的元組,字典、計算器代碼實例python2python3的區別

所有 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