《Python基础》之函数的用法

news2024/11/27 20:25:49

一、简介

在 Python 中,函数是一段可重用的代码块,用于执行特定的任务。函数可以帮助你将代码模块化,提高代码的可读性和可维护性。 

函数的用途

  • 代码重用:通过函数,你可以将常用的代码块封装起来,避免重复编写相同的代码。

  • 模块化:函数可以将复杂的任务分解为更小的、可管理的模块。

  • 提高可读性:通过函数,你可以为代码块命名,使代码更易于理解和维护。

二、函数的用法以及性质

1、定义函数

# 使用python中的关键字 def
def 函数名(参数1,参数2...):
    函数体
  • 定义函数要用到python中的关键字 def ,其中函数的参数可以是一个,可以是多个,也可以没有。 

2、函数的特点

  • 函数不调用不执行
  • 定义函数必须在调用之前出现

3、函数的参数

(1)、参数的种类
  • 形式参数:指的是函数定义时,小括号中定义的参数
  • 实际参数:指的是将来调用函数时,实际传入进去的具体的值
(2)、参数的传值方式
  • 位置传参
def show1(a, b, c):
    print(f"a:{a},b:{b},c:{c}")   # a:11,b:22,c:33
show1(11, 22, 33)

        在调用函数时填的实参会按默认顺序给形参赋值 

 

  • 关键字传参(通过形参的名字传参)
def show1(a, b, c):
    print(f"a:{a},b:{b},c:{c}")
show1(b=100, c=200, a=300)

        调用函数时可以给形参赋值,这样即使顺序不对也可以完成赋值 

 

  • 混合传参
def show1(a, b, c):
    print(f"a:{a},b:{b},c:{c}")
show1(100, c=200, b=300)

         前两种方式的混合使用(一般很少用到) 

注意: 混合传参的时候,前面没有关键字的实参是会按照形参的位置来的,后面关键字传参可 以顺序不一样。

 

  • 默认值传参
def show1(a, b=100):
    

        在定义函数时可以给一些参数赋值,在调用参数时如果不对该参数进行赋值就会默认按照定义函数时赋的值进行运算。 

  • 动态传参

<1>、传入一个 * 的参数

def sum1(*num):
# 这里的num 是一个元组,接收若干个将来调用时传入的实参
    n = 0
    for i in num:
        n = n + i
    print(f"总和为:{n}")
sum1(10, 20) # (10, 20)
sum1(10, 20, 30) # (10, 20, 30)
sum1(10, 20, 30, 40) # (10, 20, 30, 40)

 传参的内容,多个参数的类型可以是不一样的

<2>、传入两个 ** 的参数

def sum1(**num):
    print(num, type(num))
sum1(name='小明', age=18)
* : 表示传入的每一个单独的元素都被封装成一个元组
** : 表示传入的是一个一个的键值对,所有的键值对会被封装成一个字典
我们今后开发的时候,定义动态参数时,起名字是固定的,若一个*的动态参数,名字起为
*args, 若**的动态参数,名字起为**kwargs

              

4、函数的返回值(return)

注意:
 1、一个函数中如果没有写 return, 默认情况下,这个函数最后一句话会有一个 return None;
 2、一个函数中,如果遇到了return ,那么这个函数就结束了,函数中的后续代码不执行;
 3、一个函数中只能有一个 return;
 4、 函数返回值 return 后面,要返回的类型可以是任意的类型;
 5、直接返回多个值,多个值之间使用英文逗号分隔,实际返回的内容是一个元组,可以用         多个变量分别接收;

 

5、函数的分类

函数根据参数和返回值可以分为:无参无返回值、无参有返回值、有参无返回值、有参有返回值

6、函数的嵌套

(1)、嵌套调用
def fun1():
    print("hello world")

def fun2():
    return 100

def fun3(a1, b1):
    fun1() # 调用fun1函数
    res1 = fun2() # 调用fun2函数
    return a1 + b1 + res1

