超详解——python函数定义和调用——小白篇

news2024/11/19 19:32:43

目录

1. 函数的参数

位置参数:

关键字参数:

默认参数:

2. 关键字参数

3. 参数组

4. 函数重载

5. 函数的返回值

单个返回值:

多个返回值:

6. 函数的内置属性

__name__:

__doc__:

7. 函数也可以作为函数的参数

8. 函数也可以作为函数的返回值

总结:


1. 函数的参数

函数可以接受多种类型的参数,包括位置参数、关键字参数和默认参数。

位置参数

位置参数是最常见的参数类型,它们必须按照定义时的顺序传递给函数。

def greet(name, message):
    print(f"{message}, {name}!")

greet("Alice", "Hello")  # 输出:Hello, Alice!

关键字参数

关键字参数允许在调用函数时指定参数名,参数的顺序可以与定义时不同。

greet(name="Alice", message="Hello")  # 输出:Hello, Alice!
greet(message="Hi", name="Bob")  # 输出:Hi, Bob!

默认参数

默认参数在定义函数时指定默认值,如果调用时未传递该参数,则使用默认值。

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

greet("Alice")  # 输出:Hello, Alice!
greet("Bob", "Hi")  # 输出:Hi, Bob!

2. 关键字参数

关键字参数的使用使得函数调用更加灵活和清晰,尤其是当函数有多个参数时。

def describe_pet(animal_type, pet_name):
    print(f"I have a {animal_type} named {pet_name}.")

describe_pet(animal_type="dog", pet_name="Rex")  # 输出:I have a dog named Rex.
describe_pet(pet_name="Whiskers", animal_type="cat")  # 输出:I have a cat named Whiskers.

使用关键字参数可以使代码更具可读性,因为每个参数的意义都显而易见。

3. 参数组

Python提供了 *args**kwargs 来处理不定长参数。

*args*args 接收任意数量的位置参数,传递给函数时以元组的形式存在。

def make_pizza(size, *toppings):
    print(f"Making a {size} inch pizza with the following toppings:")
    for topping in toppings:
        print(f"- {topping}")

make_pizza(12, "pepperoni", "mushrooms", "green peppers")
# 输出:
# Making a 12 inch pizza with the following toppings:
# - pepperoni
# - mushrooms
# - green peppers

**kwargs

**kwargs 接收任意数量的关键字参数,传递给函数时以字典的形式存在。

def build_profile(first, last, **user_info):
    profile = {
        "first_name": first,
        "last_name": last
    }
    profile.update(user_info)
    return profile

user_profile = build_profile("Albert", "Einstein", location="Princeton", field="Physics")
print(user_profile)
# 输出:
# {'first_name': 'Albert', 'last_name': 'Einstein', 'location': 'Princeton', 'field': 'Physics'}

4. 函数重载

Python不支持函数重载(同名函数的不同定义),但可以通过使用可变参数和默认参数来实现类似功能。

def add(a, b=0, c=0):
    return a + b + c

print(add(1))       # 输出:1
print(add(1, 2))    # 输出:3
print(add(1, 2, 3)) # 输出:6

在这个例子中,通过提供默认参数 bc,可以用不同数量的参数调用 add 函数。

5. 函数的返回值

函数可以返回单个值或多个值。多个返回值会被打包成元组。

单个返回值

def get_full_name(first_name, last_name):
    return first_name + " " + last_name

full_name = get_full_name("John", "Doe")
print(full_name)  # 输出:John Doe

多个返回值

def get_coordinates():
    return 10.0, 20.0

coordinates = get_coordinates()
print(coordinates)  # 输出:(10.0, 20.0)

# 也可以使用拆包
x, y = get_coordinates()
print(f"x: {x}, y: {y}")  # 输出:x: 10.0, y: 20.0

6. 函数的内置属性

函数对象有一些内置属性,可以用来获取函数的相关信息。

__name__

def sample_function():
    """This is a sample function."""
    pass

