拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Python函式与lambda 表达式(匿名函式)

Python函式与lambda 表达式(匿名函式)

白鹭 - 2022-02-12 1961 0 0

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、pass
def filter_char(s):
    pass


# 2、comments
def 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, v
    print(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 given


def 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 argument
4、可变自变量
  • 可变自变量也称为不定长自变量

  • 传入函式中实际自变量可以是任意多个

  • 常见形式()

    • *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 表达式

  • [arg1 [, arg2, …. , argn]]:可选,指定要传递的自变量串列

  • expression:必选,指定一个实作具体功能的表达式

# 常规写法                              
def circle_area(r):                 
    """                             
    计算圆的面积                          
    r:半径                            
    """                             
    result = math.pi * r ** 2       
    return result                   
r = 10                              
print(f"半径为{r}的面积为{circle_area(r)}")
                                    
# lanbda表达式                         
# result = lambda 自变量 : expression   
result = 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/}

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *