当前位置: 首页 > news >正文

【Python语法基础学习笔记】函数定义与使用

前言

此系列笔记是拨珠自己的学习笔记,自用为主,学习请移步其他大佬的专门教程。

基本信息

函数:组织好的,可重复使用的,用来实现特定功能的代码块

定义格式:

def 函数名(参数列表):函数体

调用:

返回值 = 函数名(输入参数)

例题1

阶乘之和

题目描述

用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)S=1!+2!+3!+⋯+n!(n≤50)。

其中“!”表示阶乘,例如:5!=5×4×3×2×15!=5×4×3×2×1。

输入描述

输入一个正整数 n。

输出描述

输出一个正整数 S,表示计算结果。

def factorial(n):ans = 1for i in range(1,n+1):ans = ans * ireturn ansn = int(input())
ans = 0for i in range(1,n+1):ans += factorial(i)print(ans)

传参机制

实参与形参

实际参数:调用函数时传递的参数

形式参数:定义函数时传递的参数

值传递

函数中的形式参数变化,不会导致实际参数的变化,这是由于传递的数值是单方向的,参数为不可变类型(字符串、数字、元组

引用传递

函数的形参变化会导致实参一起变化,参数是可变类型(列表、字典

传参技巧

大多是情况下,尽量不要传递列表、字典,即使传参也尽量不要改动

不改动可变类型的技巧:传递列表、字典这类变量时传递一个副本(x[:]或x.copy())。

位置参数

位置参数:按顺序传值,必须传对数量和顺序
例:add(2, 3) 中 2 和 3 按顺序对应参数 a 和 b

关键字参数

关键字参数:用参数名=值传值,顺序可打乱
例:add(b=3, a=2) 明确指定参数值,结果和上面一样

默认参数

默认参数:函数定义时设默认值,调用时可省略
例:def greet(name="朋友"),调用greet()时用默认值 "朋友"

三者优先级

函数调用时,参数优先级遵循 “位置参数> 关键字参数” 的核心规则,同时默认参数仅在 “未通过前两种方式传值” 时生效,具体优先级顺序和约束如下:

  1. 最高优先级:位置参数
    必须先传所有无默认值的位置参数,且严格按函数定义的顺序传递,不能跳过或乱序。
    例:def func(a, b): ...,调用时func(1, 2)(1→a,2→b)是唯一正确的位置传参方式。

  2. 次高优先级:关键字参数
    位置参数传完后,可用参数名=值传参,顺序可打乱,但不能重复给同一参数传值(位置已传的参数,关键字不能再传)。
    例:func(a=1, b=2) 或 func(b=2, a=1) 均有效;但 func(1, b=2) 正确(位置 + 关键字),func(a=1, 2) 错误(关键字不能在位置前)。

  3. 最低优先级:默认参数
    仅当参数未通过 “位置” 或 “关键字” 传值时,才自动使用函数定义时的默认值。
    例:def func(a, b=0): ...,调用func(5)时,b 未传值,自动用默认值 0;若调用func(5, 3)func(5, b=3),则 b 用传入的 3。

一句话总结:先按顺序传完位置参数,再用关键字参数补充 / 调整(不重复),没传值的默认参数最后用预设值。

不定长参数

不定长参数是函数定义中用来接收不确定数量参数的方式,主要有两种形式:

  1. *args:接收任意数量的位置参数,会把参数打包成一个元组(tuple)

    def sum_numbers(*args):return sum(args)  # args是元组,如(1,2,3)sum_numbers(1,2,3)  # 输出6
    sum_numbers(10,20)  # 输出30
    

  2. **kwargs:接收任意数量的*关键字参数 **,会把参数打包成一个字典(dict)

    def show_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")show_info(name="小明", age=18)  # 输出name: 小明,age: 18
    

使用场景:当不确定函数会接收多少参数时使用,比如处理动态数据、配置项等。两种形式可以同时使用,但顺序必须是:位置参数 → *args → **kwargs。

变量作用域

作用域:变量的有效范围

局部变量:函数内部的变量,仅作用于函数内部。

全局变量:函数外部的变量,作用于全局。

global声明

在函数内部定义变量前加上global,函数内部将调用全局变量

例子

# 定义全局变量
count = 0def add_count():# 声明要使用全局变量countglobal count# 修改全局变量的值count += 1print(f"函数内:count = {count}")# 调用函数
add_count()  # 输出:函数内:count = 1
add_count()  # 输出:函数内:count = 2# 查看全局变量的变化
print(f"函数外:count = {count}")  # 输出:函数外:count = 2
http://www.dtcms.com/a/359720.html

相关文章:

  • Spring Security 6.x 功能概览与代码示例
  • 【四位加密】2022-10-25
  • 电感值过大过小会影响什么
  • 基于VS平台的QT开发全流程指南
  • 杂谈:大模型与垂直场景融合的技术趋势
  • 线程池八股文
  • 语义分析:从读懂到理解的深度跨越
  • Python基础:函数
  • Visual Studio Code中launch.json的解析笔记
  • 【Canvas与旗帜】哥伦比亚旗圆饼
  • 【芯片测试篇】:LIN总线
  • 人工智能-python-深度学习-
  • 自制扫地机器人(一)20 元级机械自动避障扫地机器人——东方仙盟
  • 计算机网络---http(超文本传输协议)
  • 【开题答辩全过程】以 留守儿童志愿者服务系统为例,包含答辩的问题和答案
  • 从企业和业务视角来拒绝中台
  • 什么是 WAF?全面解读 Web 应用防火墙的原理与应用
  • Vue3 响应式基础
  • TFS-2002《Fuzzy Clustering With Viewpoints》
  • 在SAP系统中,如何查询已经被打上了删除标记的生产订单?
  • AI 赋能 Java 开发效率:全流程痛点解决与实践案例(一)
  • 云网络(参考自腾讯云计算工程师认证)
  • 【开题答辩全过程】以 基于微信小程序的教学辅助系统 为例,包含答辩的问题和答案
  • ES集群部署-EFK架构实战
  • 【Python基础】2. 常量与变量
  • c++ Effective c++ 条款5
  • Ubuntu24.04(Jazzy)从零开始实现环境配置和Gmapping建图
  • 北京博乐科技有限公司2025届程序技术类笔试题
  • 京东获取商品评论指南,实时关注用户反馈
  • 【秋招笔试】2025.08.30科大讯飞秋招笔试题