python基础知识计算

  问题的根源,在于UTF-8这种编码里面,存在一个特殊的字符,其编码是“0xC2
0xA0”(194
160),转换成字符的时候,表现为一个空格,跟一般的半角空格(ASCII
0x20)一样,唯一的不同是它的宽度不会被压缩,因此比较多的被用于网页排版(如首行缩进之类)。而其他的编码方式如GB2312、Unicode之类并没有这样的字符。

   例如:< language=”java”>write(‘<a
href=”;

本章目录

  • Part One:字符编码
  • Part Two:字符串
  • Part Three:字符串格式化

字符串可以说是所有变成语言中应用最广泛的数据类型,Python也不例外。而处理字符串,首先需要注意的就是编码问题。

python基础知识总结

图片 1

python有段时间没用了,实在是惭愧啊,屌丝今天决定开始对python基础知识重新进行总结,以慰自心。

一.python概念

  1. Python是著名的“龟叔”Guido van
    Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。

  2. python定位“优雅”,“简单”,“明确”

二.python安装

三.python基础

1.输入输出

输入输出input/output,简称I/O

输出:

print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出,逗号在print语句里面看做空格,print可以输出整数和进行运算输出结果

输入:

raw_input:输入值并存放到变量里面

变量相信不需要多说了

2.数据类型

整数:

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1100-80800,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff000xa5b4c3d2,等等。

浮点数:

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23×109和12.3×108是相等的。浮点数可以用数学写法,如1.233.14-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23×109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

字符串:

字符串是以”或””括起来的任意文本,比如'abc'"xyz"等等。请注意,”或””本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有abc这3个字符。如果'本身也是一个字符,那就可以用””括起来,比如"I'm OK"包含的字符是I'm,空格,OK这6个字符。

如果字符串内部既包含’又包含”怎么办?可以用转义字符来标识,比如:转义字符可以转义很多字符,比如n表示换行,t表示制表符,字符本身也要转义,所以\表示的字符就是

如果字符串里面有很多字符都需要转义,就需要加很多,为了简化,Python还允许用r”表示”内部的字符串默认不转义

如果字符串内部有很多换行,用n写在一行里不好阅读,为了简化,Python允许用”’…”’的格式表示多行内容。

布尔值:

布尔值和布尔代数的表示一致。布尔值只有True或者False两种值,python可以用True
或 False表示布尔值,注意大小写,也可以通过布尔运算,比如:

>>> True

True

>>> False

False

>>> 3 > 2

True

>>> 3 > 5

False

布尔值可以用and or not
来运算,and是与运算,都是True才会是True,or是或运算,有一个True就为True,not是单目运算符,表示非运算True变False,False变True。

布尔值一般用在条件判断中

空值:

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

python还有列表,元组,字典,还有自定义数据类型,后面一一整理道来

变量:

大小写英文字母,数字,_下划线且不能以数字开头,可以表示各种数据类型

动态语言:变量本身类型不固定的称为动态语言,反之就是静态语言,如java,声明时必须指定类型

a=’aaa’

表示在内存中创建aaa字符串,在内存中创建a变量,并将a变量指向aaa

a=b

表示将a变量指向b变量的值

常量:

不能变的变量,例如PI,python中没有机制表示常量不能变,一般习惯用大写字母来表示常量

3.字符串和编码

字符串是一种数据类型,字符串有一个问题就是编码问题,计算机只能处理数字,要处理文本,必须将文本用数字来表示,这样就有了编码,而计算机是由美国人发明的,英文可以用一个字节表示,最早只有127个字符被编码到计算机,这个编码表称为ASCII码,但处理中文一个字节不够,至少需要两个字节,而且还不能和ASCII码冲突,所以,中国制定了GB2312码

全世界语言那么多,各国有各国的标准,不可避免的会有冲突,unicode就这样产生了,unicode通常是两个字节,非常偏僻的字才用更多字节,ASCII码前面补0就是unicode码了

用unicode码也有问题,虽然统一用unicode编码乱码问题解决了,但是占用空间大了,这样就有了可变长编码utf-8

utf-8将一个unicode字符根据不同数字大小编码成1-6个字节,常用的英文字母编码为一个字节,汉字通常三个字节,很生僻的字符才会编码成4-6个字节,如果用于大量英文,utf-8可以节省很多空间。UTF-8还一个好处就是ASCII码实际可以看做utf-8的一部分,大量支持ASCII码的历史遗留软件可以在utf-8编码下继续工作。

搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:

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

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器,所以你看到很多网页的源码上会有类似<meta
charset=”UTF-8″ />的信息,表示该网页正是用的UTF-8编码。

4.python字符串

python诞生比unicode早,所以最早的python只支持ASCII码,字母和数字对应,python提供了ord()和chr()函数将字母和相应的数字兑换,python后来添加了对unicode支持,unicode字符串表示u’…’,’…’可以看做utf-8编码或者ASCII编码,但是u’…’只能看做unicode编码,英文表示的unicode编码和utf-8编码一样,但是占用的空间不同,而中文字符转换后一个unicode字符将变为三个utf-8字符,len()函数返回字符串长度,将utf-8字符转换为unicode字符,用decode(‘utf-8’),python源码也是一个文本文件,一般保存为utf-8,#coding
utf-8

5.格式化

最常见的是输出格式化的字符串,python的格式化和c语言一致,%s用字符串替换,%d用整数替换,如果只有一个%?,括号可以省略,

常见的占位符:

%s 字符串

%d整数

%f 浮点数

%x 十六进制整数

记住:格式化整数和浮点数可以指定是否补0和整数和小数的位数

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

如果你不确定用什么,%s可以将任何数据类型转换为字符串

>>>'Age:%s.Gender:%s'%(25,True)'Age:25.Gender:True'

对于unicode字符,用法完全一样,但最好确保替换的字符串也是unicode字符串

>>>u'Hi,%s'%u'Michael'u'Hi,Michael'

如果字符串的%也是一个普通字符,这就需要转义,%%表示%

待续。。。

python有段时间没用了,实在是惭愧啊,屌丝今天决定开始对python基础知识重新进行总结,以慰自心。
一.python概念 Pytho…

 

例如:Location.href=encodeURI(“”);

字符串格式化

  1. 字符串格式化就是在指定位置先放一个占位符,然后用变量来替换,这样就可以以相同的格式输出不同的内容。
    最简单的案例如下图所示:
![](https://upload-images.jianshu.io/upload_images/6879662-35e9e9fc9e8b349f.png)

字符串格式化.png



其中,占位符常用的有:
占位符 替换内容
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数

还有很多其它占位符,不太常用,需要的时候再去查就好了。
另外,如果不确定,可以使用字符串占位符,因为其它类型都转化为字符串。

  1. 有种说法是%号的方式已经过时了,用format方法来操作字符串格式化更合适。
    作为一个刚入门的学习者,没有能力去区分这两者的优劣,相对来说,个人还是喜欢format形式多一些,感觉更规范。
    format形式的基础用法就是用{0},{1}…来代替站位符,如果用{}代表使用默认顺序,例如:
![](https://upload-images.jianshu.io/upload_images/6879662-9ba20d5a74127547.png)

format格式化.png



另外,还有一些比较详细的用法:



![](https://upload-images.jianshu.io/upload_images/6879662-a9310b98109d7212.png)

format格式化进阶.png

  改下浏览器编码为gbk,结果:聽
銆€#####4####聽–銆€####聽–銆€

十六进制值 1. + URL 中+号表示空格 %2B

字符串

字符串就是用单引号(‘)或者双引号(“”)包裹起来的文字,在Python风格规范里推荐一个模块使用一种符号作为字符串表示。在字符串内可以使用另外一种引号,
以避免在字符串中使用。
例如:

print('Why are you hiding your eyes?')
print("I'm scared of lint errors.")
print('"Good!" thought a happy Python reviewer.')

结果为:

图片 2

String.png

所以说,除非想在字符串内包含单引号或者双引号,每一个Python文件最好使用同一种符号。
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

图片 3

ord和chr.png

如果知道字符的整数编码,还可以用十六进制这么写str(unicode方式):

图片 4

uniode中文.png

如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。Python对bytes类型的数据用带b前缀的单引号或双引号表示:

var = b"ABC"

要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。
以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

图片 5

encode.png

纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
反过来,从bytes到str可以用decode方法,原理和操作都是一样的,不再赘述了。
最后,可以看下len方法,len是length的缩写,翻译过来就是计算str或者bytes的字符字节数,例如:

图片 6

len.png

可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
在操作字符串时,我们经常遇到str和bytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。
还有其它一些常用的方法,如spli(分割),
join(拼接),replace(替换),upper(大写),lower(小写),strip(去除两端空格),lstrip(去除左端空格),rstrip(去除右端空格)等,用法都比较简单,可参考源码调用即可。

<?php

// 替换<p>后4个空格
$str = file_get_contents("http://m.ts.cn/new/99cms_ts/api.php?s=/News/getNewsInfoTmp/Nid/51089");
$str = str_replace(chr(194) . chr(160), "-", $str);  // 解决方法
echo $str;  // OK

escape不编码字符有69个:*,+,-,.

字符编码

计算机的本质其实就是由0和1组成的,所以说无论是中文还是英文字符串,最终都要转换为数字。
最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。
但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
后来呢,为了处理更多的语言,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Python2.x系列就是用的ASCII编码,而Python3.x就开始使用unicode了,这样中文显示问题就有了很大的改善。这里打印了一下windows下Python3.6的各种编码:

图片 7

Python编码.png

可以看到,基本统一为了utf-8。那么什么是utf-8呢?utf-8其实是一个可变长编码。它把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

图片 8

image.png

  结果:为方便书写,|代表空格,|代表全角空格。

3、  js使用数据时可以使用escape

<?php

// 替换<p>后4个空格
$str = file_get_contents("http://m.ts.cn/new/99cms_ts/api.php?s=/News/getNewsInfoTmp/Nid/51089");
$str = str_replace(" ", "-", $str);
$str = preg_replace("/s/", "-", $str);
echo $str;  // 不起作用

其他一些资料。。。仅供参考。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注