函数

-如果你要重复使用相同的或者非常相似的功能,就写一个函数。
-函数使用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