python函数的参数 匿名函数 Python函数与lambda 表达式

Python函数
一、函数的作用

  • 函数是组织好的 , 可重复使用的 , 用来实现单一或相关联功能的代码段
  • 函数能提高应用的模块性和代码的重复利用率
  • python 内置函数:https://docs.python.org/zh-cn/3.8/library/functions.html
二、函数的定义def function_name([parameter_list]):  [''' comments ''']  [function_body]
  • def:函数定义关键词
  • function_name:函数名称
  • ():参数列表放置的位置 , 可以为空
  • parameter_list:可选 , 指定向函数中传递的参数
  • comments:可选 , 为函数指定注释(如何打印函数中的注释)
  • function_body:可选 , 指定函数体
"""函数的定义""""""def function_name([parameter_list]):[''' comments ''']注释[function_body]函数体"""# 定义函数 , 参数为空(注意缩进)def function_demo():# 不要忘记冒号print("我是一个函数")# [function_body] 函数体# 定义函数 , 含有参数,注释def func_with_params(a, b, c):"""这是一个携带参数和注释的函数---> comments"""print(f"传入的参数为:a={a},b={b},c={c}")#打印函数comments(注释)# 1、__doc__打印出注释print(func_with_params.__doc__)# func_with_params()---->()没有括号# 2、help 打印函数和注释help(func_with_params)# func_with_params()---->()没有括号# 空函数 (函数体未想好/功能暂时没想好怎么写)# 1、passdef filter_char(s):pass# 2、commentsdef filter_char1(c):"""功能:过滤铭感词"""三、定义函数的注意事项:
  • 缩进:python 是通过严格的缩进来判断代码块儿
    • 函数体和注释相对于 def 关键字必须保持一定的缩进 , 一般都是 4 个空格
    • pycharm 自动格式化快捷键:ctrl+alt+L
  • 定义空函数
    • 使用 pass 语句占位
    • 写函数注释 comments
四、函数的调用
function_name([parameter_value])# function_name:函数名称# parameter_value:可选 , 指定各个参数的值"""函数的调用"""# 无参函数调用function_demo()# 有参函数调用func_with_params(1, 2, 3)五、函数参数的使用
  • 形式参数:定义函数时 , 函数名称后面括号中的参数
  • 实际参数:调用函数时 , 函数名称后面括号中的参数
"""函数参数的使用"""# 1、形式参数:定义函数时 , 函数名称后面括号中的参数def demo(a, b, v):# a, b, vprint(f"传入的参数为:a={a},b={b},c={v}")# 2、实际参数:调用函数时 , 函数名称后面括号中的参数demo(1, 2, 4)# 1,2,3实际参数1、位置参数
  • 数量必须与定义时一致
  • 位置必须与定义时一致
"""位置参数"""def demo(a, b, v):print(f"传入的参数为:a={a},b={b},c={v}")# 1、正确的demo(1, 2, 3)# 2、错误的例子 , 数量少了# demo(1, 45)# 有一个黄色提示系统提示:TypeError: demo() missing 1 required positional argument: 'v'# 3、错误的例子 , 数量多了# demo(1, 2, 3, 4)# 有一个黄色提示系统提示:TypeError: demo() takes 3 positional arguments but 4 were givendef person(name, age):print(f"姓名{name}")if age > 18:print(f"{name}已成年")else:print(f"{name}未成年")# 4、顺序错# person(22, 'tom')# TypeError: '>' not supported between instances of 'str' and 'int'# 5、正常person('jack', 28)2、关键字参数
  • 使用形式参数的名字确定输入的参数值
  • 不需要与形式参数的位置完全一致
"""关键字参数"""def person(name, age):print(f"姓名:{name}")if age > 18:print(f"{name}已成年")else:print(f"{name}:未成年")person(age=25, name='杨幂')3、设置默认参数
  • 定义函数时可以指定形式参数的默认值
  • 指定默认值的形式参数必须放在所有参数的最后 , 否则会产生语法错误
  • param=default_value:可选 , 指定参数并且为该参数设置默认值为 default_value
  • 注意:给形式参数设置默认值 , 默认值要用不可变对象(整数型、浮点型、元组、布尔值、字符串) , 用可变对象(字典 , 列表) , 默认值可能会催着调用发生变化
