函数说白了,就是把一组代码合到一起,可以实现某种功能,需要再用到这个功能的话,直接调用这个函数就行了
1.函数的定义如下
定义函数使用def关键字,后面是函数名,函数名不能重复
def my_open(fw):
fw = open('a.txt','a+')
fw.seek(0)
my_open()
2.位置参数:按照参数的位置来进行传参,比如说下面的reg函数,name和age就是位置参数,位置参数是必传的
eg:
def reg(name,age,sex='男'):
#age、name必填参数,位置参数
#sex是默认值参数,不是必传
print('hello %s,age is %s,sex is %s'%(name,age,sex))
reg(age='吴冰',name=38,sex='未知')
3.默认参数:默认参数就是在定义形参的时候,给函数默认赋一个值,默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数后面定义
eg:
def reg(name,age,sex='男'):
#age、name必填参数,位置参数
#sex是默认值参数,不是必传
print('hello %s,age is %s,sex is %s'%(name,age,sex))
reg(age='吴冰',name=38,sex='未知')
4.可变参数:可变参数用*来接收,后面想传多少个参数就传多少个,如果位置参数、默认值参数、可变参数一起使用的的话,可变参数必须在位置参数和默认值参数后面。可变参数也是非必传的
#可变参数,也叫参数组,也不是必填的,它接收到的是一个元组
#它把调用函数时穿进去的每一个参数都放到一个元组里
def more_arg(name,age,sex='nan',*agrs):#位置参数、默认值参数、可变参数,可变参数会把后面多传的参数都放到args这个元组中
#当然args名字是随便写的,不过一般我们都写args
print(name,age,agrs)
more_arg('Marry',18,'nv','python','China')#调用
5.关键字参数:关键字参数使用**来接收,后面的参数也是不固定的,想写多少个写多少个,当然也可以和上面的几种一起来使用,如果要一起使用的话,关键字参数必须在最后面。
注意:使用关键字参数的话,调用的时候必须使用关键字传参。关键字参数也是非必传的。
#关键字参数,接收的是一个字典,调用得用xx=11,也不是必填的
#传入字典调用的时候就得写**{'age': 18, 'name': '吴冰'}
eg:
def kw_arg(name,**kwargs):#位置参数、关键字参数,调用的时候会把传入的关键字参数放到kwargs这个字典中
print(name,kwargs)
kw_arg('sriba',sex='男',age=18)#调用,sex和age就是关键字调用
6.必填参数、默认值参数、可变参数和关键字参数一起用
def other2(name,country='china',*args,**kwargs):
#如果必填参数、默认值参数、可变参数和关键字参数你要一起用的话
#必须参照必填参数、默认值参数、可变参数和关键字参数的顺序接收,否则就会报错
print(name)
print(country)
print(args)
print(kwargs)
other2('wubing','xxx')
other2('wubing','beijing','python','changping',user='niuhanyang')
7.关键字参数调用
def write(filename,model,ending,user,os,money,other):
print(filename)
print(model)
print(ending)
print(user)
print(os)
print(money)
print(other)
write(os='Windows',user='wubing',model='w',filename='a.txt',ending='utf-8',money=9999,other='xxxxx') #可以不按顺序,不过要指定
write('a.txt','w',money=99,os='windos')
write(os='windos','a.txt')
8.函数的返回值:为什么要有返回值呢,是因为在这个函数操作完之后,它的结果在后面的程序里面需要用到
每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None,函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元组。函数中的返回值使用return,函数在遇到return就立即结束。
#1、函数碰到return,立即结束这个函数
#2、调用完函数之后,返回计算的结果
#3、函数可以没有返回值,如果没有返回值的话,默认给你返回None
#如果这个函数的处理结果咱们需要在别的地方用到,那你就得给函数返回值
#如果函数return多个值的话,那么它会把多个值放到一个元组里面去
eg1:
def plus(a,b):
c = a+b
return c
eg2:
score1 = 50
score2 = 90
def echo():
return score1,score2
eg3:
def calc(x,y):#这个就是定义了一个有返回值的函数
c = x*y
return c,x,y
res = calc(5,6)#把函数的返回结果赋值给res
print(res)
9.全局变量和局部变量
#在函数里面定义变量叫局部变量,它只能在函数里面用,出了该函数外,就不能使用了
#在函数外面定义的变量,是全局变量,在函数内也可以使用
#如果想在函数里面修改全局变量的值,那么要先用global关键字声明
#要修改全局变量是int、string的话,必须得写global
#如果是字典和list的话,要修改的话,不能加global
eg:
name = 'marry'#字符串全局变量
names = []#list全局变量
print(name)
print(names)
def test():
global name #修改name的值就需要用global关键字
name = 'Sriba'
names.append(name)#修改全局变量names的值
return names
test()调用函数
print('修改后',name)
print('修改后names',names)