python实用小语法
一:常用类型转换
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串,repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。 repr和反引号` `一样的作用。他们与eval是相反的一对
eval(str ) 用来计算在字符串中的有效python表达式,并返回一个对象
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为unicode字符
ord(x ) 将一个字符转换为它的整数值,即将一个unicode字符转为对应的整数值
例如:将a=u‘盤’(其unicode为76e4,即等价于a=u'盤')转化为一个16进制数字符串'76e4'
方法为:b=%x %ord(a)即得到字符串'76e4',
若要将字符串'76e4'转化为a=u'盤’
方法为:a=unichr(eval(0x+b))或者b=eval(u'\u+a+')
hex(x ) 将一个整数转换为一个十六进制字符串,十六进制的字符串转数字只要使用eval即可以
oct(x ) 将一个整数转换为一个八进制字符串
设var是一个任意类型的变量
则
>>var
>>print repr(var)
的输出是一样的,
repr(var)的输出=var的输出两边加入,即把var的输出转换为字符串
id(x): x的内存id
a is b: a和b指向同一个引用,即内存id相同
a=eval('{city:beijing,street: chaoyang road ,postcode:100025}')
eval用于计算字符串的python语法值
与exec( 'a={city:beijing,street: chaoyang road ,postcode:100025}')有点不一样
exec用于执行一段语句
当一个字符串被exec,eval(),或execfile()执行时,解释器会先将它们编译为字节代码,然后再执行.这个过程比较耗时,所以如果需要对某段代码执行很多次时,最好还是对该代码先进行预编译,这样就不需要每次都编译一遍代码,可以有效提高程序的执行效率。
compile(str ,filename ,kind )函数将一个字符串编译为字节代码
===========================================================
二:自动识别字符串编码与汉字转unicode字符串
isinstance(s, unicode) 用来判断是否为unicode
isinstance(a,type):a是否为type类型,返回bool值,true值为1,false为0。
type(str).__name__!=unicode#只有unicode与str两种类型,没有utf8的判断。
1.自动识别字符串编码: #coding:utf8 #chartdet官方下载网站https://pypi.python.org/pypi/chardet import urllib import chardet rawdata = urllib.urlopen('https://www.google.cn/').read() print chardet.detect(rawdata) 输出: #confidence是可信度,encoding是编码 {'confidence': 0.99, 'encoding': 'utf-8'} 2.汉字转化为unicode编码 name = u'中国' tmpname = for c in name: c = %%u%04x % ord(c)#格式化输出 tmpname += c print tmpname >>>%u4e2d%u56fd 其实有更好的方法:使用repr或(反引号,它们等价) repr(name).strip(u').replace('\','%').upper().replace('u','u') >>>%u4e2d%u56fd ====================================三:python编码解码注意的两点
一:有句话常说,都转为utf8处理。有问题,应该是都转为unicode处理。一般文本文件的编码是utf8,在代码里用utf8解码为unicode,写文件时把unicode编码为utf8,然后写入文件。 二:windows中cmd的中文编码是gb2312,所以如果print以utf8编码的中文会乱码 如下例: name=中国#为gb2312 name1=name.decode('gb2312')#转为unicode name2=name1.encode('utf8')转为utf8 print name2 >>>涓?浗 乱码了!!! 而print name和print name1都没问题,说明windows的cmd窗台不支持utf8编码,支持unicode和gb2312 ============================================四:python中字符串前r的作用,举例:
a=r'\'#相当于a='\\',即两个\符号 print a >>>\ a >>>'\\' =========================================五:python 打印所有汉字:
n=0 for ch in xrange(0x4e00, 0x9fa6): print unichr(ch), n = n+1 if(n%50==0): print ' ' print n
一个int,32位,一个16进制4位,所以32位的数用8个16进制就可以表示 一个char一个字节即8位,即两个16进制 一个汉字两个字节即16位,即用4个16进制 ========================================================
六:使用print写文件,所见即所得
写文件,除了常用的文件f=open('test','w')的write函数可以利用print把print的内容写入文件, 用法如下,print >>f,'ab',不过这样会加入换行 =========================================================七:repr和eval灵活的用可以产生很多效果
例如:要把字符串a='76e4'转成b=u'盤'即所对应的汉字盤 方法如下:b=eval(u'\u+a+')即可或b=unichar(eval(0x+a)) =========================================================八:在十进制,十六进制,八进制之间转换的方法:
只有十进制是指的数,十六进制和八进制都是字符串,十六进制以0x开头,八进制以0开头,下面只介绍十进制与十六进制之间互相转换,十进制与八进制间互相转换的办法。十六进制和八进制之间的转换可以通过十进制为媒介。 十进制a=1356转为十六进制b='0x54c' >>>b=hex(a) 十六进制b='0x54c'转为a=1356 >>>a=eval(b) 十进制a=1356转为八进制b='02514' >>>b=oct(a) 八进制b='02514'转为a=1356 >>>a=eval(b) ==========================================================九:改变python的工作目录
import os
# 获得当前目录 >>> os.getcwd() '/home/piglei' # 改变工作目录 >>> os.chdir(dev/)>>>os.chdir(dev//)
要注意的是,在很多语言,python,html,windows 资源管理器中地址中'/'和''一样,不过由于通常用于转义,所以表示''得用一个反转义'\'
所以使用反斜杠作为目录层级标志的话,必须os.chdir(dev//)或者os.chdir(rdev//)
================================================
十:若代码中含有中文,注意在代码的开头加入
# -*- coding:utf-8 -*-
上一篇: 做双皮奶需要蒸几分钟?