函数定义
函数的定义规则:
- (1)函数代码块以def关键词开头,后接函数标识符名和圆括号()。
- (2)任何传入实参和形参必须放在圆括号中。圆括号中写的是形参。
- (3)函数的第一行语句可以选择性地使用文档字符串—-用于存放函数说明。
- (4)函数内容以冒号起始,并且函数体要有缩进。
- (5)return[expression]结束函数,选择性地返回一个值给调用者。不带表达式 的return相当于返回None。
函数参数
- 无参
- 有参
- 必备参数
- 命名参数
- 缺省参数
- 不定长参数
有参数函数——必备参数
- 不可变参数:字符串、数字、元祖等,传递的是值
- 可变参数:字典、列表,传递的是引用(其实这种归根结底传的也是值, 只不过是指向内存空间地址的值)
#传不可变参数
a=1
def func(a):
a= a+1
print(a) #2
func(a)
print(a) #1
#
#传可变参数
l=[1,2,3]
def func(l):
l.append(1)
print(l) #[1]
func([])
func(l)
print(l) # [1,2,3,1]
- 函数中引用全局变量
a=1
def func():
global a
a += 1
print(a) #2
func()
默认参数
- 不可变对象:str int float
- 可变对象:list tuple dict
def add_end(L=[]):
L.append('end')
return L
print(add_end([1,2,3]))
print(add_end(['1','2','3']))
print(add_end())
print(add_end())
print(add_end())
>>[1,2,3,'end']
>>['1','2','3','end']
>>['end']
>>['end','end']
>>['end','end','end']
定义默认参数要牢记一点:默认参数 必须指向不变对象
def add_end(L=None):
if L is None:
L=[]
L.append('end')
return L
有参数函数——命名参数
- 传参时命名参数必须在非命名参数的后面
def add(a,b,c):
return a+b+c
print(add(3,c=2,b=1))
print(add(3,a=1,b=2)) #TypeError: add() got multiple values for argument 'a'
print(add(b=1,c=2,3)) #SyntaxError: positional argument follows keyword argument
有参数函数——缺省函数
- 默认值必须要放到没有默认值参数的最后面
def func(s,times=1):
print(s*times)
print('gloaryroad')
print('golaryroad',4)
- 关键参数赋值,指定其中的一部分默认参数值
def func(x, y=3, z=8):
print ('x is', x)
print ('y is', y)
print ('z is', z)
func(3,7)
print('-'*30)
func(25,z=24)
print('-'*30)
func(z=50,x=100)
不定长函数
- 传递元祖
def powersum(power,*args):
total = 0
for i in args:
total += pow(i,power)
return
print (powersum(2,3)) #9
print (powersum(2,3,4)) #25
print (powersum(2,3,4,5)) #50
- 传递字典
- *args表示的是一个元组
- **args表示的是一个字典
def func2(a,b=100,*arg,**args):
print ("keys type=%s" % type(keys))
print ("keys=%s" % str(keys))
print ("name=%s" % str(keys['name']))
print ("sex=%s" % str(keys['sex']))
sum=0
for i in args:
sum += i
print('sum=',sum)
for key,value in keys:
print(key,value)
fun2(1,2,3,4,name="vp",age=19,sex="m")
有参数函数——不定长参数
- 元祖作为参数:*arg,元祖长度不定
def func(a,b,*arg):
print(type(arg))
for i in arg:
print(i)
print(func(1,2))
print(func(1,2,3))
print(func(1,2,3,4,5))
- 字典作为参数:**key,字典长度不定
def func(a,b,**kw)
print(type(kw))
for k,v in kw.values():
print(k,'=',v)
print(1,2,c=3,d=4,e=5)
def func(a,b,*arg,**kw):
sum=a*b
for i in arg:
sum *=i
for v in kw.values():
sum *= v
return sum
print(1,2,3,4,c=5,e=6)
print(1,2,*(3,4),**{'c':5,'d':6})
c=(3,4)
>>> f={'c':5,'d':6}
>>> print(func(1,2,*c,**f))
>>720
Pass
- 在函数或者类中,使用pass语句,表示一个空的语句块, 仅作为占位,执行后并没有任何效果,可以用于定义待 开发的函数或类
def someFunction():
pass
函数返回值
- 返回一个值
- 返回多个值
- 没有return语句时,自动return None
def sum(operandA,operandB):
return float(operandA)+float(operandB)
print ("10+5=",sum(10,5))
def func(a,b):
return a,b
print (func(10,20)) #(10,20) 返回tuple