《0基础》学会Python——第九讲

news2024/11/15 10:14:31

 函数

一、函数的定义:

         指在程序中创建一个独立的代码块,用于完成特定的任务或执行特定的操作。函数通常接收输入参数,并返回输出结果。通过定义函数,可以将复杂的程序分解成更小的模块,提高代码的可读性和可维护性。

        

二、函数的定义规则

        1、函数代码块以 def 关键词开头,后接函数名称圆括号 ()

        2、如果需要传入参数(变量),可在圆括号内定义

        3、函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明

        4、函数内容以冒号 : 起始,并且缩进

        5、可选择性地使用return返回一个值给调用方,不 return 相当于返回 None

        6、在Python中不需要定义返回值类型,可自动推断

其中
         函数名:函数的标识符,用于调用和引用函数。
        参数列表:函数可以接收多个参数,参数用于传递数据给函数。参数可以有默认值,也可以是必需的。
         函数体:函数的具体实现代码,包括变量定义、流程控制语句、循环语句等。
         返回值:函数可以返回一个或多个结果。返回值可以是各种类型的数据,如整数、浮点数、字符串等。

    def 是定义函数的关键字,后面是函数名和参数列表,然后是冒号和缩进的函数体。return 语句用于返回结果,可以省略,如果没有返回值,则函数默认返回 None

               函数定义后,可以通过函数名来调用函数,并传递相应的参数。调用函数会执行函数体中的代码,将返回结果返回给调用处。

        例如:计算圆的面积

        1、首先要知道圆的面积公式S=pi*r*r,当知道半径r的值时,就可以根据公式计算出面积,假设需要计算3个不同大小的圆的面积:

2、当代码出现有规律的重复的时候,就需要 注意了
        每次写3.14 * x * x不仅很麻烦 而且如果要把3.14改成3.1415926535的时候, 三个面积计算表达式得全部替换,
        假定有一个函数名为area_of_circle,可以基于半径计算面积, 可一 不再每次 写s = 3.14 * x * x,而是写成更有意义的函数调用 方式 s = area_of_circle (x), 而函数area_of_circle本身只需要写一次,就可以 多次调用 ,如果需要修改,只需修改函数本身,调用不需要改动.
例如:
PI=3.1415  #常量在def的上部分定义
def area_of_circle(r):   #r为函数的必选参数
    S=PI * r * r
    return S

if __name__ == '__main__':
    s1=area_of_circle(4) #调用函数名,括号内写入参数
    s2=area_of_circle(5)
    s3=area_of_circle(6)
    print(s1,s2,s3)

        即当直接填入参数即可获取圆的面积,并且最好在定义函数的上部分定义常量。

        

        3、函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段

        4、函数能提高应用的模块性,和代码的重复利用率

        5、Python提供了许多内建函数,比如print()type()、类型转换函数等等

        6、用户也可以自己创建函数,这被叫做用户自定义函数

三、函数的参数 (必选参数、默认参数可变参数、关键字参数命名关键字参数)

              定义函数的时候,需要把参数的名字位置确定下来,函数的接口定义就完成了,对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,除定义的必选参数外,还可使用默认参数可变参数、关键字参数命名关键字参数,且必须按照以上的前后顺序填入def定义的函数后的括号内。

        1、必选参数

        又名位置参数,调用函数时必须按顺序提供,不多不少

         例如:定义一个函数用于计算 x 的平方
   
        
对于 power 函数来说, x 就是一个位置参数
当调用函数时,必须传入有且仅有的一个参数x

 

        2、默认参数

        假如现在又要计算 x^ 3怎么办?可以再定义一个power函数,但是如果要计算x ^ 4、x ^ 5…… 怎么办?不可能定义无限多个函数 ,那可以把power(x)修改为power(x, n),再结合 while 循环用来计算x ^ n,代码如下
def power(x,n):   #其中x为必选参数,n为默认参数
    s=1
    while n>0:
        s=s*x
        n=n-1
    return s
if __name__ == '__main__':
    print(power(5, 2)) 

也可以这么写:

def power(x,n=3):
    s=1
    while n>0:
        s=s*x
        n=n-1
    return s
if __name__ == '__main__':
    print(power(5, 2))

其结果同上,但是如果在最后一条代码中没有给出2,直接写的print(power(5)),那么打印结果就是5的3次方了。

        3、可变参数(用*号+参数表示)

         在Python函数中,还可以定义可变参数,顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个假设给定一组数字a,b,c……,需要定义函数计算a^ 2 + b ^ 2 + c ^2 + ……由于参数个数不确定,可a,b,c……作为一个list或tuple传进来。
