百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

【python】(5)函数(python里面函数)

toyiye 2024-09-09 08:59 3 浏览 0 评论

def 函数名(参数1,参数2....):
    ...
    reture 结果 #可以不返回
def greet_user():
    """显示简单的问候语"""
    print("hello") 
greet_user()

参数

关键字参数

指定参数指向,如果不加关键字必须顺序一致

def greet_user(animal_type, pet_name):
    print(f"我有一只宠物{animal_type},它叫做{pet_name}") greet_user( pet_name="皮特",animal_type="狗")
greet_user("狗", "皮特")

默认参数

函数参数可以有默认值。如果没有为这些参数提供值,将自动使用定义函数时指定的默认值。

定义具有默认值的参数只需要在函数定义中将值赋给参数即可。

def greet(name, msg="Hello"):
    print(f"{msg}, {name}!")

greet("Alice")  # 使用默认消息
greet("Bob", "Good morning")  # 提供自定义消息

在这个例子中, msg 参数有一个默认值 "Hello"。如果调用 greet 时没有提供 msg 参数的值,就会使用这个默认值。

当默认值是可变对象(例如列表、字典或其他可变类型)时,可能会遇到预期之外的行为。

def append_number(numbers=[]):
    numbers.append(1)
    return numbers

print(append_number())  # 输出: [1]
print(append_number())  # 输出: [1, 1]

这个行为是因为函数的默认值只在函数定义时评估一次,所以每次调用 append_number 时,如果不提供 numbers 参数,都会使用同一个列表对象。为了避免这个问题,推荐使用不可变对象作为默认值。

对于需要使用可变对象作为默认值的情况,推荐的做法是使用 None 作为默认值,在函数体内部检查它,并据此初始化。

def append_number(numbers=None):
    if numbers is None:
        numbers = []
    numbers.append(1)
    return numbers

print(append_number())  # 输出: [1]
print(append_number())  # 输出: [1]

这样每次调用 append_number 时,如果没有提供 numbers 参数,都会创建一个新的空列表。

可变参数

可变参数允许函数调用时传入任意数量的参数,无论是位置参数还是关键字参数。这通过使用 *args**kwargs 语法实现。

使用*args接受任意数量的位置参数

当你在函数定义中使用 *args 时,所有传入的位置参数都会被收集到一个名为 args 的元组中。 args 是约定俗成的名称,你也可以使用其他名称,但 * 符号是必须的。

def print_args(*args):
    for arg in args:
        print(arg)

print_args('hello', 'world', 123)

这里, print_args 可以接受任意数量的位置参数,并将它们依次打印出来。

使用**kwargs接受任意数量的关键字参数

使用 **kwargs 时,所有传入的关键字参数都会被收集到一个名为 kwargs 的字典中。同样地, kwargs 只是一个习惯用法,你可以使用任何你喜欢的参数名,关键是 ** 符号。

def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name='Alice', age=30)

在这个例子中, print_kwargs 函数接受任意数量的关键字参数,并遍历 kwargs 字典,打印出所有的键值对。

同时使用*args和**kwargs

你可以在同一个函数中同时使用 *args**kwargs 来让它接受任意数量的位置参数和关键字参数。

def print_everything(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_everything('apple', 'banana', color='red', count=5)

在这个例子中, print_everything 函数同时接受任意数量的位置参数和关键字参数,并分别处理它们。

注意

  • 当同时使用 *args**kwargs 时, *args 必须位于 **kwargs 之前。
  • 在调用函数时,位置参数必须在关键字参数之前。
  • 使用可变参数时,要注意函数内部对 argskwargs 的处理逻辑,确保函数的行为符合预期。

函数返回值

通过 return 语句,函数能够返回一个或多个值。

单个返回值

最基本的形式是函数返回单个值。这通过简单地在函数中使用 return 语句实现。

def square(number):
    return number ** 2

result = square(4)
print(result)  # 输出: 16

在这个例子中, square 函数计算传入数字的平方并返回结果。

返回多个值

可以一次性返回多个值,这通常是通过返回一个元组实现的。在实际应用中,你不需要显式地创建元组;只需在 return 语句中用逗号分隔多个返回值即可。

def get_user():
    name = "Alice"
    age = 30
    return name, age
# 直接解包赋值
user_name, user_age = get_user()
print(user_name, user_age)  # 输出: Alice 30

这里, get_user 函数返回了两个值: nameage。调用函数时,可以通过多个变量接收这些返回值。

没有返回值

如果函数没有 return 语句,或者 return 语句没有跟随任何值,那么函数会默认返回 None

def print_message(message):
    print(message)

result = print_message("Hello, Python!")
print(result)  # 输出: None

即便 print_message 函数执行了打印操作,但由于没有 return 语句,它返回了 None

使用return提前退出函数

return 语句不仅用于返回值,还可以用于提前退出函数,即使在函数的其他部分还有代码。

def divide(x, y):
    if y == 0:
        print("Error: Division by zero.")
        return
    return x / y

result = divide(10, 0)
print(result)  # 输出: Error: Division by zero.
               # None

在这个例子中,如果尝试除以零,则函数会打印错误消息并提前退出,返回 None

匿名函数

匿名函数或 lambda 函数是一种定义简单函数的快捷方式,它们不需要使用标准的 def 关键字。匿名函数主要用于编写简洁的代码,尤其是在需要将函数作为参数传递给其他函数的场景中。

基本语法

匿名函数的基本语法如下:

lambda arguments: expression

这里, lambda 是定义匿名函数的关键字, arguments 是函数的参数, expression 是函数体,它是一个表达式,表达式的计算结果就是函数的返回值。

square = lambda x: x ** 2
print(square(5))  # 输出: 25

在这个例子中,我们定义了一个匿名函数来计算数字的平方,并将这个函数赋值给变量 square。然后,我们调用这个匿名函数并打印结果。

使用场景

匿名函数通常用于函数调用的参数中,特别是那些接受其他函数作为参数的高阶函数。例如, filter()map()sorted() 等。

使用map()应用匿名函数

map() 函数可以将匿名函数应用于序列中的每个元素。

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # 输出: [1, 4, 9, 16, 25]

使用filter()过滤序列

filter() 函数可以使用匿名函数来过滤序列,只保留满足条件的元素。

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出: [2, 4, 6]

在sorted()中使用自定义排序

通过 sorted() 函数的 key 参数,我们可以使用匿名函数来自定义排序逻辑。

points = [(1, 2), (3, 1), (5, 4)]
sorted_points = sorted(points, key=lambda point: point[1])
print(sorted_points)  # 输出: [(3, 1), (1, 2), (5, 4)]

限制

虽然匿名函数非常灵活且代码简洁,但它们也有一些限制:

  • 只能包含一个表达式,不能包含复杂的逻辑。
  • 不能包含命令,例如循环或多个语句。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码