res2 = fun3(11,22)
print(res2)  

 

(2)、嵌套定义
def fun1():
    a = 10
    def fun2():
        print("hello world")
    print(a)
    fun2()

fun1()

7、函数的作用域和变量

python 中,作用域分为两个区域
  • 函数外是一个作用域
  • 函数内部是一个作用域
python 中,变量分为两种
  • 全局变量:将变量定义在函数外
  • 局部变量:将变量定义在函数内部
注意:
1、局部作用域中可以使用到全局变量【可以使用函数外部定义的变量】;
           
2、函数与函数内部的作用域是相互独立的,不能互相调用函数内部创建的局部变量;
           
3、python中提供了一个关键字 global, 在函数内部定义一个全局变量,出了函数也是可以被访问到的。 如果函数内部有变量被global修饰,需要先调用该函数,让内存中出现这个变量,后续才能去使用。

8、补充知识

1、函数名也可以当作一个变量使用
2、函数名作为变量 可以存储在容器中,比如列表
3、可以将函数作为返回值使用

总结

函数是 Python 编程中的重要组成部分,通过函数,你可以将代码模块化、提高代码的可读性和可维护性。函数可以接受参数、返回值,并且具有局部作用域。掌握函数的定义、用途、特点和用法,将帮助你编写更高效、更清晰的 Python 代码。

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

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

相关文章

java:aqs实现自定义锁

aqs采用模板方式设计模式&#xff0c;需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

【小白学机器学习34】基础统计2种方法:用numpy的方法np().mean()等进行统计,pd.DataFrame.groupby() 分组统计

目录 1 用 numpy 快速求数组的各种统计量&#xff1a;mean, var, std 1.1 数据准备 1.2 直接用np的公式求解 1.3 注意问题 1.4 用print() 输出内容&#xff0c;显示效果 2 为了验证公式的背后的理解&#xff0c;下面是详细的展开公式的求法 2.1 均值mean的详细 2.2 方差…

vue2 中使用 Ag-grid-enterprise 企业版

文章目录 问题Vue2 引入企业版不生效npm run dev 时卡住了94% after seal 卡在这里了测试打包源 git 解决方案记录 问题 我想用企业版的树状表格 Vue2 引入企业版不生效 编译引入 // vue.config.js module.exports {transpileDependencies: ["ag-grid-enterprise"…

RESTful快速开发

&#xff08;3&#xff09;RESTful快速开发 &#xff08;2&#xff09;中的控制器仍然存在大量的冗余代码 问题1&#xff1a; 每个方法的RequestMapping注解中都定义了访问路径/users&#xff0c;重复性太高 问题2&#xff1a;每个方法的RequestMapping注解中都要使用method属…

万能门店小程序管理系统 doPageGetFormList SQL注入漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

【作业九】RNN-SRN-Seq2Seq

点击查看作业内容 目录 1 实现SRN &#xff08;1&#xff09;使用numpy实现 &#xff08;2&#xff09;在&#xff08;1&#xff09;的基础上&#xff0c;增加激活函数tanh &#xff08;3&#xff09;使用nn.RNNCell实现 &#xff08;4&#xff09;使用nn.RNN实现 2 使用R…

Emgu (OpenCV)

Emgu Github Emgu 环境&#xff1a; Emgu CV 4.9.0 netframework 4.8 1、下载 libemgucv-windesktop-4.9.0.5494.exe 安装后&#xff0c;找到安装路径下的runtime文件夹复制到c#项目Debug目录下 安装目录 c# Debug目录

YOLOv8模型pytorch格式转为onnx格式

