【python入门】自定义函数

文章目录

  • 定义自定义函数的基本语法
  • 参数类型
  • 示例代码
  • 函数作用域
  • 匿名函数(Lambda)
  • 闭包
  • 装饰器


Python中的自定义函数允许你编写一段可重用的代码块,这段代码可以带参数(输入),并可能返回一个值(输出)。自定义函数可以提高代码的可读性、重用性和组织性。下面是详细介绍和示例。

定义自定义函数的基本语法

def function_name(parameters):# 函数体# ...return value  # 可选,函数可以没有返回值
  • function_name:函数名,遵循Python的命名规则。
  • parameters:函数可以接受的参数列表,可以有零个或多个参数。
  • return value:函数返回的值,可以是任何数据类型,也可以省略,表示返回None

参数类型

  • 位置参数:必须按顺序提供。
  • 默认参数:可以提供默认值,调用时可以不传递。
  • 关键字参数:允许指定参数名,提高函数调用的灵活性。
  • 可变参数:可以接受任意数量的位置参数。
  • 关键字可变参数:可以接受任意数量的关键字参数。

示例代码

  • 示例1:基本自定义函数
def greet(name):return f"Hello, {name}!"print(greet("Alice"))  # 输出: Hello, Alice!
  • 示例2:带有默认参数的函数
def greet(name, message="Good morning"):return f"{message}, {name}!"print(greet("Bob"))  # 输出: Good morning, Bob!
print(greet("Charlie", "Good evening"))  # 输出: Good evening, Charlie!
  • 示例3:带有可变参数的函数
def sum_numbers(*numbers):total = 0for num in numbers:total += numreturn totalprint(sum_numbers(1, 2, 3, 4))  # 输出: 10
  • 示例4:带有关键字可变参数的函数
def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="Dave", age=30, job="Developer")
# 输出:
# name: Dave
# age: 30
# job: Developer
  • 示例5:使用类型注解

Python 3.5+ 支持类型注解,可以提高代码的可读性和健壮性。

def greet(name: str, message: str = "Good morning") -> str:return f"{message}, {name}!"print(greet("Eve"))  # 输出: Good morning, Eve!

函数作用域

在Python中,函数有自己的命名空间。这意味着在函数内部定义的变量不能在外部访问,除非它们被返回并赋值给外部变量。

def get_secret():secret = "I am a secret!"return secretmy_secret = get_secret()
print(my_secret)  # 可以访问返回的值
# print(secret)  # 会抛出错误,因为secret在函数外部不可访问

匿名函数(Lambda)

Python也支持匿名函数,使用lambda关键字定义,通常用于简单的函数。

add = lambda x, y: x + y
print(add(5, 3))  # 输出: 8

闭包

闭包是指一个函数能够记住其外部环境的状态。这通常通过在函数内部定义另一个函数来实现。

def make_counter():count = 0def counter():nonlocal countcount += 1return countreturn countermy_counter = make_counter()
print(my_counter())  # 输出: 1
print(my_counter())  # 输出: 2

装饰器

装饰器是Python中的一个高级功能,它允许你在不修改函数本身的情况下增加函数的功能。

def my_decorator(func):def wrapper():print("Something is happening before the function is called.")func()print("Something is happening after the function is called.")return wrapper@my_decorator
def say_hello():print("Hello!")say_hello()
# 输出:
# Something is happening before the function is called.
# Hello!
# Something is happening after the function is called.

苍天不负有心人!

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

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

相关文章

MySQL高级-事务-并发事务演示及隔离级别

文章目录 0、四种隔离级别1、创建表 account2、修改当前会话隔离级别为 read uncommitted2.1、会出现脏读 3、修改当前会话隔离级别为 read committed3.1、可以解决脏读3.2、会出现不可重复读 4、修改当前会话隔离级别为 repeatable read(默认)4.1、解决…

解决docker镜像pull失败的有效

机器环境 本实践将在 Ubuntu 22.04.3LTS 系统上进行测试 docker 版本Docker Engine - Community 24.0.6 ,原则上docker版本无影响 本实践进仅学习研究使用,无作他用途。 背景 曾几何时,docker镜像的拉去会失败,网速会慢&#xff0…

代码随想录算法训练营第五十三天| 739. 每日温度、 496.下一个更大元素 I、503.下一个更大元素II

LeetCode 739. 每日温度 题目链接:https://leetcode.cn/problems/daily-temperatures/description/ 文章链接:https://programmercarl.com/0739.%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6.html 思路 * 单调栈的本质是空间换时间,因为在遍历的过…

【论文阅读】transformer及其变体

写在前面: transformer模型已经是老生常谈的一个东西,以transformer为基础出现了很多变体和文章,Informer、autoformer、itransformer等等都是顶刊顶会。一提到transformer自然就是注意力机制,变体更是数不胜数,一提到…

【目标检测】DN-DETR

