1、要點
?? (1) 在C語言中沒有字符串,只有字符,
?? 在python中的字符串hello,在C語言中是以字符數(shù)組在內(nèi)存存放['h','e','l','l','o'],如果對字符串修改,則是在內(nèi)存中新開辟了一段空間進行存放。
?? 字符串特性:一旦修改,需要重新創(chuàng)建。
?? 例: "hello" + "ni" + "hao"????? 內(nèi)存中:['h','e','l','l','o'] + ['n','i'] + ['h','a','o']
?? 萬惡的“+”,“+”號越多,在內(nèi)存中多次重復(fù)創(chuàng)建,浪費空間。
?? C語言需要手動回收,而python,C#等高級語言自帶虛擬機會進行GC垃圾回收沒有被調(diào)用的內(nèi)存訪問空間。
?? (2) python字符串的格式化(占位符)可以節(jié)省內(nèi)存空間,有如下二種方式,例:
?說明:第二種format方式的效果會更好,性能更好,其實變量a的值沒有變,在格式化賦值時會在內(nèi)存中新開辟空間存放。在python2.7和python3.4中測試結(jié)果相同
>>> a = 'i am %s,age is %d' >>> a % ('wangkai',33) 'i am wangkai,age is 33' >>> print(a) i am %s,age is %d >>> a = 'i am {0},age is {1}' >>> a.format('wangkai',33) 'i am wangkai,age is 33' >>> print(a) i am {0},age is {1}
(3) 在python中會生成一個緩存池來節(jié)省內(nèi)存空間,主要存放經(jīng)常用到的字符串及數(shù)字,所以在一定范圍內(nèi)對變量賦同樣的值,他們的id值是一樣的,當(dāng)超出這個池的時候,id值則會不同
?????? 分別在python2.7和python3.4版本中進行測試,測試結(jié)果如下:(經(jīng)測試在python2.7和python3.4中效果一樣)
?????? 針對字符串,無限制
>>> a = 'asdfsafsafasfsafasdfasfasfasf' >>> b = 'asdfsafsafasfsafasdfasfasfasf' >>> id(a),id(b) (140704388394128, 140704388394128) >>> a = 'ni' >>> b = 'ni' >>> id(a),id(b) (140704388417416, 140704388417416)
?????? 針對數(shù)字,范圍:小于-5,大于256
>>> a = -5 >>> b = -5 >>> id(a),id(b) (8745920, 8745920) >>> a = -6 >>> b = -6 >>> id(a),id(b) (140718131946128, 140718131946320) >>> aa=256 >>> bb=256 >>> id(aa),id(bb) (8754272, 8754272) >>> aa = 257 >>> bb = 257 >>> id(aa),id(bb) (19083048, 18637656)
??????? 具體python源碼對數(shù)字的定義如下:
??? (4) python內(nèi)部執(zhí)行過程:
??? (5) print說明:
???? Python 2中的print語句被Python 3中的print()函數(shù)取代,這意味著在Python 3中必須用括號將需要輸出的對象括起來。
???? 特別說明:經(jīng)測試在python2.6、python2.7,print作為語句,但已支持括號方式,例:a = 1 print a print(a)均可;
?????????????????? 在python3.4版本中,print作為函數(shù),只支持括號方式。
????? 建議:為了代碼在python2和3上的兼容性,請直接使用print函數(shù)括號方式。
2、編碼轉(zhuǎn)換
?? 一般硬盤存儲為utf-8,讀入內(nèi)存中為unicode,二者如何轉(zhuǎn)換
????? a = '你好'????????????? '\xe4\xbd\xa0\xe5\xa5\xbd'????
????? b = u'你好'???????????? u'\u4f60\u597d'???????????????
????? a.decode('utf-8')?????? u'\u4f60\u597d'?? (utf-8格式解碼為unicode)
????? b.encode('utf-8')?????? '\xe4\xbd\xa0\xe5\xa5\xbd'? (unicode格式加密為utf-8)
??? 注:在python2.7版本中需要如上轉(zhuǎn)換,在腳本中如要顯示中文,
??????? 只要在文件開頭加入 # _*_ coding: UTF-8 _*_ 或者 #coding=utf-8 就行了
??????? 在python3.4以后版本,無需轉(zhuǎn)換
?3、調(diào)用系統(tǒng)命令,并存入變量:
??? 1.import os
??? a = os.system('df -Th')
??? b = os.popen('df -Th','r') 返回一個文件對象
??? 2.import commands
??? c = commands.getoutput('df -Th')? 返回一個字符串
4、sys調(diào)用
??? import sys
??? sys.exit
??? print sys.argv
??? sys.path
5、導(dǎo)入模板方法:
????? 1.import sys [as newname]?
??? 多次重復(fù)使用import語句時,不會重新加載被指定的模塊,只是把對該模塊的內(nèi)存地址給引用到本地變量環(huán)境。
????? 2.from sys import argv或(*)
????? 3.reload()
??? reload會重新加載已加載的模塊,但原來已經(jīng)使用的實例還是會使用舊的模塊,而新生產(chǎn)的實例會使用新的模塊;reload后還是用原來的內(nèi)存地址;不能支持from。。import。。格式的模塊進行重新加載。
?? 建議使用第一種,第二種導(dǎo)入的對象或變量會與當(dāng)前的變量會沖突。
6、用戶交互:
???? 在python2.7版本中
??????? raw_input:交互輸入內(nèi)容轉(zhuǎn)化為字符串;
??????? input:交互輸入內(nèi)容不進行轉(zhuǎn)化;
???? 在python3.4版本中只有input,想要獲取數(shù)字,需要進行int轉(zhuǎn)變。
???? 舉例:
#_*_ coding:utf-8 _*_ info = 'This var will be printed out ...' name = raw_input('Please input your name:') age = int(raw_input('age:')) #age = input('age:') job = raw_input('Job:') salary = input('Salary:') print type(age) print ''' Personal information of %s: Name: %s Age : %d Job : %s Salary: %d -------------------------- ''' % (name,name, age,job,salary)
7、用戶輸入內(nèi)容隱藏:
??? 輸入密碼時,如果想要不可見,需要利用getpass 模塊中的 getpass方法,即:
>>> import getpass >>> pwd = getpass.getpass("please input the passwd:") please input the passwd: >>> print(pwd) asdfasdfa
8、文件操作:??
?? python2.7版本中可以用file和open打開文件,? python3.4版本中只有open
?????? f = open('file_name','r')
?????? g = file('file_name','r')?
?? 其中打開模式有'r','w,','a','b','+'
?????? w:替換重寫?? a:追加?
?????? b:二進制文件,主要用于跨平臺,來解決window和linux的回車換行區(qū)別
?????? +:用于同時讀寫
?? * 一般會對文件讀到的第一行去掉末尾的換行符????? f.readline().strip('\n')
?? * xreadlines:針對大文件,一行一行讀,默認(rèn)是把全文件讀入內(nèi)存。
?? * r+ :讀寫,默認(rèn)從文件尾寫入,可以由seek跳到指定位置,然后替換文件內(nèi)容。
?? 初始文件aa.txt
kevin:123:1
wang:22:2
kai:311:3
?對python2.7和python3.4測試結(jié)果一樣。
# _*_ coding: UTF-8 _*_ import sys,os file = sys.argv[1] f = open(file,'r+') line_list = f.readlines() new_list = [] for line in line_list: #去掉行尾的換行符 line = line.strip('\n') #對行信息按分隔符進行分列 value_list = line.split(':') #獲取最后一字段并數(shù)字化 last_value = int(value_list[-1]) #對最后一字段進行數(shù)字計算 last_value *= 13 value_list[-1] = str(last_value) #將列表轉(zhuǎn)變?yōu)樽址? new_str = ':'.join(value_list) #將循環(huán)的改變后的行追加到新的列表 new_list.append(new_str) ''' ######第一種方法按行追加到文件##### #按修改后的行追加到文件中 #f.writelines(new_str + '\n') ''' ''' #####第二種方法將所有行統(tǒng)一追加到文件##### #將所有修改后的新列表轉(zhuǎn)化為字符串 my_str = '\n'.join(new_list) #將指標(biāo)移到行首 f.seek(0) #將寫回到文件 f.write(my_str + '\n') ''' f.close()
9、類型轉(zhuǎn)變:
Python 有辦法將任意值轉(zhuǎn)為字符串:將它傳入repr() 或str() 函數(shù)。
函數(shù)str() 用于將值轉(zhuǎn)化為適于人閱讀的形式,而repr() 轉(zhuǎn)化為供解釋器讀取的形式(如果沒有等價的
語法,則會發(fā)生SyntaxError 異常) 某對象沒有適于人閱讀的解釋形式的話, str() 會返回與repr()等同的值。很多類型,諸如數(shù)值或鏈表、字典這樣的結(jié)構(gòu),針對各函數(shù)都有著統(tǒng)一的解讀方式。字符串和浮點數(shù),有著獨特的解讀方式。
Some examples:
下面有些例子
>>> s = 'Hello, world.' >>> str(s) 'Hello, world.' >>> repr(s) "'Hello, world.'" >>> str(1.0/7.0) '0.142857142857' >>> repr(1.0/7.0) '0.14285714285714285'
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