一、YOLOv8的Pytorch网络结构 model DetectionModel((model): Sequential((0): Conv((conv): Conv2d(3, 64, kernel_size(3, 3), stride(2, 2), padding(1, 1))(act): SiLU(inplaceTrue))(1): Conv((conv): Conv2d(64, 128, kernel_size(3, 3), stride(2, 2), padding(1, 1))(a…

澳洲房产市场数据清洗、聚类与可视化综合分析

本项目涉及数据清洗及分析时候的思路&#xff0c;如果仅在CSDN中看&#xff0c;可能会显得有些乱&#xff0c;建议去本人和鲸社区对应的项目中去查看&#xff0c;源代码和数据集都是免费下载的。 声明&#xff1a;本项目的成果可无偿分享&#xff0c;用于学习交流。但请勿用于…

IT服务团队建设与管理

在 IT 服务团队中&#xff0c;需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理&#xff1b;软件工程师专注于软件的开发、测试和维护&#xff1b;运维工程师则保障系统的稳定运行&#xff0c;包括监控、故障排除等。通过清晰地定义每个角色的职责&#xff0…

go-zero(八) 中间件的使用

go-zero 中间件 一、中间件介绍 中间件&#xff08;Middleware&#xff09;是一个在请求和响应处理之间插入的程序或者函数&#xff0c;它可以用来处理、修改或者监控 HTTP 请求和响应的各个方面。 1.中间件的核心概念 请求拦截&#xff1a;中间件能够在请求到达目标处理器之…

Qt Graphics View 绘图架构

Qt Graphics View 绘图架构 "QWGraphicsView.h" 头文件代码如下&#xff1a; #pragma once#include <QGraphicsView>class QWGraphicsView : public QGraphicsView {Q_OBJECTpublic:QWGraphicsView(QWidget *parent);~QWGraphicsView();protected:void mouseM…

【eNSP】动态路由协议RIP和OSPF

动态路由RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;和OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是两种常见的动态路由协议&#xff0c;它们各自具有不同的特点和使用场景。本篇会对这两种协…

差分 + 模拟,CF 815A - Karen and Game

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 815A - Karen and Game 二、解题报告 1、思路分析 一个经典的差分数组的…

vue3【实战】响应式的登录界面

效果预览 WEB 端效果 移动端效果 技术方案 vue3 vite Element Plus VueRouter UnoCSS TS vueUse AutoImport 技术要点 响应式设计 移动端&#xff1a;图片切换为绝对定位&#xff0c;下移一层&#xff0c;成为背景图片 <el-imageclass"w-screen h-screen lt-md…

加速科技精彩亮相中国国际半导体博览会IC China 2024

11月18日—20日&#xff0c;第二十一届中国国际半导体博览会&#xff08;IC China 2024&#xff09;在北京国家会议中心顺利举办&#xff0c;加速科技携重磅产品及全系测试解决方案精彩亮相&#xff0c;加速科技创始人兼董事长邬刚受邀在先进封装创新发展论坛与半导体产业前沿与…

php反序列化1_常见php序列化的CTF考题

声明&#xff1a; 以下多内容来自暗月师傅我是通过他的教程来学习记录的&#xff0c;如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考&#xff1a;php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…

RustDesk 搭建

RustDesk 服务端下载&#xff1a;https://github.com/rustdesk/rustdesk-server/releases RustDesk 客户端下载&#xff1a;https://github.com/rustdesk/rustdesk/releases RustDesk 官方部署教程&#xff1a;https://rustdesk.com/docs/zh-cn/ 1&#xff1a;RustDesk 概览# 1…

Qt读写Usb设备的数据

Qt读写Usb设备的数据 问题:要读取usb设备进行通讯&#xff0c;qt好像没有对应的库支持。解决&#xff1a;libusbwindow下载 :Linux下载: QtUsb 开源的第三方库库里面的函数说明&#xff1a;window版本&#xff1a;Linux中也提供的直接下载测试代码&#xff1a;库下载&#xff1…

模板初阶,STL简介(C++)

1.模板 1.1泛型编程 在之前的文章中讲过C支持函数重载&#xff0c;比如实现一个交换函数&#xff0c;可以是不同的数据类型&#xff0c;但是这样&#xff0c;需要增加大量函数&#xff0c;且可维护度比较低。 如&#xff1a; void Swap(int& left, int& right) {int …