#科研筑基# python初学自用笔记 第五篇 函数

news2024/12/25 0:19:06

调用函数

  • python有很多内置函数,我们可以直接调用,详见python官方文档:内置函数 — Python 3.11.2 文档,也可以在命令行中输入help(函数名)来查看该函数的使用法则。

  • 函数名的本质就是指向一个函数对象的引用,完全可以用赋值的方法为原函数起一个别名:

a=abs//给abs函数起一个别名a
print(a(-12))//使用a来代替abs实现其功能
'''
12
'''

定义函数

定义函数的格式

def my_first_hanshu(x,y,z):
    if x==8 and y==8 and z==8:
        print('Crush')
    else:
        print('Pity')
    return
#以下为试用自定义的函数1
my_first_hanshu(8,8,8)
'''
Crush
'''

总之,定义语句要以def开头,接下来就是函数名和参数列表,参数不需要声明数据类型,注意要使用return语句。

空函数

若要定义一个功能暂时没想好的函数,可以用pass语句:

def non():
    pass

这样让pass先代替函数体,使得该函数被调用时,程序可以正常运行;

此外,pass语句还可以用于条件语句和循环语句中。

参数检查

对于自定义函数,当传入不恰当的参数时,系统不会像内置函数一样返回出错信息,所以要在自定义的函数体的开端使用内置函数isinstance()和错误提示语句raise,实现数据类型的检查:

def my_first_hanshu(x,y,z):
    if not isinstance(x,int) and not isinstance(y,int) and not isinstance(z,int):
        raise TypeError('bad operand type')
    if x==8 and y==8 and z==8:
        print('Crush')
    else:
        print('Pity')

返回多个值

函数需要返回多个值时,只要把值都写在同一个return语句后即可,会返回一个元组tuple,里面包含了多个值,可以将tuple通过一个赋值号赋值给多个变量,系统会按位置一一赋值。

import math
def ma(x):
    return math.ceil(x),math.floor(x)
a,b=ma(1.123)
print(a,b)
'''
2 1
'''

函数的参数

位置参数

def power(a,b):
    s=1
    while b>0:
        b-=1
        s*=a
    return s

上面的power函数中有两个位置参数a和b,调用函数时,传入的两个值按位置顺序依次赋值给参数a和b。

默认参数

上面定义了新的power函数后,原来power函数使用一个参数计算平方的功能就用不了了,这时可以修改一下原定义,直接在参数列表中给b赋值为2,这样如果调用函数时只写了一个参数,那就默认参数b为2:

def power(a,b=2):
    s=1
    while b>0:
        b-=1
        s*=a
    return s
  • 需要注意的是,默认参数必须放在参数列表的后端,可以有多个默认参数;

  • 默认参数必须指向不变对象,比如列表也可以作为默认参数,但每次调用后,若对列表进行了增减删改,则其在下一次调用时就变化了。

可变参数

可变参数,即传入的参数个数是可变的,可以是0个或任意个。

在不使用可变参数时,若需要传入不定个数的值,则函数参数应为列表或元组:

def calc(numbers):
    sum=0
    for n in numbers:
        sum+=n
    return sum
calc([1,2,3,4,5,6,7,8,9])
calc((9,8,7,6,5,4,3,2,1))

若使用可变参数,只需在参数前加上*:

def calc(*numbers):
    sum=0
    for n in numbers:
        sum+=n
    return sum
calc(1,2,3,4,5,6,7,8,9)#不需要数据写成list或tuple
list=[11,22,33,44,55]
calc(*list)#在列表名前加*,就可以将列表的所有元素作为可变参数传进去

关键字参数

  • 可变参数允许传入任意个参数,这些参数在函数调用时自动组装为一个元组;

  • 关键字参数则允许传入任意个含参数名的参数,这些关键字参数在调用时自动组装为一个字典:

def person(name,age,**other):#前两个参数为必选参数;other为关键字参数,调用时可以不传入
    print('name:',name,'age:',age,'other:',other)
#可以只传入必选参数:
person('Tom',18)
'''
name:Tom age:18 other:{}
'''
#可以再传入一个关键字参数:
person('Bob',19,homeland='USA')
'''
name:Bob age:19 other:{'homeland':'USA'}
'''
#可以传入多个关键字参数:
person('Eric',18,homeland='China',gender='M')
'''
name:Eric age:18 other:{'homeland':'China','gender':'M'}
'''
  • 同样,若有给定一个字典dict,可以在调用person函数时,在关键字参数的位置上写**dict,就会将dict的内容放入other中。

