欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python实用小语法

程序员文章站 2022-07-07 07:59:22
  一:常用类型转换 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串,repr()是将一个对象转成字符串显示,注意只是显示用,...

 

一:常用类型转换

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 -*-