python函数扩展

169 阅读3分钟
函数的返回值:
  • 如果函数有多个return的话,只有第一个生效,之后的是不会生效的
def num_fun():
    return 1
    return 2

num = num_fun()
print(num)  # 1 只会接收到1 ,2不会接收到
  • 如果需要返回多个元素,可以使用‘,’分开,使用对应数量的变量按顺序接收。
def nums_fun():
    return 1, 2

# 如果有多个返回值,等号前边可以用多个变量接收,按顺序接收到对应的返回值
x, y = nums_fun()
print(x, y)
函数的参数类型
  1. 位置参数:
def people(name, age, hobby):
    print(f"姓名是:{name}, 年龄是:{age}, 爱好是:{hobby}")

people("王拿铁", 18, "敲代码")  # 传入的三个参数会和函数的对应参数根据位置一一对应
  1. 关键字参数:
# 调用函数传递参数的时候,使用关键字传去参数。好处:可以不按顺序,更加明了。
people(age=18, name="王拿铁", hobby="敲代码")

# 也可以混合传参,但注意:位置传参必须在关键字传参之前
people("王拿铁", age=18, hobby="敲代码")    # 正确的

# people(age=18, "王拿铁",  hobby="敲代码") # 错误演示
  1. 不定长参数:
*args
# 不定长参数,也叫做可变参数,用于不确定调用的时候会传几个参数(不传参数也可以)的情况。
# 使用*args代替参数,所有的参数都会被args收集,args会把所有的参数放到一个元组中,
# 所以它是一个元组类型,也叫位置传递。
def people(*args):
    print(args)


people("王拿铁", 18)  # ('王拿铁', 18)
people("王拿铁")             # ('王拿铁',)
people(("王拿铁", 18))       # (('王拿铁', 18),)
people()                    # ()
**kwargs
# 关键字传递 使用**kwargs代替参数,调用函数时,传递的参数必须是使用键值对进行传递。
def people(**kwargs):
    print(kwargs)

# people("王拿铁", 18)                         # 错误演示
people(name="王拿铁", age=18, hobby="敲代码")  # {'name': '王拿铁', 'age': 18, 'hobby': '敲代码'}
people(name={"王拿铁", 18})                   # {'name': {18, '王拿铁'}}
people()                                     # {}
  1. 缺省参数:
# 缺省参数,函数可以给参数加上一个默认值,不传该参数的话就使用默认值,否则就使用传递的参数修改默认值
def people(name, age, hobby="敲代码"):
    print(f"姓名是:{name}, 年龄是:{age}, 爱好是:{hobby}")

people("王拿铁", 18, "打游戏")  # 姓名是:王拿铁, 年龄是:18, 爱好是:打游戏
people("王拿铁", 18)           # 姓名是:王拿铁, 年龄是:18, 爱好是:敲代码
  1. 将函数作为参数传递:
def add_fun(fun):
    count = fun(1, 2)
    return count

def sum(x, y):
    return x + y

count = add_fun(sum)
print(count)     # 3

还可以将add_fun的参数传递给sum进行处理:

def add_fun(fun,num1,num2):
    count = fun(num1, num2)
    return count

def sum(x, y):
    return x + y

count = add_fun(sum, 1, 2)
print(count) # 3
  1. 匿名函数,lambda()。语法:lambda 参数:函数体。
  • lambda 不需要写return ,默认就是return出去的。
  • 匿名函数用于临时构建一个函数,只用一次。
  • 匿名函数只可以写一行代码。
def add_fun(fun):
    count = fun(1, 2)
    return count


count = add_fun(lambda x, y : x+ y)
print(count) # 3