函数 在java中叫方法。
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。
但你也可以自己创建函数,这被叫做用户自定义函数。
1、补充文件的修改
实际上文件是不能修改的,文件的修改其实是,先备份旧的文件,然后修改备份的文件,接着删除旧文件,将
备份的文件改成旧的文件名,这样看来就像修改的原来的文件一样.
另外还要补充的是,对文件的操作模式中,不建议使用带'+'号的模式,写的时候就专门写,读的时候就专门读!
1 with open('d:\orders.txt', mode='r', encoding='utf-8') as f1, \2 open('d:\orders.txt.bak', mode='w', encoding='utf-8') as f2:3 f1_content =f1.read()4 f2.write(f1_content.replace('\n new content added', '\n new line'))5 #使用os修改删除旧文件,重命名新文件为旧文件名,必须放在with语句外边,否者报错,文件正在编辑!
6 importos7
8 os.remove('d:\orders.txt')9 os.renames('d:\orders.txt.bak', 'd:\orders.txt')
2、函数的定义 def:函数分内置函数和自定义函数,此处就是自定义函数
deffunc():print('hello func')
3、函数的调用
func()
4、函数的返回值 return
返回值的3种情况
没有返回值 —— 返回None
不写return
只写return:结束一个函数的继续
return None —— 不常用
返回1个值
可以返回任何数据类型
只要返回就可以接收到
如果在一个程序中有多个return,那么只执行第一个
返回多个值
用多个变量接收:有多少返回值就用多少变量接收
用一个变量接收: 得到的是一个元组
1 #1)使用return直接退出函数,函数内,其后面的语句不执行,相当于break
2 deffunc_return():3 print('func_return')4 return #也可带上None
5 print('haha')6 func_return()7 #2)返回值
8 deffunc_return_s():9 return [1, 2, 3]10
11 print(func_return_s())
5、函数的参数
1)、形参:有位置参数、可变参数(*args)、默认参数、可变关键字参数(**kargs)
2)、实参:按照位置传参、按照关键字传参
1 def func_have_arg(arg): #此处的arg就是形式参数,即形参
2 print('你传入的参数是%s'%arg)3 func_have_arg(1) #此处的1就是实际参数,即实参
4
5 deffunc_have_args(arg1, arg2):6 print('你传入的参数是:{0}-{1}'.format(arg1, arg2))7 func_have_args('参数1', '参数2')8
9 def func_have_variable_args(*args): #可变参数,以元组形式传入函数中
10 print(args)11 func_have_variable_args(1, 2)12 func_have_variable_args(1, 2, '参数1', '参数2')13
14 def func_have_default_value(arg1, arg2='male'): #默认参数的顺序在可变参数后
15 print("含有默认参数的,不输入该参数就使用默认的值,输入就覆盖默认值!{0}-{1}".format(arg1, arg2))16 func_have_default_value('性别')17 func_have_default_value('性别', 'female')18
19 def func_have_keyword_variable_args(**kwargs): #可变关键字参数
20 print('可变关键字参数是:{0}'.format(kwargs))21 func_have_keyword_variable_args(name='tom', ginder="female")
View Code
3)、动态传参的另外一种方式
def func_dy(*args):#站在形参的角度上,给变量加上*,就是组合所有传来的值。
print(args)
func_dy(1,2,3,4,5)
l= [1,2,3,4,5]
func_dy(*l) #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散#func_dy(**l) 可据上推导出关键字可变参数的传参方式
参数
没有参数
定义函数和调用函数时括号里都不写内容
有一个参数
传什么就是什么
有多个参数
位置参数
站在实参的角度上:
按照位置传参
按照关键字传参
混着用可以:但是 必须先按照位置传参,再按照关键字传参数
不能给同一个变量传多个值
站在形参的角度上
位置参数:必须传,且有几个参数就传几个值
默认参数: 可以不传,如果不传就是用默认的参数,如果传了就用传的
只有调用函数的时候
按照位置传 : 直接写参数的值
按照关键字: 关键字 = 值
定义函数的时候:
位置参数 : 直接定义参数
默认参数,关键字参数 :参数名 = '默认的值'
动态参数 : 可以接受任意多个参数
参数名之前加*,习惯参数名args,
参数名之前加**,习惯参数名kwargs
顺序:位置参数,*args,默认参数,**kwargs
动态参数有两种:可以接受任意个参数
*args : 接收的是按照位置传参的值,组织成一个元组
**kwargs: 接受的是按照关键字传参的值,组织成一个字典
args必须在kwargs之前
6、函数的注释
deffunc_comment(args):'''函数注释的演示
:param args: 可变的参数
:return: None'''
return None