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
posted @ 2021-10-29 23:45  下个ID见  阅读(36)  评论(0)    收藏  举报