喜欢小之的文章的可以关注公众号「WeaponZhi」持续关注动态

这是「AI 学习之路」的第 3 篇,「Python 学习」的第 3 篇

Python 字符串使用和 C 语言比较类似,但还有一些我们值得注意的地方需要关注,用这篇文章来帮助大家掌握 Python 的字符串吧!

编码

不论什么语言,我们都需要考虑一下这个语言的编码问题。「ASCII」编码是我们最熟悉的编码,但它只有 127 个字符被编码到计算机里面了,显然,像中日韩这类国家,语言文字比较特殊,就需要自己来指定编码格式。

比如,中国自己就制定了「GB2312」编码,韩文则是「EUC_KR」,俄语是「KOI8-R」,显然,如果每一个国家都需要制作一个适配的编码,那我们的计算机世界就要乱套了,不同国家之间信息的传输将变的寸步难行。如果电脑里没有某个语言的编码,那就会产生乱码冲突,这是相当麻烦的。

所以,大家商量了一下,就做出了「Unicode」这么个编码格式,它干脆把所有的编码都统一了,只要你用 Unicode 它就能保证没有乱码问题。

但 Unicode 也有缺点。比如如果一个文件是纯英文来写的,那所有的字符实际上都可以用过 ASCII 的 8 位二进制来表示。我们知道 Unicode 是通过补 0 来表示一些低位数的字符的,这样,为了保持兼容性,你实际上白白浪费了两倍的空间。

UTF-8 就是为了解决这样一个问题而出现的。它是一个**「可变长编码」**,你不是嫌空间浪费吗,那么现在只要你用了 UTF-8,从此以后英文字母咱就可以用 1 个字节来存储了,如果遇到像中文这种「高大上」但又比较复杂的字体,我们灵活对待,用三个字节来表示,实在有某些更加变态而复杂的字体,那最多可以拓展到用 6 个字节来存储。总之,这样下去,既解决了兼容性问题,又可以节约资源,资源问题迎刃而解了。

Python 中的字符串是用 Unicode 编码的,所以 Python 可以支持多语言,当我们保存的时候,我们需要把 Unicode 转换为 UTF-8,使用的时候,再从文件中转换 UTF-8 到 Unicode 到内存中。

通过编码的这种演进过程,我们是不是会有所启发呢?

**你会发现,一切技术的产生和发展,都是为了解决问题而出现的。**大家如果细细的思考一下,不论是语言、技术、设计模式、架构,实际上他们的发展过程并不是一个凭空的技术升级行为,而是为了解决某种问题而诞生的。

「GB2312」是为了解决 ASCII 没有中文而才创造出来的,「Unicode」是因为各国语言不兼容而创造出来的。而 Unicode 对于资源的浪费又促成了 UTF-8 的产生。最典型的问题驱动技术,就是设计模式了,设计模式的产生实际上就是各种为解决某些特定问题而总结出来的方案。

所以在技术上,遇到问题并不可怕,问题恰恰是最能帮助自己提升的,问题是创造力的源头之一。我们同时在平时看书的时候,也要抱着解决问题的角度来学习,如果你单纯的去读一本技术书,这本书又只有理论和代码,你会觉得很枯燥。如果书里可以结合一些案例和问题,从这里展开讲解,然后再介绍一些解决方案和代码,这种教学方式效果就会特别好。比如我之前看过的一本书「Android 源码设计模式」,它就是用这种方式来进行展开的说明设计模式的场景,看完了这本书后,以后面对某种场景,我就特别容易回想起之前书中写过的一些场景,从而产生记忆联想。

不仅如此,如果想的再深一点,你就会突然醒悟,实际上人类社会好像也是以这种形式来发展的...

是不是有点扯远了?我们还是来看看字符串吧。

字符串

Python 的字符串和 C 语言有些类似。我们简单的把常用的用法介绍一下即可,平时只要多写几次,就能比较熟练的掌握了(此节引用廖雪峰教程示例,作了简化)。

ord() 和 chr()

使用 ord() 获取字符的整数表示,chr() 则是把编码转化为字符:

>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
复制代码

bytes

用带「b」前缀的单引号或者双引号字符来表示「bytes」类型的数据,非常方便

x = b'ABC'
encode() 和 decode()
复制代码

开发的时候,经常要把 str 和 bytes 进行相互转换, str 通过 encode() 转化为 bytes,bytes 通过 decode() 转化为 str

>>> 'ABC'.encode('ascii')
b'ABC'>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'>>> '中文'.encode('ascii')
Trace back (most recent call last):File "<stdin>", line 1, in<module>
UnicodeEncodeError>>> b'ABC'.decode('ascii')
'ABC'>>> b'\xe4\xb8\xad\xe6\x96\x87'
'中文'>>> b'\xe4\xb8\xad\xff'.decode('utf-8')
Tradeback(most recent call last):...
UnicodeDecodeError
复制代码

这里要注意容错,encode 不能转化超过参数编码范围的字符,而如果 bytes 中包含编码格式无法解析的字符,decode() 也会报错。

len()

通过 len 计算字符串的字符数或者 bytes 的字节数

>>> len('ABC')
3
>>> len('中文')
2
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x87')
6
>>> len('中文'.encode('utf-8'))
6
复制代码

从输出结果发现,中文占 3 个字节,英文占 1 个字节

声明编码格式

如果希望 Python 解释器可以按 UTF-8 编码来读取 .py 文件,需要在文件中声明

#1 /usr/bin/env python3
# -*- coding: utf-8 -*-
复制代码

第一行只对 Linux/OS X 有效,它告诉系统这是一个 Python 可执行程序。第二行则告诉 Python 解释器,这个文件要按照 UTF-8 编码。如果不这样写,中文输出会有乱码。

