定义无参函数 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()