# 注意:给形式参数设置默认值 , 默认值要用不可变对象(整数型、浮点型、元组、布尔值、字符串) , 可变对象(字典 , 列表)# 错误示范 , 默认值为空列表def wrong_demo2(a, b, c=[]):c.append(a)c.append(b)print(a, b, c)wrong_demo2(1, 2)wrong_demo2(3, 4)"""设置默认参数"""def person(name, age, international='中国'):print(f"姓名:{name}")print(f"国籍为{international}")if age > 18:print(f"{name}已成年")else:print(f"{name}:未成年")person(name='jace', age=30)person(name='tom', age=25, international='美国')# 错误的 , 默认值没有放在最后def age(a=18, c, b):age(c, b)# 系统报错:SyntaxError: non-default argument follows default argument4、可变参数
  • 可变参数也称为不定长参数
  • 传入函数中实际参数可以是任意多个
  • 常见形式()
    • *args
      接收任意多个实际参数 , 并将其放到一个元组中
      使用已经存在的列表或元组作为函数的可变参数 , 可以在列表的名称前加*
    • **kwargs
      接收任意多个类似关键字参数一样显式赋值的实际参数 , 并将其放到一个字典中
      使用已经存在字典作为函数的可变参数 , 可以在字典的名称前加**
# *args 接收任意多个实际参数 , 并将其放到一个元组中# 函数定义中的*args相当于打包def print_language(*args):print(args)for a in args:print(a)# 调用函数 , 把不同数量的参数传递进去 , 用位置参数# print_language('python', 'java')# print_language('python', 'java', 'php', "go")# 函数调用时*args相当于解包lis = ['python', 'java', 'php', "go"]# 相当于 print_language('python', 'java', 'php', "go")print_language(*lis)# **kwargs 接收任意多个类似关键字参数一样显式赋值的实际参数 , 并将其放到一个**字典**中# 函数定义中的**kwargs相当于打包def print_info(**kwargs):print(kwargs)for a in kwargs.items():print(a)print_info(tom=18, jack=24)print_info(tom=18, jack=24, Aice=25)# 函数调用时**kwargs相当于解包di = {'cat': 18, 'jace': 24, 'alict': 65}print_info(**di)六、函数返回值
def function_name([parameter_list]):[''' comments '''][function_body]return [value]# value:可选 , 指定要返回的值"""函数返回值"""# 定义加法函数def sum(a, b):result = a + b# 函数返回值# return result, a, b# 返回保存元组r = sum(1, 2)print(r)lambda 表达式(匿名函数)1、使用场景
  • 需要一个函数 , 但是又不想费神去命名这个函数
  • 通常在这个函数只使用一次的场景下
  • 可以指定短小的回调函数
2、语法result = lambda [arg1 [, arg2, .... , argn]]: expression
  • result:调用 lambda 表达式
  • 【python函数的参数 匿名函数 Python函数与lambda 表达式】[arg1 [, arg2, …. , argn]]:可选 , 指定要传递的参数列表
  • expression:必选 , 指定一个实现具体功能的表达式
# 常规写法def circle_area(r):"""计算圆的面积r:半径"""result = math.pi * r ** 2return resultr = 10print(f"半径为{r}的面积为{circle_area(r)}")# lanbda表达式# result = lambda 参数 : expressionresult = lambda r: math.pi * r ** 2 print(f"半径为{r}的面积为{circle_area(r)}")# 对获取到的信息进行排序book_info = [('python', 15),('javn', 100),('软件测试基础', 25)]print(book_info)# 指定规则排列# lambda x: (x[1]) 返回了列表中每book_info.sort(key=lambda print(book_info)本文来自博客园 , 作者:{jiuyou-emperor} , 转载请注明原文链接:{https://www.cnblogs.com/jiuyou-emperor/}