1.修改文件
补充上次没洗完的:
想要修改某个文件里一块地方,可以使用seek函数找到位置write函数修改。
是不是觉得这很简单?
但是如果你这样操作很可能会出现乱码。
因为由于字节数的不同,编码的不同,你把你写的东西直接添加进去对原来的位置不是往后移,而是在原来的位置上直接覆盖,所以可能会出现乱码。
但是为什么word、wps可以直接修改文件?
wps、word会把文件从内存中全部加载到硬盘上,而不是在内存中修改,你有可能会发现当我们打开一个很大的文件时wps.word打开都很慢,因为把文件从内存中加载到硬盘里需要时间,文件越大需要的时间越多!
2.函数
函数是将一组语句通过一个名字*(函数名)封装起来,要想执行时,只需要调用其名字即可。
def fun(): 操作
主要作用是为了减少代码重复、使程序变得可扩展、易于程序的维护
下面我们看看什么是形参实参?
def fun(x,y): #这其中x,y是形参 操作 #函数调用 fun(5,6) #实参
python中的默认参数(举例生活中我们需要填一些东西,他老让我们写国籍,在我们的学校里都基本是国人,所以我们不想写国籍了怎么办?
用默认参数直接默认填写)
#默认参数 def fun(name,age,loc="中国"): 操作
当我们调用时如果不写这个参数他会默认是中国
fun("卢本伟",99) #我们没有写 就显示中国 fun("卢本伟",99,us)#如果写了就显示什么
注意的是默认参数必须放在位置参数的后面!!!!!!
python中的关键参数(必须放在未知参数后面)
def fun(name,age,country): 操作 #函数调用 fun("卢本伟",country="日本",age=99)
python中非固定参数
def send(msg,*user): for u in user: print("报警",u)
调用
方式一 send("报警",'alex','daliu') 其实写了*user后,参数就不固定了看你需要多少! 方式二 send('报警',*['alex','daliu'])
注意啦:::若*user后面还有参数怎么写呢 上面的写法是会报错的。
举例子:
def send(name,*user,age): 操作 调用:send("卢本伟",'alex','daliu',age=99) 这样子是不会报错的
可能大家也注意到了 *user就是穿了一个元祖/列表
那可以传递字典吗?
当然是可以的。。
name={ "01":"卢姥爷", "02":"开挂最牛逼" } def send(msg,**name): 操作 函数调用:send("报警",**name)
2.1返回值
函数中止并返回结果,未指定的返回none,函数永远只返回一个值
若出现这种:return name,age 是返回了两个值吗?
不是的,系统会将他们当做元祖显示出来。
也可以直接返回元祖例: return [name,age]
2.2局部变量、全局变量
局部变量:函数里面定义的变量,只在函数内部有效.
执行就近原则!
name=['alex','black','peiq']
def change():
def name[2]
name[1]='黑'
print(names)
#函数调用
change()
print(names)
结果是:name=['alex',黑]
为什么可以改变全局变量的值? 这其实只是把name的地址当做是一个整体,但其内部是可以修改的! 那种的是可以修改的? 就像这种一串串的可以修改 什么列表呀 字典丫的
2.3嵌套函数
就是函数里面嵌套函数嘛
要说的只有一点非常的重要
def change() : print("a") def change1() : print("b") 函数调用 change()
这个结果会显示什么?
结果:a
因为change1没有被调用所以不会执行
2.4匿名函数
fun=lambda x,y :
x*y
调用:print(fun(2,5))
就这个例子自行体会,要知道的是在匿名函数最骚的操作可能就是三元运算了。循环什么都不行,
2.5高阶函数
满足条件:
1.函数中参数是另一个函数(就是参数是函数)
def a(x,y): return x*y def b(x): return x f=b(a) #函数a被当做参数传入 print(f(2,8))
2.返回值中返回有函数
例:return abs,x,y