无可变参数的代码:
def calc(lt):
    summ=0
    for i in lt:
        summ=summ+i**2
    return summ

if __name__ == '__main__':
    print(calc([1, 2, 3, 4]))

        有可变参数的代码:

def calc(*lt):
    summ=0
    for i in lt:
        summ=summ+i**2
    return summ

if __name__ == '__main__':
    calc(1,2,3,4)
    print(calc(1,2,3,4))

二者看起来相差不大,但是在使用的时候不用再定义列表、元组等数据类型,直接输入可变参数的多组数据即可使用。

        4、关键字参数(两个*号+参数名, 一般传入时需要带入参数名称 以字典的形式接收)

        可变参数允许传入0个或任意个参数,可变参数在函数调用时自动组装为一个tuple,而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,示例如下:

def person(name,gender,age,*args,**kwargs):

    return name,gender,age,args,kwargs
if __name__ == '__main__':
    print(person('小美', 'man', '18', 10, 20,heigh=180, weight=70))

       其中*arg是可变参数,其输入的值为10和20,以元组的形式输出,**kwargs是关键字参数,以字典的形式输出

        5、命名关键字参数

        函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查

        命名关键字参数函数调用方式如下:

        以person()函数为例,希望检查是否有city和job参数,则需要手动判断:

        命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错

        如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:  

        

        和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数

        如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

        6、参数组合

        在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用

        注意参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

例如:

def person(name,gender,age,*args,job,city,**kwargs):
    return name,gender,age,args,kwargs,job,city

if __name__ == '__main__':
    print(person('小美', 'man', '18', 10, 20,heigh=180, weight=70,job='AI',city='Hefei'))

其输出结果为:

四、递归函数

        函数内部可以调用其他函数,如果一个函数在内部调用自身本身,这个函数就是递归函数。

        递归函数需要满足两个条件:自己调用自己有停止条件

   

        例如:

        计算n的阶乘,即n! = n * ( n - 1 ) * ( n - 2 ) * ( n - 3 ) *......* 3 * 2 * 1,通过循环实现代码逻辑稍微复杂,该需求可使用递归函数

def jiech(n):
    if n==1:
        return 1
    return n*jiech(n-1)

if __name__ == '__main__':
    print(jiech(10))

        即当需要打印10 的阶乘时,第一步运行到 return n*jiech(n-1)这一步,然后返回jieba(n-1),然后继续调用函数,继续从头再来计算从9开始的阶乘,以此类推,直到运行到1的阶乘时返回1,然后再把通过    return n*jiech(n-1)的值全部返回到def jiech(n),然后就能打印出来了

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

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

相关文章

【密码学】密码学数学基础:群的定义

一、群的定义 在密码学中,群(Group)的概念是从抽象代数借用来的,它是一种数学结构,通常用于描述具有特定性质的运算集合。 群的定义 群定义中的几个关键要素: 集合:首先,群是由一系…

一文了解SpringCloud

Springcloud 什么是Springcloud? 官网:Spring Cloud Data Flow Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控…

保姆级教程--容器化部署prometheusd监控系统(yaml文件、docker命令均有详细解释、大白话描述服务作用、适合小白)

文章目录 前言用到的服务简述容器化部署prometheus的优势 环境一、安装docker二、容器化构建Prometheus监控系统1 部署Prometheus2.部署grafana 三、prometheus监控其他主机1.部署docker补充、如何查找仪表盘 前言 用到的服务简述 Prometheus:这是一个开源的监控系…

使用Copilot 高效开发繁忙的一天

在现代软件开发的世界里,使用AI工具如GitHub Copilot可以显著提高开发效率。 早晨:规划与启动 7:00 AM - 起床与准备 开发者早早起床,享用健康的早餐,并浏览新闻和技术博客,了解最新的科技动态。快速整理思路&#x…

WordPress:无法创建新文章?创建新帖子时候页面空白

wordPress中我们新建文章的时候,会遇到页面空白,这个问题是怎么导致呢?我们可以打开F12开发者模式看下报错信息,这是一个警告信息 Warning: Creating default object from empty value in /pub 到数据库 wp_posts中查看生成了很…

网络配置命令

