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

目录

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__ 提供了函数的相关信息。
  • 函数可以作为参数传递给其他函数,也可以作为返回值返回,从而创建高阶函数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ATU Book-i.MX8系列 - TFLite 进阶】 NXP i.MX8M Plus 实现高效 Mobilenet SSD 物体检测

NXP i.MX8M Plus 实现高效 Mobilenet SSD 物体检测 一、概述 在 边缘运算(Edge Computing) 领域中,轻量级的模型扮演着举足轻重的角色。因此,如何在有限硬体资源下实现电脑视觉(Computer vision) 应用是个极具挑战性的课题。特别…

安享智慧理财金融测试项目

1. 项目介绍 安享智慧理财金融系统是基于 Java 语言开发,集 PC 端、APP 端、WAP 端为一体的 P2P(个人对个人)的借贷系统,提供了完整的借款和投资功能。 web用户端 说明:PC 网站,供借款人和投资人使用功能…

【浏览器清空证书】

chrome://net-internals/#hsts 在地址栏输入并访问:chrome://net-internals/#hsts

【回眸】Linux内核(十一) 进程间通讯 之 管道

前言 进程的介绍已经告一段落,接下来学习的内容是进程间的通讯. 进程间通信(IPC) 面试考点: IPC的通讯方式通常有:管道(无名和命名) ,消息队列,信号量,共享存储,socket,streams等.socket和streams支持2个不同的主机上的2个进程IPC. 管道通常指无名管道 特点: 1. 半双工(…

【稳定检索/投稿优惠】2024年艺术、语言与文化交流国际会议(ALCE 2024)

2024 International Conference on Art, Language, and Cultural Exchange 2024年艺术、语言与文化交流国际会议 【会议信息】 会议简称:ALCE 2024 截稿时间:点击查看 大会地点:中国桂林 会议官网:www.icalce.com 会议邮箱&#…

Hadoop 2.0:主流开源云架构(二)

目录 二、Hadoop 2.0简述(一)Hadoop 2.0由来(二)Hadoop 2.0相关项目(三)Hadoop应用 三、Hadoop 2.0部署(一)部署综述(二)传统解压包部署 二、Hadoop 2.0简述 …

企业微信hook接口协议,ipad协议http,取消扫码返回

简要描述: 取消扫码返回 返回类型: 100003 返回uuid: f7503bb5-7d27-408f-ab24-8c4ace7f 返回示例 {"Vid":1688853790599424,"Qrcode_key":"D368DC88254A3E79FF72942B588D7FBE","Corpid":197…

PLSQL 报错 could not locate oci.dll

0、确保PLSQL已激活。 1、在PLSQL安装包内搜索oci.dll,如果没有搜到需要下载 链接:https://pan.baidu.com/s/1HOfKAEFfuAGYACjfcwqJ1g 提取码:6evh 2、打开PLSQL,设置oci.dll的路径 ps:PLSQL安装包 链接&#xff…

AI预测体彩排3采取888=3策略+和值012路或双胆下一测试6月11日新模型预测第1弹

很抱歉各位小伙伴,端午节三天去了趟外地,没有按时更新3D和排三的预测。前面跟大家说过,8码定位是关键,8码定位能稳定在80%的命中率,才有望通过缩号缩至200-250注以内通过等额方式进行投资。由于前面的模型对8码定位的效…

程序猿大战Python——流程控制——其他控制语句

for循环 目标:掌握for循环的使用。 与while循环功能类似,for语句也能完成反复多次的执行。 for语法: for 临时变量 in 序列:满足条件时,执行的代码1满足条件时,执行的代码2…… [else:当for循环正常执行结束后&#…

odoo15升级odoo16遇到的问题及解决过程

odoo15升级odoo16遇到的问题 PyMuPDF 档案管理整理时,从15升级16出现如下错误: File "f:\od162306\dms\dmssp\models\shenqb.py", line 136, in doc_fj_pdf doc.SaveAs(ftem, FileFormat=17) # input_file.replace(".docx", ".pdf") F…

分离式光电液位传感器有哪些特点?

分离式光电液位传感器是一种先进的液位检测技术,在科学技术的不断推进下得到了广泛应用。相比传统的液位传感器,分离式光电液位传感器具有许多独特的特点。 传感器采用了先进的光学技术,将传感器装在需要检测液位的位置,并采用了…

重温react-01

创建react项目 // 第一步 npm install create-react-app -g // 第二步 create-react-app my-app目录介绍 my-app/README.md# 项目第三方依赖包node_modules/package.json# 一般用来存放静态依赖public/index.htmlfavicon.ico# 存放项目源代码,注意只有放在scr目录…

期末复习4---PTA之前题目复习

怎么在不能用strlen也就四没有string.h头文件的时候实现统计字符串的长度&#xff1f; 字符串的逆序&#xff08;看收藏里面的题&#xff09; #include <stdio.h> void f(char *p);int main() {char s[1000];gets(s);f(s);printf("%s",s);return 0; }void f(…

为啥影像导入GIS后,颜色会变?两个方法解决它!

不知道你有没有遇到过这种情况&#xff0c; 影像的正常颜色是这样的—— 可是导入到GIS后&#xff0c; 颜色竟然变了&#xff0c; 而且变得很奇怪—— 你也不必惊讶&#xff0c; 极大概率是因为数据源类型没有正确识别&#xff0c; 有两个方法可以解决这个问题—— 方法一…

告别Proteus,拥抱SmartEDA:电路设计新纪元,效率飞跃不是梦!

在数字化浪潮席卷而来的今天&#xff0c;电路设计行业也迎来了前所未有的变革。曾经&#xff0c;Proteus以其稳定可靠的性能&#xff0c;赢得了众多电路设计工程师的青睐。然而&#xff0c;随着技术的不断进步和市场的快速变化&#xff0c;我们需要一款更加高效、智能的工具来应…

苹果一夜间重塑iPhone!GPT-4o赋能Siri,AI深入所有应用,库克:开启苹果AI新时代

千呼万唤&#xff0c;苹果如何用AI重塑iPhone&#xff0c;答案终于揭晓&#xff01; 各种令人激动的传闻&#xff0c;通通都是真的—— 苹果确定与OpenAI达成合作&#xff0c;接入ChatGPT&#xff0c;使用GPT-4o模型。 GPT-4o深夜发布&#xff01;Plus免费可用&#xff01;http…

工业4.0下的PLC进化论:ARMxy计算机如何重塑自动化

智能物流系统的高效与精准成为企业竞争力的关键。在这个背景下&#xff0c;传统的PLC系统因其固有的局限性&#xff0c;如扩展性差、系统封闭等&#xff0c;开始显得力不从心。ARMxy工业计算机作为新一代的PLC替代方案&#xff0c;凭借其低功耗、高性能以及高度的灵活性&#x…

使用LangChain与ChatGLM实现本地知识库(一)

前言 本篇主要内容为介绍ChatGLM3的安装使用&#xff0c;后续才会涉及到使用LangChain实现本地知识库的内容&#xff1b; ChatGLM为智谱与清华大学开源的一个大语言模型&#xff0c;支持多轮对话、内容创作等&#xff0c;ChatGLM3-6B为ChatGLM3系列中门槛相对较低的一个&…

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

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