>  기사  >  백엔드 개발  >  PYTHON 블로그 기록

PYTHON 블로그 기록

巴扎黑
巴扎黑원래의
2017-06-23 14:47:191365검색

1. PythonUnicodeString

에 인코딩 문제가 있습니다.

컴퓨터는 숫자만 처리할 수 있기 때문에 텍스트를 처리하려면 먼저 텍스트를 숫자로 변환한 후 처리해야 합니다. 최초의 컴퓨터는 8비트(bit)를 바이트(byte)로 사용하여 설계되었습니다. 따라서 바이트로 표현할 수 있는 가장 큰 정수는 255(이진수 )입니다. 11111111=Decimal 255), 0 - 255은 영어 대문자와 소문자, 숫자 및 일부 기호를 나타내는 데 사용됩니다. 이 인코딩 테이블을 ASCII 인코딩이라고 합니다. 문자 A 의 인코딩은 65이고 소문자 z 의 인코딩은 122입니다.

중국어를 표현하려면 당연히 1바이트로는 부족하고 최소한 2바이트는 필요하며 ASCII 인코딩과 충돌할 수 없으므로 중국에서는 GB2312을 공식화했습니다. 인코딩은 한자를 인코딩하는 데 사용됩니다.

마찬가지로 일본어, 한국어 등 다른 언어에도 이런 문제가 있습니다. 모든 텍스트의 인코딩을 통일하기 위해 Unicode가 탄생했습니다. Unicode는 모든 언어를 하나의 인코딩 세트로 통합하므로 더 이상 잘못된 코드 문제가 발생하지 않습니다.

Unicode는 일반적으로 문자를 표현하기 위해 2바이트를 사용합니다. 원래 영어 인코딩은 1바이트에서 2바이트로 변경되었습니다. 상위 바이트만 모두 0로 채워 넣으면 됩니다. 그것. ㅋㅋㅋ II 인코딩, 일반 문자 문자열

'ABC'는 모두

ASCIIPython 내부에 인코딩되어 있습니다.

Python은 나중에 Unicode에 대한 지원을 추가했습니다. Unicode로 표시되는 문자열은 u'...'로 표시됩니다. 예:

print u'中文'

유니코드 문자열은 하나 더 u 를 제외하고 일반 문자열과 다르지 않습니다. 이스케이프 문자와 여러 줄 표현은 여전히 ​​유효합니다:


print u'中文\n日文\n韩文'

여러 줄:

u'''第一行
第二行'''

raw+다중 라인:

ur'''Python的Unicode字符串支持"中文",
"日文",
"韩文"等多种语言'''

중국어 문자열이 Python 환경에서 UnicodeDecodeError을 만나면 다음과 같습니다. 에 문제가 있기 때문입니다. py 파일이 저장되는 형식입니다. 첫 번째 줄에

# -*- coding: utf-8 -*-

주석을 추가하여 Python 인터프리터가 UTF-8 인코딩을 사용하여 소스 코드를 읽도록 지시할 수 있습니다. 그런 다음 Notepad++ 다른 이름으로 저장 ... 을 사용하고 UTF-8 형식을 선택하여 저장하세요.

2. Python

Python의 정수 및 부동 소수점 숫자, 연산을 지원합니다. 규칙과 수학 4가지 작동 규칙은 완전히 동일합니다.

기본 연산:

1 + 2 + 3   # ==> 6
4 * 5 - 6   # ==> 14
7.5 / 8 + 2.1   # ==> 3.0375
(1 + 2) * 3    # ==> 9
(2.2 + 3.3) / (1.5 * (9 - 0.3))    # ==> 0.42145593869731807


이는 수학 연산과 정확히 동일합니다. , 하지만 괄호는 여러 레이어에 중첩될 수 있습니다.

수학적 연산과의 차이점은 Python의 정수 연산 결과는 여전히 정수이고 부동 소수점 연산의 결과는 여전히 부동 소수점 숫자라는 점입니다.

1 + 2    # ==> 整数 3
1.0 + 2.0    # ==> 浮点

그러나 정수와 부동 소수점 혼합 소수점 연산의 결과는 부동 소수점이 됩니다:

1 + 2.0    # ==> 浮点数 3.0

为什么要区分整数运算和浮点数运算呢?这是因为整数运算的结果永远是精确的,而浮点数运算的结果不一定精确,因为计算机内存再大,也无法精确表示出无限循环小数,比如 0.1 换成二进制表示就是无限循环小数。

 

那整数的除法运算遇到除不尽的时候,结果难道不是浮点数吗?

11 / 4    # ==> 2


令很多初学者惊讶的是,Python的整数除法,即使除不尽,结果仍然是整数,余数直接被扔掉。不过,Python提供了一个求余的运算 % 可以计算余数:

11 % 4    # ==> 3

如果我们要计算 11 / 4 的精确结果,按照“整数和浮点数混合运算的结果是浮点数”的法则,把两个数中的一个变成浮点数再运算就没问题了:

11.0 / 4    # ==> 2.75

三、Python中布尔类型

 

#与运算
True and True   # ==> True
True and False   # ==> False
False and True   # ==> False
False and False   # ==> False