print(sample_function.__name__)  # 输出:sample_function

__doc__

print(sample_function.__doc__)  # 输出:This is a sample function.

这些内置属性可以用于调试和文档生成。

7. 函数也可以作为函数的参数

函数作为参数传递给其他函数,使得函数非常灵活和强大

def apply_function(func, value):
    return func(value)

def square(x):
    return x * x

result = apply_function(square, 5)
print(result)  # 输出:25

通过这种方式,可以将不同的函数传递给 apply_function,从而实现不同的功能。

8. 函数也可以作为函数的返回值

函数可以返回另一个函数,从而创建高阶函数。

def create_adder(x):
    def adder(y):
        return x + y
    return adder

add_five = create_adder(5)
print(add_five(10))  # 输出:15

在这个例子中,create_adder 返回一个新的函数 adder,该函数可以使用创建时的环境变量 x

总结:

  • 位置参数、关键字参数和默认参数使得函数调用灵活多样。
  • *args**kwargs 提供了处理不定长参数的能力。
  • 虽然Python不支持函数重载,但通过可变参数和默认参数可以实现类似功能。
  • 函数可以返回单个或多个值。
  • 函数的内置属性如 __name____doc__ 提供了函数的相关信息。
  • 函数可以作为参数传递给其他函数,也可以作为返回值返回,从而创建高阶函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重温react-02