命名关键字参数

  • 若单独使用一个关键字参数标志**other,则可传入的关键字参数的数量和类型没有限制;

  • 若要限制关键字参数的名字,就可以用命名关键字参数,使用特殊分隔符*,其后的参数被视为命名关键字参数:

def person(name,age,*,homeland,gender):
    print(name,age,homeland,gender)
#调用如下:
person('Jack',23,homeland='UK',gender='M')
'''
Jack 23 UK M
'''
  • 命名关键字参数可以有默认值,从而简化调用:

def person(name,age,*,homeland='China',gender):
    print(name,age,homeland,gender)
#调用如下:
person('Tom',11,gender='M')
'''
Tom 11 China M
'''

参数组合

在python中定义函数,参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数和命名关键字参数.

递归函数

函数自己调用自己就是递归。

典例:汉诺塔问题

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

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

相关文章

金三银四,如果没准备这些面试题,找工作还是缓一缓吧

前言: 最近金三银四跳槽季,相信很多小伙伴都在面试找工作,怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习… 如何拿下阿里等大厂的offer的呢,今天分享一个秘密武器,资深测试开发师整理的…

【面试问题-java内存模型JMM】

今天面试,我把运行时数据区域答成了java内存模型,回来把这方面的问题给纠正一下。 以下内容阅读自《深入理解Java虚拟机》第12章 下面小段只做了解即可。重点是Java内存模型。 多任务处理在现代计算机操作系统中是必备的功能。 计算机运行速度与它的存储…

【MySQL】数据库基础

目录 1、什么是数据库 2、 数据库基本操作 2.1 查看当前数据库 2.2 创建一个数据库 2.3 选中数据库 2.4 删除数据库 3、常见的数据类型 3.1 数值类型 3.2 字符串类型 3.3 日期类型 4、表的操作 4.1 创建表 4.2 查看指定数据库下的所有表 4.3 查看表的结构 4.…

java常见的异常

异常分类 Throwable 是java异常的顶级类,所有异常都继承于这个类。 Error,Exception是异常类的两个大分类。 Error Error是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,如OutOfMemorry内存溢出异常等。 Exc…

环境变量和进程地址空间

目录 环境变量: env:显示所有的环境变量: echo $环境变量名表示查看环境变量的值 理解环境变量: getenv:显示环境变量的值 export set命令:显示所有变量 unset取消变量: pwd:当…

Django框架之模型查询-关联查询

关联查询 查询书籍为1的所有人物信息 查询人物为1的书籍信息由一到多的访问语法&#xff1a; 一对应的模型类对象.多对应的模型类名小写_set 例&#xff1a; >>> book BookInfo.objects.get(id1) >>> book.peopleinfo_set.all() <QuerySet [<Peopl…

buntu18 安装 openpose(GPU)环境

openpose环境 搭建 很费劲&#xff0c; 需要装软件也多&#xff0c; 还必须要考虑版本的问题。我主要是参考链接 ubuntu18安装openpose详细步骤_litbo的博客-CSDN博客_ubuntu安装openpose 其中&#xff0c;我的实验中 有如下需要更改。 1、我的是 cuda-10.2 2、gcc 和g 必…

Linux下Socket编程利用多进程实现一台服务器与多台客户端并发通信

文章目录前言一、服务器 server二、客户端 client三、并发通信演示四、程序源码前言 前些日子同“ Linux应用编程 ”专栏中发布过的TCP及UDP在Linux或Windows下的通信都为单进程下的Socket编程&#xff0c;若还存在一些套接字相关函数模糊不清&#xff0c;读者可移步“Socket编…

整合K8s+SpringBoot+gRpc

本文使用K8s当做服务注册与发现、配置管理&#xff0c;使用gRpc用做服务间的远程通讯一、先准备K8s我在本地有个K8s单机二、准备service-providerpom<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.…

Python3 模块实例及演示

在前面的几个章节中我们基本上是用 python 解释器来编程&#xff0c;如果从 Python 解释器退出再进入&#xff0c;那么定义的所有的方法和变量就都消失。 为此 Python 提供了1个办法&#xff0c;把这些定义存放在文件中&#xff0c;为一些脚本或者交互式的解释器实例使用&…

