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'?如果从数学意义上理解,就会错误地得出ba相同,也应该是'XYZ',但实际上b的值是'ABC',让我们一行一行地执行代码,就可以看到到底发生了什么事:

执行a = 'ABC',解释器创建了字符串'ABC'和变量a,并把a指向'ABC'

py-var-code-1

执行b = a,解释器创建了变量b,并把b指向a指向的字符串'ABC'

py-var-code-2

执行a = 'XYZ',解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b并没有更改:

py-var-code-3

所以,最后打印变量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%'
>>>

% 写外面

 

 

 


 

posted @ 2020-03-25 22:31  冰糖葫芦很乖  阅读(244)  评论(0编辑  收藏  举报