shopdemo import React, { Component } from react export default class shopDemo extends Component {state {goods: [{id: 1,name: 商品1,price: 100,number: 0,money: 0},{id: 2,name: 商品2,price: 200,number: 0,money: 0},{id: 3,name: 商品3,price: 300,number: 0,mo…

如何解决 Git 默认不区分文件名大小写和同名文件共存?

修改文件命名的大小写,不会有 git 记录 本文章的例子:将 demo.vue 文件命名改为 Demo.vue 1、在Git项目路径下执行该命令 git config core.ignorecase false (1)以上方法可以实现 git 区分 demo.vue 与 Demo.vue 文件&#xff0…

【投稿优惠|权威主办】2024年物联网、土木建筑与城市工程国际学术会议(ICITCEUE 2024)

2024年物联网、土木建筑与城市工程国际学术会议(ICITCEUE 2024) 2024 International Academic Conference on the Internet of Things, Civil Engineering and Urban Engineering(ICITCEUE 2024) ▶会议简介 2024年物联网、土木建…

【解读】核密度图

def:what 核密度估计(Kernel Density Estimation,简称KDE)是一种用来估计随机变量概率密度函数的非参数方法 实现:(库函数)how import seaborn as sns import matplotlib.pyplot as plt# 使用…

开源完全自动化的桌上足球机器人Foosbar;自动编写和修复代码的AI小工具;开源工具,可本地运行,作为Perplexity AI的替代方案

✨ 1: Foosbar Foosbar是一款完全自动化的桌上足球机器人,能与人类玩家对战,具备防守、传球和射门能力。 Foosbar是一个完全自动化的桌上足球机器人,它实现了一侧由机器人控制,另一侧由人类玩家对战的游戏模式。这个机器人能够自…

2024下半年软考高级没有高项,考哪门最容易上岸?

2024上半年软考考试已经结束,有不少小伙伴已经开始准备下半年软考了,但是大家要注意:今年高项仅考上半年一次,下半年考的高级科目只有这四个(系分、架构、网规、系规)! 一、那么这种情况下&…

go语音进阶 多任务

多任务 什么叫 多任务?简单说:就像是操作系统可以同时执行 多个任务。打个比方 你一边使用 浏览器上网,一遍在听MP3, 一边再用 word 赶作业。对于电脑来讲这就是多任务,还有很多任务悄悄的在后台同时运行着,只是桌面上…

npm 添加 electron 安装镜像变量,提交打包速度。

前言:项目中使用 electron-builder,打包运行 npm run build:win 时, electron-builder 默认会从 github 下载 electron 依赖包,导致打包缓慢。可以通过添加 electron 下载镜像地址来解决。 npm config ls -l 查看 npm 所有配置 …

SmartEDA:革新教育电路,点亮学生创新之光!

在当今快速发展的科技时代,电路设计与电子技术的融合已成为教育领域不可或缺的一部分。而SmartEDA作为一款新兴的电路设计工具,正以其独特的优势助力学生创新实践,引领教育界迈向更加智能化的未来。 SmartEDA不仅具备传统电路设计软件的基本…

Redis(十六) 集群

文章目录 前言什么是集群集群模式基本原理哈希求余一致性哈希算法哈希槽分区算法 docker模拟出一个集群集群中节点挂了会怎么办故障判定故障迁移 集群扩容 前言 前面我们学习了 redis 哨兵机制,哨兵机制是为了解决当主节点挂了之后,能够自动进行故障转移…

JVM对象分配和垃圾回收机制

一、对象创建 1.1 符号引用 new 创建一个对象,需要在JVM创建对象。 符号引用:目标对象采用一个符号表示,类A加载的时候,如果成员变量类B还没有被加载进来,采用一个符号(字面量)来表示&#x…

Linux C语言:指针的运算

一、指针的算术运算 1、指针运算 指针运算是以指针所存放的地址作为运算量而进行的指针运算的实质就是地址的计算 2、指针的算数运算 指针加上整数,指针减去整数, 指针递增,指针递减和两个指针相减。 指针加减一个n的运算: px n px - n 移动步长…

LeetCode | 2879.显示前三行

在 pandas 中,可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行,可以在 head() 方法中传入一个参数 n,读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…

mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名

我们现在正常来看 一个mybatisplus正常的查询语句 我们可以看到 ,再如上的代码中 我们使用了 Address::getuserId 方法引用,但是我们把方法引用改成lambda表达式的形式的时候不会报错,但是运行的时候报错。为什么…

Tkinter 组件详解之Entry

Tkinter 组件详解之Entry Entry(输入框)组件通常用于获取用户的输入文本。 何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这意味着该字符串将不能被全部看到(你可以用鼠标或键盘的方向键调…

[2024-06]-[大模型]-[DEBUG]- ollama webui 11434 connection refused

报错:host.docker.internal:11434 ssl:default [Connection refused] 将/etc/systemd/system/ollama.service中加上如下红框两行 Environment"OLLAMA_HOST0.0.0.0" Environment"OLLAMA_ORIGINS*"然后 systemctl daemon-reload systemctl rest…

速卖通测评攻略:轻松提升店铺曝光度和吸引力

在速卖通平台上,产品排名,店铺曝光的提升无疑是所有卖家追求的目标,因为这直接关联着产品曝光量的增加和潜在销售机会的扩大。然而,提升产品排名并非一蹴而就,它需要一系列的策略和技巧。那么,接下来就让我…

【网络安全】跨站脚本攻击漏洞—HTML前端基础

目录 一、HTML概述 1.1 head部分 1.2 body部分 1.3 HTML特殊符号 二、JavaScript概述 2.1 HTML中JavaScript的存在方式 2.2 DOM操作 2.3 BOM操作 跨站脚本攻击(Cross-site scripting,通常缩写为XSS)是一种常见的网络安全漏洞&#xff…

区块链实验室(36) - 交叉编译Ethereum的客户端全套工具

停滞了一段时间,重新回到区块链实验。前面在“区块链实验室(31) - 交叉编译Ethereum的客户端Geth”中仅编译出客户端工具geth。编译Ethereum全套工具的代码如下。 #!/bin/bash ## abigen CGO_ENABLED0 GOOSlinux GOARCHarm64 /usr/local/go/bin/go build -ldflags …

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代,抖音小店以其独特的平台优势和庞大的用户基础,吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一,它的抖音小店究竟靠不靠谱呢?今天,我们就来一起揭开这个谜底。 首…