python基础(13)函数之函数的参数与返回值
函数
函数,可以当做是一大堆功能代码的集合。
def 函数名():
函数内编写代码
...
...
函数名()
-
有重复代码,用函数增加代码的重用性。
-
代码太长,用函数增强代码的可读性
>>> def func():
print("hello world")
写了函数要执行
>>> func()
hello world
1,函数的参数
在定义函数时,如果在括号中添加变量,我们称它为函数的形式参数:
>>> def func(data):
print(data)
>>> func("hello world")
hello world
1.1,形参
只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
>>> def func(data):
print(data)
>>> func("hello world")
hello world
# data就是形参,在该函数内部data有值,函数结束data就没有值
>>> data
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
data
NameError: name 'data' is not defined
1.2,实参
可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
>>> def func(data):
print(data)
>>> func("hello world") # "hello world"------>实参
hello world
>>> func(112233) # 112233------>实参
112233
1.3,默认参数
>>> def func(data="hello world"):
print(data)
>>> func() # 不给传参使用默认值
hello world
>>> func(112233) # 给传参使用传递的参数
112233
在有多个参数时,使用默认值传参的时候要注意把默认参数放后面
>>> def func(a=2,b):
print(b**a)
SyntaxError: non-default argument follows default argument
>>> def func(a,b=2):
print(a**b)
>>> func(1)
1
>>> func(2)
4
>>> func(2,3)
8
1.4,关键字参数
>>> def func(a,b=2):
print(a**b)
>>> func(a=2,b=3)
8
>>> func(b=3,a=3)
27
关键参数必须放在位置参数(以位置顺序确定对应关系的参数)之后
>>> def func(a,b,c):
print(a*b*c)
>>> func(b=2,3,4)
SyntaxError: positional argument follows keyword argument
>>> func(3,b=2,c=4)
24
>>> func(3,4,b=2)
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
func(3,4,b=2)
TypeError: func() got multiple values for argument 'b'
>>> func(3,c=4,b=2)
24
1.5,非固定参数
函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
-
*args 会把多传入的参数变成一个元组形式
>>> def func(*args):
print(args)
>>> func(2,3)
(2, 3)
>>> func(a=2,b=3)
Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
func(a=2,b=3)
TypeError: func() got an unexpected keyword argument 'a'
-
*kwargs 会把多传入的参数变成一个dict形式
>>> def func(**kwargs):
print(kwargs)
>>> func(a=2,b=3)
{'a': 2, 'b': 3}
>>> func(2,3)
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
func(2,3)
TypeError: func() takes 0 positional arguments but 2 were given
2,return
-
返回值
函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回
>>> def func(a,b):
return a+b
>>> c = func(2,3)
>>> c
5
如果没有写return,则默认为None
>>> def func(a,b):
c = a + b
>>> res = func(2,3)
>>> print(res)
None
-
结束函数
>>> def func(a,b):
if a**b > 10:
return a + b
print(111)
>>> c = func(3,5)
>>> c
8
# 3**5大于10 程序结束,返回3+5,不会打印111
3,执行函数传递的是内存地址
查看内存地址的函数是id()
>>> data = "hello world"
>>> id(data)
43712048
>>> def func(data):
print(id(data))
>>> func(data)
43712048
好处:
-
节约内存
-
对于可变类型,修改了一个地方,其他地方也修改了
-
>>> v1 = [111,222,333]
>>> def func(data):
data.append(444)
>>> func(v1)
>>> v1
[111, 222, 333, 444]
4,返回值也是内存地址
>>> id(v1)
44021224
>>> def func(data):
data.append(444)
return data
>>> v2 = func(v1)
>>> v2
[111, 222, 333, 444, 444]
>>> id(v2)
44021224
浙公网安备 33010602011771号