編碼的問題python
中文版 Windows 終端是默認GBK編碼格式,python2默認爲ASCII編碼,雖然咱們註釋了須要用UTF-8,可是經過命令行運行的文件若是print中文內容仍是會出現亂碼。ubuntu
Unicode, UFT-8, GBK 分別是三種不一樣的編碼,Unicode在轉爲UTF-8或GBK時須要通過編碼的過程,而UTF-8或GBK變爲Unicode則須要通過解碼。所以UTF-8和GBK的轉化就須要通過一個解碼和編碼的過程。因此即便咱們在py文檔裏註明了使用utf-8編碼,在默認使用gbk的終端裏,出現的中文是會亂碼的。windows
所以,在中文windows終端運行python2文件,咱們須要對內容先解碼再編碼,以下: 這樣之後咱們在終端看到的就能夠是正確的中文字了 (使用decode()和encode()先將內容從utf-8解碼,而後再編碼爲gbk顯示)api
在python3裏,python編碼作了優化,自身轉化utf-8, unicode, gbk, 移除了python的utf-8類型python2.7
**Q: python3裏的文本均可以正常顯示在終端裏,在使用python2.7的Ubuntu裏,直接print的中文正常顯示,而decode再encode的中文字符反而亂碼了。TBD ide
naomi@ubuntu:~/Desktop$ cat test #!/usr/bin/python # -*- coding:utf-8 -*- val = '中文咯' val_unicode = val.decode('utf-8') val_gbk = val_unicode.encode('gbk') print(val_gbk) print('這也是中文')
運算符測試
'//' 取整 優化
使用PyCharm IDE來建立Python項目文件,設置默認模板(Files - Settings - Editor - File and Code Template 在python文件裏添加 #!/usr/bin/python 設置便可)this
python2裏的'/'除法不顯示小數的問題,能夠經過from __future__ import division 來獲得小數結果 編碼
PyCharm裏p2和p3的切換:files - settings - 目標project - interpreter 選擇p3便可
成員運算符
in
not in
str1 = 'big brother is watching you' text1 = 'big' in str1 text2 = ' ' in str1 text3 = 'isw' in str1 text4 = 'ther' in str1 print(text1) # True print(text2) # True print(text3) # False print(text4) # True list1 = ['big', 'brother', '1', 'watching', ' you'] text5 = 'big' in list1 text6 = ' ' in list1 text7 = 'ther' not in list1 print(text5) # True print(text6) # False print(text7) # True
身份運算 [TBD]
基本數據類型 [每一個數據類型的功能能夠經過在pycharm裏按ctrl點擊要further的內容找到reference]
數字 int
字符串 str
布爾值 bool
列表 list
元組 tuple
字典 dict
查看對象的類,或對象所具有的功能
.type() 能夠獲取每一個變量的數據類型
.dir() 能夠獲取某個變量所具有的全部功能
.help('類') 查看某個類的具體方法及其用法
a = 'andy' print(type(a)) # 獲得結果 <class 'str'> print(dir(a)) # 獲得字符串 a 所具備的全部方法 b = help(a) # 顯示'andy' 字符串並無python文檔 c = help(type(a)) # 顯示 字符串 類 的全部信息(包括方法的解釋說明)
基本數據類型的經常使用功能
1. 整數int型
number1 = 1 number2 = 2 print(number1 + number2) # 效果和下面一行同樣。本質是調用了number1的__add__()方法先進行了轉換 print(number1.__add__(number2)) # bit_length()表示某個整數的二進制至少佔幾位 # 以下面計算數字的二進制佔位 number3 = 4 # 00000100 number4 = 1024 # 10000000000 print(number3.bit_length()) # 結果3, 至少佔3位 print(number4.bit_length()) # 結果11, 至少佔11位
2. 字符串str型
s1 = 'andy' # 字符串改成首字母大寫 print(s1.capitalize()) # Andy # 將字符串按照指定長度居中,空白按需補足 print(s1.center(20,'*')) # center()方法第一個參數是設置總字符串長度,第二個參數用於填充空白 # ********andy******** # 數出子字符串在字符串中出現的次數 s2 = 'andy dufresne stands for hope' print(s2.count('a')) print(s2.count('e')) # 計算'a'在s2字符串裏出現的次數 結果爲 2 # 計算'e'在s2字符串裏出現的次數 結果爲 3 print(s2.count('d', 0, 4)) # 數出'd'在s2字符串從第1到第4位置出現的次數,結果爲 1 # 判斷字符串是否以某子字符串結尾 print(s2.endswith('e')) print(s2.endswith('hope')) print(s2.endswith('a')) # 判斷是否以特定字符串結尾 結果分別爲True, True, False print(s2.endswith('dy',0,4)) # 還能夠指定字符串的起始和終止位置,如上例,判斷s2字符串第一到第四位字符串是否以'dy'結尾,結果返回True # 將tab轉爲8個空格 s3 = 'hello\tworld' print(s3.expandtabs()) print(s3.expandtabs(20)) # expandtabs() 方法將字符串裏的tab自動轉爲空格,默認轉8個空格,在參數裏能夠指定空格數量 # 因爲編譯器可能會自動將鍵盤輸入的tab鍵轉爲空格,咱們能夠經過'\t'來肯定輸入的tab # 在字符串裏找到子序列並返回位置 print(s3.find('he')) print(s3.find('l')) print(s3.find('n')) # find()方法在s3字符串裏順序查找'he', 'l', 'n',一旦找到就返回起始位置,且僅返回第一個找到的字符串的位置。 # 若是說s3裏沒有想要查找的字符串,結果返回-1 # 上例結果分別爲0, 2, -1 # format()字符串格式化,動態參數 s4 = 'hello {0} from {1}' s5 = s4.format('bender', 'futurama') print(s5) # s4裏的{0}, {1}至關因而一個placeholder,利用format能夠按序輸入參數 # 如上例結果就是 hello bender from futurama # index() 找到子序列的位置,若是沒有找到,報錯 # 相似 find()功能
查看源碼來看一個方法是否須要傳入參數,傳入幾個參數。若是源碼裏只有(self),則不須要傳參數
功能裏參數輸入的地方(self, arg0, arg1 = None, arg2 = None)以左爲例,最多傳3個參數,第一個參數arg0必傳, 第二個和第三個參數默認爲None,能夠不傳也能夠傳
s6 = 'andY56' print(s6.isalnum()) # 判斷字符串是否全是字母和數字 print(s6.isnumeric()) # 判斷是否去哪是數字 False print(s6.isalpha()) # 判斷是否全是字母 False # isspace() 肯定是否全部都是空格 space1 = ' \t \n ' print(space1.isspace()) # 判斷是否全部都是空格 True # istitle() 肯定一個字符串是否爲標題 title1 = 'The School' title2 = 'Old McDonald Has a Farm' print(title1.istitle()) # 判斷是不是標題,全部單詞首字母大寫,且其餘字母小寫 print(title2.istitle()) # McDonald人名出現兩個大寫判斷爲False, 冠詞a首字母沒有大寫判斷False,因此其實這個方法並不能真實判斷一個字符串是否爲標題 # join方法將可迭代的參數經過指定的字符鏈接起來 # 以下,將一個list經過' '空格或者 '***'鏈接起來 一樣適用於元組 list1 = ['kenny', 'is', 'mysterion'] joint1 = ' ' joint2 = '***' print(joint1.join(list1)) # kenny is mysterion print(joint2.join(list1)) # 獲得結果kenny***is***mysterion # ljust() 內容左對齊,能夠指定長度,右邊按需填充 str1 = ' well this is embarrassing' print(str1.ljust(30), '---') # 獲得結果 well this is embarrassing --- # 指定長度若是超過字符串長度,超過的部分爲空格,而後在後面再添加'---',若是指定寬度小於字符串,則將字符串輸出完畢後再加上添加的'---' # 若是改成rjust, 則變爲右對齊 # strip(), lstrip(), rstrip() 分別去除字符串兩邊的空格,左邊的,右邊的 str2 = ' obviously this is a test ' print(str2.strip()) # 結果爲'obviously this is a test' print(str2.lstrip()) # 結果爲'obviously this is a test ' print(str2.rstrip()) # 結果爲' obviously this is a test' # partition() 將字符串分割爲前,中,後三個部分 str3 = 'knock knock knock ' print(str3.partition('ock')) # 結果爲 ('kn', 'ock', ' knock knock ') # replace() 輸入須要替換的內容,替換後的內容,替換的次數(不輸入默認所有替換) print(str3.replace('kn', 'kk')) # 結果 kkock kkock kkock print(str3.replace('kn', 'kk', 2)) # 結果 kkock kkock knock # 輸入數字超過3 以及負數,發現結果是所有都替換了 # 輸入數字0,則沒有替換 # split() rsplit() 將字符串按照要求分割 str4 = ' split this sentence ' print(str4.split()) # 不指定的時候,按照空格分隔 ['split', 'this', 'sentence'] print(str4.rsplit('i')) # 出現'i' 就分割一次 print(str4.rsplit('e',2)) # 從右邊開始看到'e'分割,一共分割兩次 # 在stackoverflow 裏看到有人問split()和rsplit()的效率問題,經過timeit()測試得知這兩個方法的速度差很少(split()略快一點點能夠忽略不記),不過rsplit()還須要多打一個'r',因此看來若是知足一樣的需求採用split()便可 # splitlines() 根據換行符分割 str5 = '''remember remember the fifth of November\n hmm \n not funny actually \nbummer''' print(str5.splitlines()) # 獲得結果 ['remember', 'remember', 'the fifth of November', ' hmm ', ' not funny actually ', 'bummer'] # swapcase() 改變大小寫 str6 = 'Ah.... The FrAy aNd ColdPlay' print(str6.swapcase()) # 獲得結果 aH.... tHE fRaY AnD cOLDpLAY # title() 自動變成title 格式 print(str6.title()) # 結果 Ah.... The Fray And Coldplay
字符串索引
string[0], string[-3]
字符串切片
string[2:], string[2:12], string[-3:]
for 循環
for item in string:
print(item)
依次輸出string裏的內容
for循環液能夠搭配break, continue 來使用
# string的索引,切片 str7 = 'string_example' print(str7[-3:]) print(str7[3:]) print(str7[:]) str8 = 'python' for i in str8: print(i) ''' 獲得結果: p y t h o n '''