文章目录 一、查看网络接口信息 ifconfig1.1 网络接口名称1.2 使用 ifconfig 查看网络接口信息1.2.1 输出示例1.2.2 输出解释 1.3 查看特定网络接口信息1.3.1 输出示例 1.4 查看所有网络接口信息1.5 特殊网络接口 二、修改网络配置文件2.1 配置文件示例2.2 使配置生效2.3 关闭 …

【07】分布式事务解决方案

1、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有ACID四个特性:原子性、一致性、隔离性、持久性。任何事务机制在实现时,都应该考虑事务…

【Nuxt3】vue3+tailwindcss+vuetify引入自定义字体样式

一、目的 在项目中引入自定义的字体样式(全局页面都可使用) 二、步骤 1、下载好字体 字体的后缀可以是ttf、otf、woff、eot或者svg(推荐前三种) 以抖音字体为例下载好放在静态文件夹(font)下 案例字…

Python for循环while循环实战: 原神加载画面

原神加载画面在我们看起来是能一直运行的,实际上,它就是用了循环。今天,我们来模拟一下。 我们用123、234、345、456分别代表四个画面,结果是这样的。 这是代码: a [123, 234, 345, 456] while True:for i in a:pri…

python获取豆瓣评分9分以上的电影

我想生成的文件用excel保存,所以得安装一下这个 pip install pandas openpyxl代码 import requests import pandas as pd# 模拟浏览器请求头 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91…

轻空间强势维护知识产权,捍卫气膜声学专利

在当前创新驱动的时代,知识产权已成为企业核心竞争力的重要组成部分。轻空间,作为一家以技术创新为驱动的公司,一直致力于为客户提供高质量的气膜建筑产品和服务。近期,我们注意到有不法分子冒用苏州大学多功能气膜综合馆项目的名…

springboot 适配ARM 架构

下载对应的maven https://hub.docker.com/_/maven/tags?page&page_size&ordering&name3.5.3-alpinedocker pull maven:3.5.3-alpinesha256:4c4e266aacf8ea6976b52df8467134b9f628cfed347c2f6aaf9e6aff832f7c45 2、下载对应的jdk https://hub.docker.com/_/o…

Ceph集群部署(基于ceph-deploy)

目录 部署Ceph集群的方法 Ceph生产环境推荐 部署Ceph实验(基于ceph-deploy) 一、准备工作 二、环境准备 1.关闭selinux与防火墙 2.修改主机名并且配置hosts解析映射 3.admin管理节点配置ssh免密登录node节点 4.安装常用软件和依赖包 5.配置时间…

【全网最全最详细】Spring与SpringBoot最新面试题

目录 一、Spring框架概述 1.1 什么是Spring? 1.2 spring优点有哪些? 二、IOC与DI 2.1 你知道getBean方法的有几种重载方式吗? 2.2 Spring有几种依赖注入方式? 2.3 为什么Spring不建议使用字段注入方式? 2.4 B…

数据结构_顺序表专题

何为数据结构? 咱今天也来说道说道...... 数据结构介绍 准确概念 数据结构就是计算机存储、组织数据的方式 概念分析 从上句分析,数据结构是一种方式。一种管理数据的方式。为了做什么?为的就是计算机存储数据,组织数据。 …

docker部署seata 2.0.0

环境准备 当前使用的环境: MySQL:8.0 nacos:2.2.3 关于如何在docker中部署nacos 2.2.3,请参考之前文章: docker部署nacos 2.2.3 拉取镜像 docker pull seataio/seata-server:2.0.0查看nacos、mysql、宿主机的ip d…

探索Facebook:数字社交的魔力源泉

在当今信息爆炸和全球互联的时代,社交媒体平台成为了人们生活中不可或缺的一部分。而在这些平台中,Facebook无疑是最具影响力和创新性的代表之一。自2004年成立以来,Facebook不仅改变了人们的沟通方式,更通过不断的技术创新和用户…

Oracle查询超时问题,聊聊思路!

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

【系统架构设计师】九、软件工程(面向对象方法|逆向工程)

目录 六、面向对象方法 6.1 基本概念 6.2 面向对象的分析 6.2.1 用例关系 6.2.2 类之间的关系 6.3 面向对象的设计 6.4 面向对象设计原则与设计模式 6.5 面向对象软件的测试 七、逆向工程 历年真题练习 六、面向对象方法 面向对象的分析方法 (Object-Oriented Analys…

C++初阶:类和对象(二)

✨✨所属专栏:C✨✨ ✨✨作者主页:嶔某✨✨ 类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注…