函数
-如果你要重复使用相同的或者非常相似的功能,就写一个函数。
-函数使用def关键字声明,用return关键字返回值
def my_function(x, y, z=1.5):
if z > 1:
return z * (x + y)
else:
return z / (x + y)
-如果到末尾都没有return,则返回None
-函数可以有位置参数和关键字参数,关键字阐述通常用于指定默认值或者可选参数,在上面的代码中x和y是位置参数,而z是关键字参数,可以用下面的两种方法调用
a = my_function(5,6,z=0.7)
c = my_function(5,6,0.7)
d = my_function(4,8)
-关键字参数必须位于位置参数之后(如果有位置参数),可以以任意顺序指定关键字参数
*笔记:也可以用关键字参数传递位置参数。前面的例子可以写成
c = my_function(x=5,y=6,z=0.7)
命名空间、作用域,和局部变量
-函数乐意访问两种不同作用域的变量:全局变量(global)和局部变量(local)。
-python叫做命名空间
-如下函数
def func():
a = []
for i in range(5):
a.append(i)
-调用func之后,首先会创建出空列表a,然后添加5个元素,a会在该函数退出的时候被销毁
-假如我们像下面那样定义a
a = []
def func():
for i in range(5):
a.append(i)
-虽然可以在函数中对全局变量进行赋值操作,但是那些变量必须用global关键字声明成全局变量才可以
global a
返回多个值
def f():
a = 5
b = 6
c = 7
return a,b,c
a,b,c = f()
print(a)
print(b)
print(c)
-上面代码返回的是一个三元元组
-也可以写下面的代码,返回一个字典
def f():
a = 5
b = 6
c = 7
return {"a":a,"b":b,"c":c}
a= f()
print(a)
错误和异常处理
-在python中,如果语句有错误,会报错,想要处理异常和错误,用try和except关键字
def a(x):
try:
return float(x)
except:
return x
-当语句没有异常的时候,执行try后面的语句
-当语句出现异常的时候,执行except后面的语句
-我们还可以指定出现何种异常的时候,执行except后面的语句
-例如,我们想要在出现ValueError异常的时候执行except后面的语句,出现其他异常的时候正常报错
def a(x):
try:
return float(x)
except ValesError:
return x
-以上代码会在语句出现ValesError的时候执行return x
-我们还可以用元组来包含多个异常:
def a(x):
try:
return float(x)
except (TypeError,ValueError):
return x
-当你想要在try部分无论是否出现异常都要执行一段代码的时候,用finall:
f = open(path,'w'):
try:
write_to_file(f)
finally:
f.close()
-这里,文件f总会被关闭,相应的,你可以用else让只在try部分成功的情况下才执行代码:
f = open(path,'w'):
try:
write_to_file(f)
wxcept:
print('Failed')
else:
print("文件已经打开")
finally:
f.close()
文件和操作系统
-打开一个文件我们可以使用open函数开打开
f = open(path)#path是一个相对或者绝对的文件路径
-默认情况下,他是以只读模式(r)打开的,然后我们就可以像处理列表那样来处理这个文件句柄f了,比如对行进行迭代:
for line in f :
pass
-从文件中取出来的行都带有完整的行结束符(EOL)因此:
lines = [x.rstrip() for x in open(path)]#得到一组没有EOL的行
-如果使用open创建文件对象,一定要用close关闭它,关闭文件可以返回操作系统资源:
f.close()
-用with语句可以更容易的清理打开的文件:
with open(path) as f:
lines = [x.rstrip() for x in f]
-这样就可以在退出代码块的时候自动关闭文件
-read会从文件返回字符串,返回的内容由文件的编码决定
-seek将文件位置更范围文件中的指定字节、
-tell可以给出当前位置
import sys
sys.getdefaultencoding()#查看当前默认编码
-向文件写入可以使用write或者writelines方法。
-常用的文件方法
read([size])#以字符串的形式返回文件数据。可选的参数size用于说明读取的字节数
readlines9[size])#将文件返回为行列表
write(str)#将字符串写入文件
close()#关闭句柄
flush()清空内部io缓存区,并将数据强行写回磁盘
seek(pos)#移动到指定的文件位置
tell()#以整数形式返回当前文件的位置
closed#如果文件已经关闭则返回true