python学习记录一
数据类型和变量
Python还允许用r''
表示''
内部的字符串默认不转义
>>> print('\\\t\\') \ \ >>> print(r'\\\t\\') \\\t\\
Python允许用'''...'''
的格式表示多行内容,可以自己试试:
>>> print('''line1 ... line2 ... line3''') line1 line2 line3
>>> print(r'''hello,\n ... world''') hello,\n world
上面是在交互式命令行内输入,注意在输入多行内容时,提示符由>>>
变为...
布尔值 :True False and or not
空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_
的组合,且不能用数字开头
a = 123 # a是整数 print(a) a = 'ABC' # a变为字符串 print(a)
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。
a = 'ABC' b = a a = 'XYZ' print(b)
最后一行打印出变量b
的内容到底是'ABC'
呢还是'XYZ'
?如果从数学意义上理解,就会错误地得出b
和a
相同,也应该是'XYZ'
,但实际上b
的值是'ABC'
,让我们一行一行地执行代码,就可以看到到底发生了什么事:
执行a = 'ABC'
,解释器创建了字符串'ABC'
和变量a
,并把a
指向'ABC'
:
执行b = a
,解释器创建了变量b
,并把b
指向a
指向的字符串'ABC'
:
执行a = 'XYZ'
,解释器创建了字符串'XYZ',并把a
的指向改为'XYZ'
,但b
并没有更改:
所以,最后打印变量b
的结果自然是'ABC'
了。
除法有两种
一种/精确的 一种//只是选取整数部分
对变量赋值x = y
是把变量x
指向真正的对象,该对象是变量y
所指向的。随后对变量y
的赋值不影响变量x
的指向。
注意:Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java对32位整数的范围限制在-2147483648
-2147483647
。
Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf
(无限大)。
字符编码
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符: >>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文' 如果知道字符的整数编码,还可以用十六进制这么写str: >>> '\u4e2d\u6587' '中文'
>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> '中文'.encode('ascii') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
>>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x96\x87') 6 >>> len('中文'.encode('utf-8')) 6 可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
>>> 'Hello, %s' % 'world' 'Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.'
%
运算符就是用来格式化字符串的。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?
,括号可以省略。
常见的占位符有:
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x |
十六进制整数 |
print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)
其实觉得就是把,换成是%就可以了
字符串里面的%
是一个普通字符怎么办?这个时候就需要转义,用%%
来表示一个%
另外还有一种表示方式是format() 传入参数依次替换为{0},{1}等 不过这种写起来要麻烦多
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 'Hello, 小明, 成绩提升了 17.1%'
这个就是{1:}这个是要的
>>> name = '小明' >>> s1 = 75 >>> s2 = 85 >>> r = (s2 - s1) / s1 * 100 >>> print(r) 13.333333333333334 >>> print('%s今年成绩提高了%.1f%%'%(name,r)) 小明今年成绩提高了13.3% >>> '{0}今年成绩提高了{1:.1f%%}'.format(name,r) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: Invalid format specifier >>> '{0}今年成绩提高了{1:.1f}%'.format(name,r) '小明今年成绩提高了13.3%' >>>
% 写外面