Python中的函数

定义无参函数
def say_hello():
    print("today")
    print("so")
    print("古德!")

定义有参函数
def max_num(a,b):
    if a > b:
        print("max_num:",a)
    else:
        print("max_num:",b)

函数调用
格式:函数名(实际参数列表)
函数调用时需要注意参数,实参要和形参数量要一致,否则会抛出error
例如:
say_hello()
max_num(5,6)
return语句
格式:return[结果]  []中的结果可以省略
1.在函数的内部,用来结束当前函数的执行,并将结果返回给调用者
2.如果return 结果被省略,则默认为return None
3.如果函数中没有return语句,则相当于在函数最后执行了return None
4如果函数中return了结果,该结果要返回给调用者,一般需要一个变量来接收结果
5.函数中最多只能一个return语句被执行
def my_add(x,y):
    print(f"return前的sum调用等于{x+y}")
    return x+y
    print(f"return后调用等于{x + y}")#未执行
sum1=my_add(1,2)
函数参数传递:实参为不可变类型时,为值传递.  为可变类型时,为地址传递.

 形参的定义
- 位置形参:位置形参是最常见的参数类型,它们按照定义的顺序传递给函数。
- 默认参数:在 Python 中,默认参数在函数定义时只计算一次。建议默认参数使用不可变对象~
或将默认参数设置为 `None`,并在函数内部进行初始化~
如果默认参数是一个可变对象(如列表或字典),可能会导致意外行为。
默认参数必须在位置参数之后!!!
def myadd4(a, b, c=0, d=0):
    print(a)
    print(b)
    print(c)
    print(d)
    return a + b + c + d
print(myadd4(1, 2))
print(myadd4(1, 2, 3))
print(myadd4(1, 2, 3, 4))

- 星号元组形参(*args)
星号元组形参允许函数接受任意数量的位置参数,并将这些参数封装成一个元组。
语法:def 函数名(*元组形参名):
作用;收集多余的位置实参,元组形参名一般命名为args
def myfunc3(a, b, *args):
    print(a, b, args)
myfunc3(1, 2)
myfunc3(1, 2, 3, 4)

- 命名关键字形参
命名关键字形参是指在函数定义中,必须通过关键字传递的参数。它们通常出现在 `*` 或 `*args` 之后。
`*` 是一个分隔符,用于在函数定义中分隔普通位置参数和命名关键字参数。
它本身不接收任何参数,而是强制其后的参数必须通过关键字传递。
语法:def 函数名(*, 命名关键字形参1, 命名关键字形参2, ...):
或者
def 函数名(*args, 命名关键字形参1, 命名关键字形参2, ...):
作用:强制,所有的参数都必须用关键字传参

如果命名关键字参数在定义时指定了默认值(即缺省参数),则调用时可以不传递实参,函数会使用默认值。

如果命名关键字参数在定义时没有指定默认值,则调用时必须传递实参,否则会抛出 `TypeError`
def myfunc4(a, b, *args,c=0,d=0):
    print(a,b,args,a+b+c+d)
myfunc4(1,2,3,4,5,c=6,d=7)

- 双星号字典形参(**kwargs)
语法:**kwargs
作用:双星号字典形参允许函数接受任意数量的关键字参数,并将这些参数打包成一个字典。
收集多余的关键字传参,并且字典形参名最多有一个,字典形参名 一般命名为 kwargs且一般在最后
def myadd(**kwargs):
    print(kwargs)
myadd(a=1,b=2,c=3)
参数解包:如果调用时已经有一个元组或列表,可以使用 `*` 解包传递给函数;
如果有一个字典,可以使用 `**` 解包传递关键字参数。
'''
定义一个可以传入参数12,2,a = 1,b=2的函数fun01
定义一个既可以传入参数1,2,3,b = 2,c="3",d = 4又可以传入a = 1,b = 2的函数fun02
'''
def fun01(x,y,*,a,b):
    print(x+y+a+b)
fun01(12,2,a=1,b=2)
def fun02(x,y,*args,b=0,**kwargs):
    print(x,y,args,b,kwargs)
t={'ckey':3,'dkey' : 4}
l=[1,2,3]
fun02(1,2,3,b = 2,c=3,d=4)
fun02(1,2,3,b = 2,**t)
fun02(1,2,*l,b = 2,c=3,d=4)

匿名函数:它是一种简单的、一行的函数,常用于临时需要一个小函数的地方。匿名函数的语法如下:
语法:lambda  [函数的参数列表]: 表达式
def myadd(a,b):
    c=a+b
    print(c)
myadd(1,2)
result=lambda a,b:a+b
print(result(1,2))
函数嵌套:当同一作用域里面出现了两个同名函数时,后面的会将前面的同名函数覆盖。
当函数内部定义的函数名与全局函数相同时,优先调用内部定义的函数
函数的返回值可以是一个函数。
def execute():
    name = 'zhangsan'
    def inner():
        print(name)
    return inner
inner = execute()
print(type(inner))
inner()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值