python语法基础 - day9~12 函数
1、函数定义和调用
1)定义
函数是实现一个特定功能的代码的封装
2)语法
def 函数名(形参):
说明文档
代码块
3)调用
函数名(实参)
调用时:实参的个数要和形参一致(有默认值的情况除外)
# 练习1:定义一个函数,求n的阶乘(factorial = n! = n*(n-1)*(n-2)...*1
# 函数的定义
def factorial(n):
"""
求n的阶乘
:param n: 提供一个指定的数值n
:return: None
"""
f = 1
for x in range(1, n+1):
f *= x
print(f)
# 调用函数
factorial(10) # 3628800
2、函数的参数
函数参数是将外部数据(实参)传入函数内部的入口或通道
1)位置参数和关键字参数
a.位置参数
调用时,形如函数名(实参1, 实参2, 实参3, ...)
,这里的参数就是位置参数,位置参数实参与形参一一对应,位置不能随意更换
def func1(a, b, c):
print(f'a:{
a}, b:{
b}, c:{
c}')
func1(10, 20, 30) # a:10, b:20, c:30
b.关键字参数
调用时,形如函数名(形参1=实参1, 形参2=实参2, 形参2=实参3, ...)
,这里的参数就是关键字参数,参数的位置可以随意更换
def func1(a, b, c):
print(f'a:{
a}, b:{
b}, c:{
c}')
func1(c=10, a=20, b=30) # a:20, b:30, c:10
注意:
位置参数和关键字参数同时存在时,位置参数在前,关键字参数在后。只要保证位置参数在前,后面的关键字参数之间可以更换位置
def func1(a, b, c):
print(f'a:{
a}, b:{
b}, c:{
c}')
func1(10, c=20, b=30) # a:10, b:30, c:20
2)参数的默认值
参数默认值是在定义函数时给形参赋值,在调用函数时,有默认值的参数可以不用传值,有默认值的参数要在没有默认值参数的后面
def func1(a, b, c=100):
print(f'a:{
a}, b:{
b}, c:{
c}')
func1(10, 20) # a:10, b:30, c:20
3)定长和不定长参数
a.定长参数
参数的个数是确定的
b.不定长参数 - 带*、带**
带*
- 在形参前面加*
,让形参变成不定长参数,可以同时接受多个实参,这个参数的本质是一个元组,传递的每个实参都变成这个元组的元素 (必须使用位置参数)
def func1(*args):
print(f'args的值:{
args}, 类型:{
type(args)}')
func1(10, 20, 30) # args的值:(10, 20, 30), 类型:<class 'tuple'>
带**
- 在形参前面加**
,让形参变成不定长参数,可以同时接受多个实参,这个参数本质是一个字典**(只能使用关键字参数)**
def func1(**kwargs):
print(f'kwargs的值:{
kwargs}, 类型:{
type(kwargs)}')
func1(a=10, b=20, c=30) # kwargs的值:{'a': 10, 'b': 20, 'c': 30}, 类型:<class 'dict'>
3、函数的返回值
1)什么是返回值 - 出口
从函数内部传递到函数外部的数据
2)如何确定函数返回值
每个函数都有返回值,返回值是什么就看return
后面跟的是什么(没有return返回值就是默认值None)
def f1():
return [1, 2]
# append()也是一个函数,一个返回值为None的函数,而result实际上是在获取append()的返回值
result = f1().append(200)
print(result) # None
# 这个才是在获取添加元素后的列表
l1 = f1()
l1.append(200)
print(l1) # [1, 2, 200]
return的作用:遇到return会确定返回数据并结束函数
3)怎么在函数外部获取返回值
函数调用表达式的值就是函数的返回值,所以获取函数调用表达式的值就是在获取函数的返回值
def func2(a, b):
return a*b
result1 = func2(33, 79)
print(f'result1:{
result1}') # result1:2607
注意:
函数只有一个返回值,形如return a, b, c
这种,返回值也只有一个,只不过这个返回值是一个容器/序列
def f(a, b):
return a+b, a-b, a*b, a/b
print