定义一个函数
(1)函数代码块以def关键词开头,后接函数标识符名和圆括号()。
(2)任何传入实参和形参必须放在圆括号中。圆括号中写的是形参。
(3)函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
(4)函数内容以冒号起始,并且函数体要有缩进。
(5)return[expression]结束函数,选择性地返回一个值给调用者。不带表达式 的return相当于返回None
语法:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return[expression]
函数实例:
def add(a,b):
return a+b
print(add(2,3))
函数返回值
函数没有返回值时 默认返回None,函数有多个返回值时 默认以一个元组的形式返回
#函数无返回值,返回None
>>> def hello():
... print('hello')
...
>>> n=hello()
hello
>>> print(n)
None
#函数返回多个对象,默认以元组的形式返回
>>> def foo():
... return 'tanner',1000,-98.6
...
#定义变量接收函数的返回值
>>> x,y,z=foo()
>>> x
'tanner'
>>> y
1000
>>> z
-98.6
>>> m=foo()
>>> m
('tanner', 1000, -98.6)
#函数有多个返回对象时,可定义多个返回对象聚集后的类型
>>> def bar():
... return ['alice',100,-9]
...
>>> m=bar()
>>> m
['alice', 100, -9]
无参函数
def hello():
print("hello")
print(hello())
有参函数----调用函数时使用的参数类型如下:
1.必需参数
2.默认参数
3.不定长参数
4.关键字参数
#1.必需参数---调用函数时必需传入的参数,数量必需与声明的一致,不一致会报错
>>> def add(a,b):
... return a+b
...
>>> add(1,2)
3
#参数传入的顺序可以指定为以下方式
>>> add(b=3,a=2)
5
>>> add(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() missing 1 required positional argument: 'b'
#2.默认参数---调用函数时,可以不传入该参数的对象,不传的时候使用函数定义的默认值。必须参数
#注:默认参数一定要使用不可变对象,如果是可变对象,运行会有逻辑错误!
不可变对象:不可改变的数据类型,如:数字,字符串,元组
可变对象:如 字典,列表
》Python传参相当于传值和传引用的一种综合
》如果函数接收到是一个可变对象(比如字典或列表)的参数,这个时候就是通过传'引用'来传递参数(其实这种归根结底传的也是值,只不过是指向内存空间地址的值)
》如果函数接收到的是一个不可变对象(比如字符串,元组,数字)的参数,这个时候就是通过'传值'来传递对象,此时如果想改变原变量的值,可以将这些变量申明为全局变量
# 必须参数必须要在默认参数之前,(a, b=5)
>>> def add(a,b=5):
... return a+b
...
>>> add(1) #a=1,b=5
6
>>> add(1,2) #a=1,b=2
3
#默认参数常见问题---传入可变对象
>>> def add_end(L=[]):
... L.append('end')
... return L
...
>>> add_end()#调用结果正常
['end']
>>> add_end()#再次调用结果不正常
['end', 'end']
#解决办法:
>>> def add_end(L=None):
... if L is None:
... L = []
... L.append('END')
... return L
...
>>> add_end()
['END']
>>> add_end()
['END']
#3.不定长参数
func(*args)-----使用元组作为函数的参数,*args表示是一个元组
def add(a,b=2,*args):
print('类型:',type(args))
print('参数个数:',len(args))
sum=0
for i in args:
sum+=i
print('参数的和:',sum+a+b)
add(1,2,3,4)
add(1,3,4)
add(1,2)
#4.关键字参数
func(**kw)-----使用字典作为函数的参数,**args表示是一个字典
def func(a,b=2,**kw):
print("kw type=%s"%type(kw))
print("kw=%s"%str(kw))
print("name=%s"%str(kw['name']))
func(1,2,name='tanner',sex='m')