Python3 知识巩固
由于工作原因,python久了不用就容易忘,特此巩固一下一些指示灯
r" "
里面的东西不会被转义
python
里面没有char
类型
string[a:b]
如果ab大于0 则从a+1到第b个字符
-1代表倒数第一个字符
多个变量赋值
Python
允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值。
您也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, "runoob"
Python3
支持int
、float
、bool
、complex
(复数)。
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
此外还可以用isinstance
来判断:
>>>a = 111
>>> isinstance(a, int)
True
>>>
在 Python2
中是没有布尔型的,它用数字0
表示 False
,用 1
表示True
。到 Python3
中,把 True
和 False
定义成关键字了,但它们的值还是 1
和 0
,它们可以和数字相加。
可以使用del语句删除对象引用
//除后向下取整
逻辑运算符 and or not
成员运算符 in not in
**指数运算符2**3
输出为8
函数 返回值 ( 描述 )
abs(x)
返回数字的绝对值,如abs(-10)
返回10
ceil(x)
返回数字的上入整数,如math.ceil(4.1)
返回 5
cmp(x, y)
如果x < y
返回-1
, 如果 x == y
返回 0
, 如果x > y
返回1
。 Python 3
已废弃,使用(x>y)-(x<y)
替换。
exp(x)
返回e
的x
次幂(ex)
,如math.exp(1)
返回2.718281828459045
fabs(x)
返回数字的绝对值,如math.fabs(-10)
返回10.0
floor(x)
返回数字的下舍整数,如math.floor(4.9)
返回 4
log(x)
如math.log(math.e)
返回1.0
,math.log(100,10)
返回2.0
log10(x)
返回以10
为基数的x
的对数,如math.log10(100
)返回 2.0
max(x1, x2,...)
返回给定参数的最大值,参数可以为序列。
min(x1, x2,...)
返回给定参数的最小值,参数可以为序列。
modf(x)
返回x的整数部分与小数部分,两部分的数值符号与x
相同,整数部分以浮点型表示。
pow(x, y)
x**y
运算后的值。
round(x [,n])
返回浮点数x
的四舍五入值,如给出n
值,则代表舍入到小数点后的位数。
sqrt(x)
返回数字x
的平方根。
随机数函数
随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。
Python
包含以下常用随机数函数:
函数 描述
choice(seq)
从序列的元素中随机挑选一个元素,比如random.choice(range(10))
,从0
到9
中随机挑选一个整数。
randrange ([start,] stop [,step])
从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1
random()
随机生成下一个实数,它在[0,1)
范围内。
seed([x])
改变随机数生成器的种子seed
。如果你不了解其原理,你不必特别去设定seed
,Python
会帮你选择seed
shuffle(lst)
将序列的所有元素随机排序
uniform(x, y)
随机生成下一个实数,它在[x,y]
范围内。
三角函数
Python
包括以下三角函数:
函数
acos(x)
返回x的反余弦弧度值。
asin(x)
返回x的反正弦弧度值。
atan(x)
返回x的反正切弧度值。
atan2(y, x)
返回给定的X
及Y
坐标值的反正切值。
cos(x)
返回x的弧度的余弦值。
hypot(x, y)
返回欧几里德范数sqrt(x*x + y*y)
。
sin(x)
返回的x
弧度的正弦值。
tan(x)
返回x
弧度的正切值。
degrees(x)
将弧度转换为角度,如degrees(math.pi/2)
, 返回90.0
radians(x)
将角度转换为弧度
数学常量
常量 描述
pi
数学常量pi
(圆周率,一般以π
来表示)
e
数学常量e
,e
即自然常数(自然常数)。
字符串 格式化
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
%c
格式化字符及其ASCII码
%s
格式化字符串
%d
格式化整数
%u
格式化无符号整型
%o
格式化无符号八进制数
%x
格式化无符号十六进制数
%X
格式化无符号十六进制数(大写)
%f
格式化浮点数字,可指定小数点后的精度
%e
用科学计数法格式化浮点数
%E
作用同%e
,用科学计数法格式化浮点数
%g
%f
和%e
的简写
%G
%f
和%E
的简写
%p
用十六进制数格式化变量的地址
python
三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符
str.format()
的基本使用如下:
>>> print('{}网址: "{}!"'.format('菜鸟教程', 'www.runoob.com'))
菜鸟教程网址: "www.runoob.com!"
括号及其里面的字符 (称作格式化字段) 将会被 format()
中的参数替换。
在括号中的数字用于指向传入对象在 format()
中的位置,如下所示:
>>> print('{0} 和 {1}'.format('Google', 'Runoob'))
Google 和 Runoob
>>> print('{1} 和 {0}'.format('Google', 'Runoob'))
Runoob 和 Google
如果在format()
中使用了关键字参数, 那么它们的值会指向使用该名字的参数。
>>> print('{name}网址: {site}'.format(name='菜鸟教程', site='www.runoob.com'))
菜鸟教程网址: www.runoob.com
'!a' (使用 ascii())
, '!s' (使用 str()) 和 '!r' (使用 repr())
可以用于在格式化某个值之前对其进行转化:
>>> import math
>>> print('常量 PI 的值近似为: {}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
>>> print('常量 PI 的值近似为: {!r}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
可选项':'
和格式标识符可以跟着字段名。 这就允许对值进行更好的格式化。 下面的例子将 Pi 保留到小数点后三位:
>>> import math
>>> print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi))
常量 PI 的值近似为 3.142。
在 ':'
后传入一个整数, 可以保证该域至少有这么多的宽度。 用于美化表格时很有用。
>>> table = {'Google': 1, 'Runoob': 2, 'Taobao': 3}
>>> for name, number in table.items():
... print('{0:10} ==> {1:10d}'.format(name, number))
...
Runoob ==> 2
Taobao ==> 3
Google ==> 1
如果你有一个很长的格式化字符串, 而你不想将它们分开, 那么在格式化时通过变量名而非位置会是很好的事情。
最简单的就是传入一个字典, 然后使用方括号'[]'
来访问键值 :
>>> table = {'Google': 1, 'Runoob': 2, 'Taobao': 3}
>>> print('Runoob: {0[Runoob]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table))
Runoob: 2; Google: 1; Taobao: 3
也可以通过在 table 变量前使用 '**' 来实现相同的功能:
>>> table = {'Google': 1, 'Runoob': 2, 'Taobao': 3}
>>> print('Runoob: {Runoob:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table))
Runoob: 2; Google: 1; Taobao: 3
读和写文件
open()
将会返回一个file
对象,基本语法格式如下:
open(filename, mode)
filename
:包含了你要访问的文件名称的字符串值。
mode
:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)
。
不同模式打开文件的完全列表:模式描述
r
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+
打开一个文件用于读写。文件指针将会放在文件的开头。
rb+
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
w+
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+
以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
下图很好的总结了这几种模式:
模式 r r+ w w+ a a+
读 + + + +
写 + + + + +
创建 + + + +
覆盖 + +
指针在开始 + + + +
指针在结尾 + +
f.tell()
f.tell()
返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。
f.seek()
如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what)
函数。
from_what
的值, 如果是 0
表示开头, 如果是 1
表示当前位置,2
表示文件的结尾,例如:
seek(x,0)
: 从起始位置即文件首行首字符开始移动x
个字符
seek(x,1)
: 表示从当前位置往后移动x
个字符
seek(-x,2)
:表示从文件的结尾往前移动x
个字符
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print('cannot open', arg)
except ValueError as aaa:
print('cannot open', aaa)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close()
raise
抛出异常
Python
使用raise
语句抛出一个指定的异常。例如:
>>>raise NameError('HiThere')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: HiThere
raise
唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception
的子类)。
如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。
>>>try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
raise
An exception flew by!
Traceback (most recent call last):
File "<stdin>", line 2, in ?
NameError: HiThere
预定义的清理行为
with open("myfile.txt") as f:
for line in f:
print(line, end="")