zoukankan      html  css  js  c++  java
  • python(1)

        前面说过了,字符串也是一种数据类型,但字符串有一个特殊的问题,就是编码。

        因为计算机是美国人发明的,所以最早只有127个字符被编码到计算机里,就是大小写英文字母,数字和一些符号,这个编码表被称为ASCII码;但是我们要处理中文,这些编码肯定是不够的,所以中国制定了GB2312编码,用来把中文编进去;其它国家都有各自的编码。各自有各自的标准,如果混在一起,就会出现乱码。

        因此才有了Unicode编码,Unicodeu将所有语言统一到一套编码里,这样就不会出现乱码了。

        那为什么不统一使用Unicode编码呢?

        因为ASCII编码用一个字节表示一个字符,Unicode编码则用两个字节表示一个字符;如果你有一个英文书写的文档,那体积可能要大很多,在存储和网络传输中需要的资源就多,十分不划算。

        因此本着节约,又出现了UTF-8编码,它把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

    现在计算机系统通用的字符编码工作方式:

    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

    当我们打开一个文本文件时,先将utf-8转换为unicode载入内存中,当我们需要保存或网络传输时,则再转换成utf-8.

    由于python诞生在unicode标准发布之前,所以python2只支持ASCII编码,后来才添加了对unicode的支持,在字符串前加’u’,例如:

    print u’中文’

    encode(‘utf-8’)  函数可以将unicode编码转换成utf-8; 比如: u’中文’.encode(‘utf-8’)

    decode(‘utf-8’)  函数可以将utf-8编码转换成unicode;比如:‘abc’.decode(‘utf-8’)

    幸运的是,python3,我们不再需要考虑编码问题,中文直接使用即可。

    字符串的格式化:

    如果我们定义了一个变量 name = ‘jack’, 我们可能希望这样输出: “你好,我的名字是XXX!” XXX中的内容根据变量内容变化的。

    这时候就需要对字符串进行格式化,先看两个例子:

    >>> 'Hello, %s' % 'world'
    Hello world
    
    >>>'Hi, %s, you have %d.' % ('jack',10000)
    Hi, jack, you have 10000

    没错,% 就是用来格式化字符串的,如果有多个变量,需要用()括起来。

    常见的占位符有:

    %d     整数

    %s     字符串

    %f      浮点数

    %x     十六进制数

    对于浮点数还要以指定是否补0,整数与小数各有多少位,例如:

    >>> '%2d-%02d' % (3,1)
    '3-01'
    
    >>> '%.2f' % 3.1415926
    '3.14'

    如果你不确定该用什么,记住%s永远起作用,它会把任何类型数据转换为字符串。

    >>> 'I am %s , %s years old!' % ('jack', 25)
    'I am jack , 25 years old!'

    有时候我们需要输出清单,比如:

    姓名 : 张三
    年龄 :25
    职业 :IT

    可以这样进行格式化:

    >>>userinfo = '''
    ...    姓名: %s
    ...    年龄: %d
    ...    职业: %s
    ...'''  % ('张三',25,'IT')
    >>>print(userinfo)
       姓名':张三
       年龄:25
       职业:IT

    用三个引号括起来,三引号不仅可以用来注释代码,还可以用来格式化字符串。

    还有一种情况,%本身就是普通字符,比如要输出 7%

    >>> print('百分比:%d%%' % 7)
    百分比:7%

    这时需要用两个%来表示

  • 相关阅读:
    python调c++之caffe实现
    coco数据处理与分割
    一个队列类的实现(比delphi自带的速度快70倍) 转
    临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别(转)
    缇、像素转厘米的方法
    缇 磅 像素
    delphi RTTI 反射技术(转自朝闻道博客)
    emrDB本机异地泵导双备份并自动压缩 新.bat
    ORA-01589错误 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
    Oracle ORA-01033: 错误解决办法
  • 原文地址:https://www.cnblogs.com/huangxm/p/5140870.html
Copyright © 2011-2022 走看看