字符串格式化

格式化和 C 有点像,用「%」实现

>>> 'Hello,%s' % 'world'
'Hello , world'>>> '你好%s,你有 ¥%d 吗' % ('小之',50)
'你好小之,你有 ¥50 吗'
复制代码

占位符中,%d 代表整数,%f 代表浮点数,%s 代表字符串,%x 代表十六进制整数,占位符要和 % 号后面的变量或者值一一对应,如果只有一个占位符,% 号后不需要括号。

占位符还可以控制空格、小数点和补 0 的位数。比如:

>>> print('%2d-%02d' % (5,1))5-01>>> print('%.2f' % 3.1415)
3.14
复制代码

注意,「5-01」中,5 的前面是有两个空格的。

如果你需要使用 % 这个字符显示在字符串中,那么就需要转义了,%% 表示一个 %

>>> '小之公众号的点赞率竟然超过了 %d%%' % 50
'小之公众号的点赞率竟然超过了 50%'
复制代码

欢迎关注我的公众号

AI 学习之路——轻松初探 Python 篇(三)相关推荐

  1. AI 学习之路——轻松初探 Python 篇(一)

    喜欢小之的文章的可以关注公众号「WeaponZhi」持续关注动态 这是「AI 学习之路」的第 1 篇,「Python 学习」的第 1 篇 前言 1. Python 篇的组织结构 不管是学习人工智能还是 ...

  2. JavaWeb学习之路——SSM框架之Mybatis(三)

    数据库配置和相关类创建看上篇:JavaWeb学习之路--SSM框架之Mybatis(二) https://blog.csdn.net/kuishao1314aa/article/details/832 ...

  3. python飞机大战实验报告心得_Python学习之路「第七篇」-Pygame之飞机大战1

    前言 在上一篇中,我们初步了解了pygame的控制流程,但这对于一个游戏而言是远远不够的.所以在这一篇中,我们的任务是添加一架飞机(玩家),并且能够控制它进行移动,这样我们就又离目标进了一步了~ 这里 ...

  4. python飞机大战实验报告心得_Python学习之路「第七篇」-Pygame之飞机大战

    Pygame我们安装好了,那后面我们一起来看看飞机大战是如何用Python来实现 我们的第一个任务--添加游戏背景在载入背景前,我们得先有个window吧?自己动手码才记忆深刻,let's go! 我 ...

  5. 【java学习之路】(javaWeb篇)008.VUE

    1. 学习目标 了解什么是框架 了解什么是Vue 掌握Vue的基本语法 了解Vue的生命周期 2. 内容讲解 2.1 什么是框架 任何编程语言在最初的时候都是没有框架的,后来随着在实际开发过程中不断总 ...

  6. AI学习之路(3): 牛刀小试之线性回归

    当阿法狗在围棋界展开大规模战斗之后,所有人都倒下了.可见人工智能的威力无限,正像<射雕英雄传>里的九阴真经,谁掌握了它,那么谁就是华山论剑里的第一人物了.我们也能学习人工智能吗?我们也能开 ...

  7. python学习图解_轻松学Python 3 零基础彩色图解、专业入门

    哈啰,Python Python无疑是当今最值得学习的程式语言,因为它不仅语法简单,而且功能强大,还可以在Windows.Mac OS和Linux等所有平台上执行.再加上拥有将近十万个各式各样的套件, ...

  8. AI学习之路(4): TensorFlow是什么

    在我们探索TensorFlow之前,先来聊一下金庸的小说,在它的小说<笑傲江湖>里,剑宗和气宗是华山派的两个派别,也就是说剑宗和气宗同属于华山派,剑宗认为在武学之中剑术最重要,而气宗则认为 ...

  9. AI学习之路(14): 张量的平方计算

    tf.square(x, name=None) 计算x的平方,像(y = x * x = x^2). 参数: x: 一个张量或者SparseTensor.必须有下面之一的类型:half, float3 ...

最新文章

  1. 论文笔记:Missing Value Imputation for Multi-view UrbanStatistical Data via Spatial Correlation Learning
  2. springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
  3. java怎么获取ie浏览器的cookie,IE8 浏览器Cookie的处理
  4. 使用Mali Graphics Debugger调优Unity程序(Killer示例)
  5. VSTA InfoPath如何实现下拉列表联动
  6. Adaboost入门教程——最通俗易懂的原理介绍
  7. python 入门基础-零基础入门Python,看这一篇就够了!
  8. 循环控制-链表删除结点
  9. ExtJs 系列视频教程
  10. 使用开源PhoneGap开发web app
  11. 马斯克血洗推特!传机器学习裁员90%,团队直接解散
  12. 使用U盘重装MacOS的简单步骤
  13. 七大江河水系--长江(二)
  14. 请用java代码实现冒泡排序并输出,深夜思考
  15. 定积分存在定理与原函数存在定理
  16. snv服务器备份方案
  17. linux mtd 用法,Linux mtd与ubi关系详解,ubi使用命令总结
  18. 迭代次数和熵之间关系的一点联想
  19. 一个程序员的连续套现
  20. 2021年5月16日 星期日 阴

热门文章

  1. 〔转〕Word域的应用和详解5_索引和目录
  2. Android Pmem相关介绍
  3. Nginx —— configure的命令参数(nginx编译选项)
  4. LeetCode 426. 将二叉搜索树转化为排序的双向链表
  5. 变量和指针——学习笔记
  6. [4.9福建四校联考]
  7. emca 更改监听端口
  8. 关于SQL 数据库表中的聚集索引和非聚集索引等
  9. ActionScript工程如何使用Flash CS的fl包中的UI组件(转)
  10. conrtex 和 ARM 的关系