一、引言 论文: DN-DETR: Accelerate DETR Training by Introducing Query DeNoising 作者: IDEA 代码: DN-DETR 注意: 该算法是在DAB-DETR基础上的改进,在学习该算法前,建议掌握DETR、DAB-DETR等相关知识…

TCP和UDP的区别以及应用场景

TCP(传输控制协议)和UDP(用户数据报协议)是两种不同的传输层协议 区别 TCP是面向连接的,UDP是无连接的; TCP是可靠的,UDP是不可靠的; TCP是面向字节流的,UDP是面向数据…

如何高效配置与使用Pip换源

目录 1. Pip源的基本概念 1.1 常见的国内镜像源 2. 临时换源 2.1 使用命令行参数指定镜像源 2.2 安装多个包时指定镜像源 3. 永久换源 3.1 修改用户级配置文件 3.1.1 创建和编辑配置文件 3.2 修改全局配置文件 3.2.1 创建和编辑全局配置文件 4. 验证换源配置 5. 切…

VMamba: Visual State Space Model论文笔记

文章目录 VMamba: Visual State Space Model摘要引言相关工作Preliminaries方法网络结构2D-Selective-Scan for Vision Data(SS2D) VMamba: Visual State Space Model 论文地址: https://arxiv.org/abs/2401.10166 代码地址: https://github.com/MzeroMiko/VMamba 摘要 卷积神…

防火墙共性检测技术

防火墙共性检测技术 防火墙共性检测技术是指防火墙在监控和控制网络流量时,共同采用的一些检测和过滤方法。无论是哪种类型的防火墙,这些技术都可以用于识别和阻止恶意流量,确保网络安全。以下是防火墙共性检测技术的详细介绍,包…

axios的基本使用和vue脚手架自带的跨域问题解决

axios的基本使用和vue脚手架自带的跨域问题解决 1. axios 1.1 导入axios npm i axios1.2 创建serve1.js serve1.js const express require(express) const app express()app.use((request,response,next)>{console.log(有人请求服务器1了);console.log(请求来自于,re…

go Channel 原理 (一)

Channel 设计原理 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。 在主流编程语言中,多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信,同时也提供了一种不同的并发模型,即通…

npm ci vs npm i

npm ci vs npm i 几个关键区别:该选择哪个? 通过 npm ci 和 npm i 两个命令,都可安装项目的依赖。那么这两个命令有什么区别呢? 几个关键区别: 目的和用途: npm ci :根据项目中的 package-lock…

AI奏响未来乐章:音乐界的革命性变革

AI在创造还是毁掉音乐 引言 随着科技的飞速发展,人工智能(AI)正在逐渐渗透到我们生活的每一个角落,音乐领域也不例外。AI技术的引入,不仅为音乐创作、教育、体验带来了革命性的变革,更为整个音乐产业注入了…

顺序表应用——通讯录

在本篇之前的顺序表专题我们已经学习的顺序表的实现,了解了如何实现顺序表的插入和删除等功能,那么在本篇当中就要学习基于顺序表来实现通讯录,在通讯录当中能实现联系人的增、删、查改等功能,接下来就让我们一起来实现通讯录吧&a…

grpc学习golang版( 五、多proto文件示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件2.1 公共proto文件2.2 语音唤醒proto文…

解决Vue3项目中跨域问题的步骤

决Vue3项目中跨域问题的步骤可以按照以下方式清晰地分点表示和归纳: 1. 使用代理服务器(Proxy) 步骤: 在Vue项目的根目录下找到或创建vue.config.js文件。在vue.config.js中配置devServer的proxy选项。设定需要代理的接口前缀&a…

基于局域网下的服务器连接、文件传输以及内网穿透教程 | 服务器连接ssh | 服务器文件传输scp | 内网穿透frp | 研究生入学必备 | 深度学习必备

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌本篇博客分享的是基于局域网下的服务器连接🔗、文件传输以及内网穿透教程,内容非常完备✨,涵盖了在服务器上做深度学…

树莓派3B读写EEPROM芯片AT24C256

AT24C256是一个Atmel公司的EEPROM存储芯片,容量是256K个bit(也就是32K字节),I2C接口,而树莓派正好有I2C接口,如下图蓝框中的4个IO口, 把AT24C256和这4个口接在一起,这样硬件就准备好…

Django 页面展示模型创建表的数据

1,添加视图函数 Test/app8/urls.py from django.shortcuts import render from .models import Userdef create_user(request):if request.method POST:username request.POST.get(username)email request.POST.get(email)# ... 获取其他字段的值# 创建用户实例…

【Python学习篇】Python实验小练习——异常处理(十三)

个人名片: 🎓作者简介:嵌入式领域优质创作者🌐个人主页:妄北y 📞个人QQ:2061314755 💌个人邮箱:[mailto:2061314755qq.com] 📱个人微信:Vir2025WB…