#1 标示符与关键字
使用无效的标示符会产生一个SyntaxError异常
#2 integral类型
python提供两种内置的integral类型,即int与bool。
0与False表示False;其他任意整数与True表示True。
在数字表达式中,True表示1;False表示0。因此,i+=True也有效。
二进制数以0b引导,八进制以0o引导,十六进制以0x引导,大写字母也可以使用
数值型操作符与函数
x/y:用x除以y,总是产生浮点值,如果x或y是复数就产生一个复数
x//y:用x除以y,总是产生浮点值,舍弃小数部分,使得结果总是整数,参见round()函数
x**y:计算x的y次幂,参见pow()函数
+x:不做任何操作,有时用于澄清代码
abs(x):返回x的绝对值
divmod(x,y):以二元组的形式返回x除以y所得的商和余数(两个整数)
pow(x,y):计算x的y次幂,与x**y相同
pow(x,y,z):(x**y)%z的另一种写法
round(x,n):返回浮点数x四舍五入后得到的相应整数(或者,如果给定n,就将浮点数转换为小数点后有n位)
使用数据类型创建对象时的3种用例。
一、不使用参数调用数据类型函数,此时,对象会被赋值为一个默认值,如:x=int()会创建一个值为0的整数。
二、使用一个参数调用数据类型函数。如果给定的参数是同样的数据类型,就将创建一个新对象,新对象是原始对象的一个浅拷贝。如果给定的参数不是同样的数据类型,就会尝试进行转换。
如果转换失败,就会产生一个ValueError异常,否则返回给定类型的对象。
如果给定参数不知道到给定数据类型的转换,就会产生一个TypeError异常。内置的float与str类型都支持到整数的转换。
整数转换函数:
bin(i):返回整数i的二进制表示(字符串),如,bin(1980)=='0b11110111100'
hex(i):返回i的十六进制表示(字符串),如,hex(1980)=='0x7bc'
int(x):将对象x转换为整数,失败时会产生ValueType异常,如果x的数据类型不知道到整数的转换,就会产生一个TypeError异常;如果x是浮点数,就会截取其整数部分
int(s,base):将字符串s转换为整数,失败时会产生ValueType异常。如果给定了可选的基参数,那么应该为2到36之间的整数
oct(i):返回i的八进制表示(字符串),如,otc(1980)=='0o3674'
三、给定两个货多个参数——但不是所有数据类型都支持,而对支持这一情况的数据类型,参数类型已经内涵都是变化的。
整数位逻辑操作符
i^j:对整数i与j进行位逻辑XOR运算
i<<j:将i左移j位,类似于i*(2**j),但是不带溢出检查
i>>j:将i右移j位,类似于i//(2**j),但是不带溢出检查
~i:反转i的每一位
浮点类型
python支持回合模式的算术运算,如int与float运算,生成float数;float与complex运算,生成complex结果。
由于decimal.Decimal是混合精度的,只能用于其他decimal.Decimal数或intS,在与intS混合运算时,会生成decimal.Decimal结果。
如果使用不兼容的数据类型进行运算会产生TypeError异常。
math模块
复数
>>> z=-89.9+2.14j
>>> z.real,z.imag
(-89.9, 2.14)
conjugate()用于改变虚数部分的符号:
>>> -89.9+2.14j.conjugate()
(-89.9-2.14j)
ps:math模块中的函数不能处理复数,要用复数,可以先导入cmath模
十进制数
decimal模块可以提供固定的十进制数,其精度可由自己设定。设计Decimal的及时要比浮点数的计算慢。
如果操作符**左边的操作数为decimal.Decimal,那么其右边的操作数必须为整数;
如果pow()函数的第一个参数为decimal.Decimal,那么其第二个以及可选的第三个参数必须为整数;
math模块与cmath模块不适于处理decimal.Decimal,但是可以这样,比如:
要计算 e^x(x是浮点数)=x.exp()
字符串
在三引号包含的字符串中,可以直接使用换行,而不需要进行格式化处理。
python字符串转义
\newline:忽略换行
\\:反斜杠(\)
\':单引号(‘)
\'':双引号(“)
\a:ASCII蜂鸣(BEL)
\b:ASCII退格(BS)
\f:ASCII走纸(FF)
\n:ASCII换行(LF)
\N{name}:给定名称的Unicode字符
\ooo:给定八进制值的字符
\r:ASCII回车(CR)
\t:ASCII制表符(TAB)
\uhhhh:给定16位十六进制的Unicode字符
\Uhhhhhhhh:给定32位十六进制的Unicode字符
\v:ASCII垂直指标(VT)
\xhh:给定8位十六进制的Unicode字符
字符串分片与步距
s='Light ray'
s[-9] s[-8] s[-7] s[-6] s[-5] s[-4] s[-3] s[-2] s[-1]
L i g h t r a y
s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8]
分片操作符有3中语法格式:
seq[start]:提取从start开始的数据项
seq[start:end]:提取从start(包含)开始的数据项到end结束的数据项(不包含)
seq[start:end:step]:与上一个类似,但是每隔step个字符进行提取
字符串方法有很多。。。。百度一下就知道
使用str.format()方法进行字符串格式化
1、str.format()方法会返回一个新字符串,在新字符串中,原字符串的替换字段被适当格式化后的参数所替代:
>>> "the novel '{0}' was published in {1}".format("hard times",1854)
"the novel 'hard times' was published in 1854"
如果需要在格式化字符串中包含花括号,就需要将花括号复写:
>>> "{{{0}}}{1};-}}".format("i'm in braces","i'm not")
"{i'm in braces}i'm not;-}"
字段名
>>> "{who} turn {age} this year".format(who='she',age=98)
'she turn 98 this year'
>>> "{who} was {0} last week".format(98,who='she')#关键字参数(who)总是在位置参数(0)之后
'she was 98 last week'
字段名可以引用集合数据类型,如列表
>>> stock=["paper","envelopes","notepads"]
>>> "we have {0[1]} and {0[2]} in stock".format(stock)
'we have envelopes and notepads in stock'
如字典
>>> d=dict(animal='elephant',weight=12000)
>>> "the {0[animal]} weighs {0[weight]}".format(d)
'the elephant weighs 12000'
当前还在作用范围内的局部变量可以通过内置的locals()函数访问,该函数会返回一个字典,字典的键是局部变量名,字典的值则是对变量值的引用。映射拆分操作符为**
>>> element='sliver'
>>> number=47
>>> 'element {number} is {element}'.format(**locals())
'element 47 is sliver'
或>>> "the {animal} weighs {weight}".format(**d)
'the elephant weighs 12000'
ps:如果需要将不止一个参数传递给str.format(),那么只有最后一个参数才可以使用映射拆分。
转换
重写数据类型的通常行为并强制其提供字符串形式或表象形式也是有可能的,这是通过向字段中添加conversion指定符实现的。目前有3个只有的指定符:s,用于轻质使用字符串形式;r,用于强制使用表象形式;a,用于强制使用表象形式,但仅限ASCII字符
>>> import decimal
>>> "{0} {0!s} {0!r} {0!a}".format(decimal.Decimal("93.4"))
"93.4 93.4 Decimal('93.4') Decimal('93.4')"