[oeasy]python0085_ASCII之父_Bemer_COBOL_数据交换网络

编码进化 回忆上次内容 上次 回顾了 字符编码的 进化过程 IBM 在数字化过程中 作用 非常大IBM 的 BCDIC 有 黑历史 &#x1f604; 6-bit的 BCDIC 直接进化成 8-bit的 EBCDIC补全了 小写字母 和 控制字符 在ibm就是信息产业的年代 ibm的标准 怎么最终 没有成为 行业的标准 呢…

OCR标注方法

虽然说标注工作不是由算法工程师负责的&#xff0c;但是如何标注&#xff0c;标注要求却是由算法工程师指导标注人员去实施的&#xff0c;如果标注工作人员标注的数据有问题&#xff0c;就会出现模型训练不收敛的问题&#xff0c;导致很多问题的出现&#xff0c;所以标注要求很…

MySql调优基础知识

MySql调优 调优金字塔 系统设计&#xff1a;数据不适合放入mysql&#xff0c;es、MQ、Redis、读写分离。 mysql调优&#xff1a;主要是索引且要熟悉业务。 mysql导致慢查询的原因是因为数据太多了。 1.sql查询 1.1尽量使用覆盖索引 1.2数据表结构&#xff0c;统计汇总&am…

普通单双面板的生产工艺流程之图形转移,华秋一文告诉你

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第五道主流程为图形转移。 图形转移的目的为&#xff1a; 利用光化学原理&#xff0c;将图形线路的形状转移到印制板上&#xff0c;再利用化学原理&#xff0c;将图形线路在印制板上制作出…

Tomcat- AJP协议文件读取/命令执行漏洞(CVE-2020-1938 / CNVD-2020-10487)

CVE-2020-1938 1.概述1.1 tomcat概述1.2 gostcat概述 - 漏洞概述2. 漏洞成因2.1 前置基础2.1.1 Tomcat Connector(连接器)2.1.2 Servlet(服务程序)2.1.3 Tomcat内部处理请求流程2.2 源码追踪分析两个利用方案的执行流程2.2.1 获取利用poc2.2.2 文件读取漏洞关键点1&#xff1a;…

CSDN城市开发者联盟、C友会期待你的加入

文章目录&#x1f31f; 课前小差&#x1f31f; chatGPT&#x1f31f; CSDN中的持续学习&#x1f31f; 23年原力计划&#x1f31f; C友会、CDC&#x1f31f; 如何关联本地的开发者&#xff1f;&#x1f31f; 写在最后&#x1f31f; 课前小差 哈喽&#xff0c;大家好&#xff0c…

2月datawhale组队学习:大数据

文章目录一、大数据概述二、 Hadoop2.1 Hadoop概述2.2 su:Authentication failure2.3 使用sudo命令报错xxx is not in the sudoers file. This incident will be reported.2.4 创建用户datawhale&#xff0c;安装java8&#xff1a;2.5 安装单机版Hadoop2.5.1 安装Hadoop2.5.2 修…

excel报表技巧:几个关于汇报演示方面的小功能

年终了&#xff0c;总结汇报避免不了。如果你的PPT还不够好&#xff0c;那就直接用Excel做汇报吧~这里有5条小技巧&#xff0c;可以帮助你最高效地展示自己的成绩报表&#xff01;想象一下&#xff0c;用SHIFTCTRLF1全屏显示你的工作表&#xff0c;配合上CtrlPageDown进行工作表…

WMS系统解决方案,数据从“人工采集”转为“自动采集”

今年以来&#xff0c;新冠疫情危机促使国内企业重新审视自我发展&#xff0c;加速了行业转型的步伐。很多制造企业放慢了规模扩张的脚步&#xff0c;应需而变&#xff0c;从规模速度型向质量效率型转型升级。纵观市场现状&#xff0c;很多制造企业面临产能过剩、成本上升、库存…

CHAPTER 4 监控全网服务器

监控全网服务器4.1 需求说明4.2 规划方案4.2.1 api接口使用&#xff08;curl&#xff09;4.3 具体实施规划4.3.1 硬件、系统、网络监控4.3.2 应用服务监控4.3.3 监控服务通用方法4.4 实施全网监控4.4.1 使用自动发现规则4.4.2 监控备份服务器1. 添加模板2. 添加应用集3. 添加监…