#或运算
True or True   # ==> True
True or False   # ==> True
False or True   # ==> True
False or False   # ==> False

#非运算
not True   # ==> False
not False   # ==> True

a = True
print a and 'a=T' or 'a=F'
#计算结果不是布尔类型,而是字符串 'a=T',这是为什么呢?

#因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True,所以:

True and 'a=T' #计算结果是 'a=T'
#继续计算 'a=T' or 'a=F' 计算结果还是 'a=T'

要解释上述结果,又涉及到 and or 运算的一条重要法则:短路计算。

1. 在计算 a and b 时,如果 a False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a True,则整个计算结果必定取决与 b,因此返回 b

 

2. 在计算 a or b 时,如果 a True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a False,则整个计算结果必定取决于 b,因此返回 b

 

所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

 

 

 

 

 

 

四、Python创建list

Python内置的一种数据类型是列表:listlist是一种有序的集合,可以随时添加和删除其中的元素。

 

比如,列出班里所有同学的名字,就可以用一个list表示:

>>> ['Michael', 'Bob', 'Tracy']
['Michael', 'Bob', 'Tracy']

list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。

 

构造list非常简单,按照上面的代码,直接用 [ ] list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list

classmates = ['Michael', 'Bob', 'Tracy']
classmates # 打印classmates变量的内容
>>>['Michael', 'Bob', 'Tracy']

由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:

L = ['Michael', 100, True]

一个元素也没有的list,就是空list

empty_list = []
#打印成绩表
L = ['adam', 95.5,'lisa', 85,'bart', 59]
print L

 

五、Python按照索引访问list


由于list是一个有序集合,所以,我们可以用一个list按分数从高到低表示出班里的3个同学:

L = ['Adam', 'Lisa', 'Bart']

那我们如何从list中获取指定第 N 名的同学呢?方法是通过索引来获取list中的指定元素。

 

需要特别注意的是,索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。

 

因此,要打印第一名同学的名字,用 L[0]:

但使用索引时,千万注意不要越界,所以没有L[3]

六、Python之倒序访问list

L = ['Adam', 'Lisa', 'Bart']
print L[-1]
>>>Bart

 


七、Pythonlist添加新元素

L = ['Adam', 'Lisa', 'Bart']

 

把新同学Paul添加到现有的 list

7.1append()

第一个办法是用 list append() 方法,把新同学追加到 list 的末尾:

L = ['Adam', 'Lisa', 'Bart']
L.append('Paul')
print L
>>> ['Adam', 'Lisa', 'Bart', 'Paul']

append()总是把新的元素添加到 list 的尾部。

 

7.2insert()

  listinsert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素:

L = ['Adam', 'Lisa', 'Bart']
L.insert(0, 'Paul')
print L
>>>['Paul', 'Adam', 'Lisa', 'Bart']

L.insert(0, 'Paul') 的意思是,'Paul'将被添加到索引为 0 的位置上(也就是第一个),而原来索引为 0 Adam同学,以及后面的所有同学,都自动向后移动一位。

 

八、Python从list删除元素

 L = ['Adam', 'Lisa', 'Bart', 'Paul']
L.pop()
>>>'Paul'
 print L
>>>['Adam', 'Lisa', 'Bart']

pop()默认删除最后一个,当让也可以指定

L = ['Adam', 'Lisa', 'Paul', 'Bart']
L.pop(2)
>>>'Paul'
print L
>>> ['Adam', 'Lisa', 'Bart']


九、PythonList中替换元素

L = ['Adam', 'Lisa', 'Paul', 'Bart']
L[2] = 'Paul' #或者 L[-1] = 'Paul'
print L
>>> L = ['Adam', 'Lisa', 'Paul']

十、Python之创建tuple

tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple list 非常类似,但是,tuple一旦创建完毕,就不能修改了。

 

同样是表示班里同学的名称,用tuple表示如下:

t = ('Adam', 'Lisa', 'Bart')

  

创建tuple和创建list唯一不同之处是用( )替代了[ ]

 

现在,这个 t 就不能改变了,tuple没有 append()方法,也没有insert()pop()方法。所以,新同学没法直接往 tuple 中添加,老同学想退出 tuple 也不行。

 

获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 t[0]t[-1]等索引方式访问元素,但是不能赋值成别的元素

 

十一、Python之创建单元素tuple

tuplelist一样,可以包含 0 个、1个和任意多个元素。

 

包含多个元素的 tuple,前面我们已经创建过了。

 

包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示:

t = ()
print t
>>>()

  

 t = (1)
print t
>>> 1
#???这是为什么,因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。

  

正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:

t = (1,)
print t
>>>(1,)

Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确地告诉你这是一个tuple

 

多元素 tuple 加不加这个额外的“,”效果是一样的。

 

 


十二、Python之“可变”的tuple

 

t = ('a', 'b', ['A', 'B'])
#t = ('a', 'b', ('A', 'B'))的话就是不可变的

注意到 t 3 个元素:'a''b'和一个list['A', 'B']list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到:

 L = t[2]
L[0] = 'X'
L[1] = 'Y'
print t
>>>('a', 'b', ['X', 'Y'])

 

위 내용은 PYTHON 블로그 기록의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.