> 文章列表 > Python基础之函数

Python基础之函数

Python基础之函数

一、定义函数

函数的使用必须遵循“先定义,后调用”的原则。函数的定义就相当于事先将函数体代码保存起来,然后将内存地址赋值给函数名,函数名就是对这段代码的引用,和变量的定义是相似的。如果没有事先定义函数而直接调用,就相当于在引用一个不存在的“变量名”。

定义函数

def 函数名(参数1,参数2,...):"""文档描述"""函数体return 值
  • def: 定义函数的关键字;
  • 函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;
  • 括号:括号内定义参数,参数是可有可无的,且无需指定参数的类型;
  • 冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
  • """文档描述""": 描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;
  • 函数体:由语句和表达式组成;
  • return 值:定义函数的返回值,return是可有可无的。如果没有return 值,则默认return None。

二、参数

参数是函数的调用者向函数体传值的媒介,若函数体代码逻辑依赖外部传来的参数时需要定义为参函数

def func(a, b):return a+b

没有参数的则为无参函数

def func():print("没有参数")

参数有:位置参数、默认参数、可变参数、关键字参数

1:位置参数:严格按照参数的顺序来读取,调用函数时传入的参数和定义函数时的参数位置是一一对应的。

def get_info(name, age):print(f"你好,我是{name},今年{age}岁")# name与age传参的位置与函数定义时一致
get_info('jack', 18)   # 输出:你好,我是jack,今年18岁# name与age传参的位置与函数定义时不一致
get_info(18, 'jack')   # 输出:你好,我是18,今年jack岁

2:默认参数:在定义函数的时候,可以给定传入参数的默认值,那么在调用函数的时候,可以不用提供参数,或部分提供,或全部提供。

def get_info(name='json', age=12):print(f"你好,我是{name},今年{age}岁")
# 不提供参数
get_info()    # 输出:你好,我是json,今年12岁
# 提供部分参数
get_info(name='jack')    # 输出:你好,我是jack,今年12岁
# 全部提供
get_info('lili', 20)    # 输出:你好,我是lili,今年20岁

3:可变参数(*):*表示将位置参数,默认参数外的参数打包成一个序列(元组)。需要用一个变量来接收可变参数,例如常用的:*args,args代表一个变量名,args可以换成其他的变量名。

def func(*args):print(args)
func(1,2,3,4,5,6,'a','b')   # 输出:(1, 2, 3, 4, 5, 6, 'a', 'b')def get_info(name, age=12, *args):print(f"你好,我是{name},今年{age}岁,其他信息{args}")get_info('json', 20, 'man', '185cm')
# 输出:你好,我是json,今年20岁,其他信息('man', '185cm')

4:关键字参数():表示将以关键字参数传入的位置参数、默认参数外的其他关键字参数组成一个字典。需要用一个变量来接收关键字参数,例如常用的kwargs,kwargs代表一个变量名,接收关键字参数,kwargs可以换成其他的变量名。

def func(kwargs):print(kwargs)
func(name='lili', age=18, sex='woman', height='170', weight='100')
# 输出:
{'name': 'lili', 'age': 18, 'sex': 'woman', 'height': '170', 'weight': '100'}def get_info(name, age=12, kwargs):print(f"你好,我是{name},今年{age}岁,其他信息{kwargs}")get_info('json', age=20, sex='man', height='185', weight='130')
# 输出:
你好,我是json,今年20岁,其他信息{'sex': 'man', 'height': '185', 'weight': '130'}

在参数值前加上参数名,则参数的位置是可以进行调换的。

def get_info(name='json', age=12):print(f"你好,我是{name},今年{age}岁")
get_info(age=20, name='lili')
# 输出:你好,我是lili,今年20岁

python函数在解析参数时的顺序:位置参数、默认参数、可变参数、关键字参数。

默认参数必须是不可变的且默认参数必须在位置参数之后

def get_info(name, age=12, *args, kwargs):print(f"你好,我是{name},今年{age}岁,身高体重{args}, 其他信息{kwargs}")get_info('json', 20, '185', '130', address='四川成都', phone='13112345678')
# 输出
你好,我是json,今年20岁,身高体重('185', '130'), 其他信息{'address': '四川成都', 'phone': '13112345678'}

三、函数的调用以及返回值

​ 函数的使用分为定义阶段与调用阶段,定义函数时只检测语法,不执行函数体代码函数名加括号即函数调用只有调用函数时才会执行函数体代码

#定义阶段
def foo():print('in the foo')bar()def bar():print('in the bar')#调用阶段
foo()

执行结果:

in the foo
in the bar

函数的调用可以分为三种:

#1、语句形式:
foo()#2、表达式形式:
m=my_min(1,2) #将调用函数的返回值赋值给x
n=10*my_min(1,2) #将调用函数的返回值乘以10的结果赋值给n#3、函数调用作为参数的形式:
# my_min(2,3)作为函数my_min的第二个参数,实现了取1,2,3中的较小者赋值给m
m=my_min(1,my_min(2,3))

若需要将函数体代码执行的结果返回给调用者,则需要用到return。return后无值或直接省略return,则默认返回None,return的返回值无类型限制,且可以将多个返回值放到一个元组内

def test(x,y,z):return x,y,z #等同于return (x,y,z)res=test(1,2,3)
print(res)
(1, 2, 3)

return是一个函数结束的标志,函数内可以有多个return,但只执行一次函数就结束了,并把return后定义的值作为本次调用的结果返回。