python 函数入门指南

Python函数的系统性教程,涵盖函数定义、参数规则、作用域和匿名函数四大核心模块,结合最新实践技巧与常见陷阱分析


一、函数定义与调用

1. 基本语法

使用def关键字定义函数,包含函数名、参数列表和代码块:

# 语法结构
def 函数名称(参数1: int, 参数2: str , ......) -> str:代码块return f"Hello!"
# def: python 定义函数的关键字
# 函数名称: 命名规则参考下面介绍
# 参数: 调用函数时,需要出入的值
# :int: 表示传入参数的数据类型
# -> str: 表示该函数返回结果的数据类型
# return:通过此关键字返回给调用者处理完成的结果,可以不写则返回None;
# 如果需要返回多个值使用 , 隔开,返回的是一个元组# 调用函数
函数名称(1,2, ......)# 无参数函数
def greet() -> str:  # 类型提示增强可读性"""返回个性化问候语(Docstring说明)"""return f"Hello!"# 调用
result = geeet()
print(result)  # 输出 Hello!# 有参数函数
def greet(name: str) -> str:  # 类型提示增强可读性"""返回个性化问候语(Docstring说明)"""return f"Hello, {name}!"# 调用
result = greet('Yant')
print(result)  ## 输出 Hello, Yant!

2. 函数的命名规则

  1. 使用小写字母下划线(snake_case),例如:calculate_sum。
  2. 函数名应使用动词动词短语明确功能,例如:get_user_data。
  3. 避免模糊命名,使用具体、描述性的名称,例如避免使用process,而是用clean_data。
  4. 避免使用保留字和单字母名称,除非在特定上下文如循环中。
  5. 文档字符串(Docstring)的使用,虽然不是命名规则,但能提高可读性,可能作为补充。

3. 参数传递机制

值传递 vs 引用传递:不可变对象(如字符串)传值,可变对象(如列表)传引用

# int 是不可变类型,大概的意思是 num 的值直接给了 n
def test(n):print(n + 1)
m = 1
test(m)# list是可变类型,大概的意思是 调用函数时 nums的内存地址 --> 赋值给lst
def modify(lst):lst.append(4)  # 原列表被修改
nums = [1, 2, 3]
modify(nums)  # nums变为[1,2,3,4]# 这里可能描述不太恰当,不过可以大概这么理解

二、参数类型与规则

1. 参数分类

类型语法特性说明样例
位置参数def func(a, b)按顺序传入func(1, 2) 此时a=1,b=2;func(2,1) 此时a=2,b=1
默认参数def func(a=5)默认值在定义时计算调用时可以不传值,a=5;调用时传值 func(10) 此时 a=10
可变位置参数*argsfunc(*args) 接收元组,允许不定长参数func(1, 2, 3,…) 此时 args=(1, 2, 3,…)
可变关键字参数**kwargsfunc(**kwargs)接收字典,处理命名参数func(a=1, b=2, c=3,…) 此时 kwargs = {‘a’:1, ‘b’:2, ‘c’:3, …}

2. 参数顺序原则

必须遵循顺序:​必选参数 → 默认参数 → *args → 命名关键字参数 → ​**kwargs
❌ 错误示例:def func(a=1, b)(默认参数不能在必选参数前)

3. 参数陷阱与规避

​可变默认值问题:默认参数若为列表/字典,多次调用会共享同一对象,这里可能会遇到坑才能理解

# 错误写法
def bug_func(data, lst=[]):lst.append(data)return lst# 正确:用None占位
def safe_func(data, lst=None):lst = [] if lst is None else lstlst.append(data)return lst

三、作用域与变量可见性

1. 作用域层级(LEGB规则)

  1. ​Local:函数内部变量
  2. ​Enclosing:闭包外层函数变量(关于闭包后面才讲,此处留个印象)
  3. Global:模块级全局变量
  4. Built-in:内置函数(如print)
# 这是一个py文件
global_val= 1 # 这是一个全局变量,这个py文件都可以引用
def location():local_val = 2 # 这个一个局部变量,只在函数内部可以引用print(global_val)  # 输出 1
print(local_val) # 直接报错

2. 变量修改规则

  • 全局变量:需用global声明修改
count = 10
def increment():global countcount += 1

四、匿名函数(Lambda)

1. 语法与特性

  • 基础结构:lambda 参数: 表达式
    square = lambda x: x ​** 2  # 计算平方
    
  • 适用场景:简单逻辑、高阶函数参数(如map/filter)
nums = [1, 2, 3]
squared = list(map(lambda x: x**2, nums))  # [1,4,9]

2. 使用建议

  • ​避免滥用:复杂逻辑用def定义,保持可读性
  • 替代方案:列表推导式比map+lambda更简洁
# 推荐写法
squared = [x**2 for x in nums]

综合应用示例

def data_processor(data: list, *, prefix: str = "ID-", filter_func: callable) -> dict:"""处理数据并过滤(使用关键字参数与函数参数)"""processed = {f"{prefix}{i}": item for i, item in enumerate(data)}return {k: v for k, v in processed.items() if filter_func(v)}# 调用示例
result = data_processor([10, 2, 15], filter_func=lambda x: x > 5)
# 输出:{'ID-0': 10, 'ID-2': 15}

关于函数想了很久,没有想到太合适表达的方法,毕竟函数作为一个核心的知识点,里面后很多细节的地方,写的太细怕写得一塌糊涂,写得简单又怕知识点不全,希望通过这篇文章能给个位一个入门的认知,后续在使用的时候多多积累!!!

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

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

相关文章

大模型开发(六):LoRA项目——新媒体评论智能分类与信息抽取系统

