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%‘
>>>% 写外面