LoRA项目——新媒体评论智能分类与信息抽取系统 0 前言1 项目介绍1.1 项目功能1.2 技术原理1.3 软硬件环境1.4 项目结构 2 数据介绍与处理2.1 数据集介绍2.2 数据处理2.3 数据导入器 3 模型训练3.1 配置文件3.2 工具函数3.3 模型训练3.4 模型评估 4 模型推理 0 前言 微调里面&…

简单几步完成dify的本地搭建

简单几步完成dify的本地搭建

网络爬虫【爬虫库request】

我叫不三不四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库,完全满足如今网络爬虫的需求。与Urllib对比,Requests不仅具备Urllib的全部功能;在开发使用上&…

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接:从零开始的DeepSeek微调训练实战(SFT) 微调参考示例:由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…

MySQL 调优

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

Clion远程开发配置

代码开发环境:windows下,基于Clion 2024.3开发,标准为C20 代码运行环境:远程服务器,ubuntu,cmake版本3.12,gcc11.4,g11.4,gdb12.1 实现功能:在本地windows开…

男女搭配(数学思维)

#include <bits/stdc.h> using namespace std; int main() {// 请在此输入您的代码int t;cin>>t;while(t--){int n,m,k;cin>>n>>m>>k;int smin(n,2*m)/2;if(nm-k > 3*s) cout<<s<<endl;else cout<<(nm-k)/3<<endl;}r…

SakuraCat(1)整体架构概述 (完善中)

项目功能概述 支持Servlet组件可部署一个标准的Web App 项目架构总览 HTTP服务器&#xff1a;负责建立链接&#xff0c;处理请求的数据&#xff0c;并转发给Servlet容器。Servlet容器&#xff1a;将HttpServletRequest和HttpServletResponse对象传给对应的业务类进行相应的逻…

一种基于大规模语言模型LLM的数据分析洞察生成方法

从复杂数据库中提取洞察对数据驱动决策至关重要,但传统手动生成洞察的方式耗时耗力,现有自动化数据分析方法生成的洞察不如人工生成的有洞察力,且存在适用场景受限等问题。下文将介绍一种新的方法,通过生成高层次问题和子问题,并使用SQL查询和LLM总结生成多表数据库中的见…

单片机学完开发板,如何继续提升自己的技能?

很多人学完开发板后都会卡在一个尴尬的阶段&#xff1a;觉得自己会的东西不少&#xff0c;但又不知道下一步该干啥。会点C语言&#xff0c;能烧录程序&#xff0c;能点亮LED&#xff0c;玩转按键&#xff0c;搞定串口等等&#xff0c;能用开发板做点小玩意儿&#xff0c;但面对…

计算机网络——总结

01. 网络的发展及体系结构 网络演进历程 从1969年ARPANET的4个节点发展到如今覆盖全球的互联网&#xff0c;网络技术经历了电路交换到分组交换、有线连接到无线覆盖的革命性变革。5G时代的到来使得网络传输速度突破10Gbps&#xff0c;物联网设备数量突破百亿级别。 网络体系…

实验10决策树

实验10决策树 一、实验目的 &#xff08;1&#xff09;理解并熟悉决策树算法思想和原理&#xff1b; &#xff08;2&#xff09;熟悉决策树算法的数学推导过程&#xff1b; &#xff08;3&#xff09;能运用决策树算法解决实际问题并体会算法的效果&#xff1b; &#xff08;4…

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492020 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&…

【模块化编程】制作、可视化不平衡数据(长尾数据)(以Cifar-10为例)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《PyTorch科研加速指南&#xff1a;即插即用式模块开发》-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎…

Linux操作系统7- 线程同步与互斥1(POSIX互斥锁的使用详解)

上篇文章&#xff1a;Linux操作系统6- 线程4&#xff08;POSIX线程的简单封装&#xff09;-CSDN博客 本篇代码仓库:myLerningCode/l30 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一. 线程不互斥造成的结果 二. pthread_mutex_t 互斥…

深入 Linux 声卡驱动开发:核心问题与实战解析

1. 字符设备驱动如何为声卡提供操作接口&#xff1f; 问题背景 在 Linux 系统中&#xff0c;声卡被抽象为字符设备。如何通过代码让应用程序能够访问声卡的录音和播放功能&#xff1f; 核心答案 1.1 字符设备驱动的核心结构 Linux 字符设备驱动通过 file_operations 结构体定…

洛谷 [语言月赛 202503] 题解(C++)

本文为洛谷3月的语言月赛题目全部题解&#xff0c;难度为入门到普及-&#xff0c; 觉的有帮助或者写的不错的可以点个赞 题目链接为 题目列表 - 洛谷 | 计算机科学教育新生态 目录 题目A:长方形 解题思路: 代码(C): 题目B:水流 题目大意: 解题思路: 代码(C): 题目C:格…

算法每日一练 (15)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (15)第 N 个泰波那契数题目描述解题思路…

实验11 机器学习-贝叶斯分类器

实验11 机器学习-贝叶斯分类器 一、实验目的 &#xff08;1&#xff09;理解并熟悉贝叶斯分类器的思想和原理&#xff1b; &#xff08;2&#xff09;熟悉贝叶斯分类器的数学推导过程&#xff1b; &#xff08;3&#xff09;能运用贝叶斯分类器解决实际问题并体会算法的效果&a…

Matrix-breakout-2-morpheus靶机实战攻略

1.安装并开启靶机 2.获取靶机IP 3.浏览器访问靶机 4.扫描敏感目录文件和端口 gobuster dir -u http://192.168.52.135 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html 5.访问文件和端口 发现在graffiti.php输入框输入内容后页面会返回内容…