python学习笔记-05

函数

基本上所有的高级语言都支持函数,函数就是一种代码抽象的方式。之前所使用的len、print等都是python的内置函数。

1.初识函数

在编写程序过程中,如果一段代码经常出现,为了提高编写效率,将这类实现某个功能的代码作为一个小模块,这就是函数。
1.1 函数定义

def 函数名(参数1,参数2...):
      函数体即代码块

1.2 函数调用

函数名(值1,值2...)
即可调用

1.3 函数说明文档

一般在函数第一行加函数说明信息,在pycharm中打三个单引号后回车自动补充格式,其实也就是多行注释
#无参数函数定义:
def printInfo():
    '''
    这个函数是用来打印的,这就是函数说明文档
    :return:
    '''
    print('第一个函数实现')
    pass
#函数调用:
printInfo()

2.函数参数

在这里插入图片描述
如果不传参数,函数就没那么灵活,相对死板。

#有参数函数定义:
def printInfo(name,height,weight,age):
    '''
    这个函数是用来打印的,这就是函数说明文档
    :return:
    '''
    print('%s的身高是%d'%(name,height),end=' ')
    print('%s的体重是%d'%(name,weight),end=' ')
    print('%s的年龄是%d'%(name,age))
    pass
#函数调用:
printInfo('小明',1.73,45,12)
printInfo('小清',1.76,60,15)
printInfo('小红',1.88,70,28)

参数的分类:
1.缺省参数:默认参数
2.可选参数:
3.必选参数:如上面的height、weight、name、age,必须传参
4.关键字参数:
在使用过程中,我们往往是混合使用以上类型的
#1.必选参数:就是其他语言中的正常传参
def sum(a,b):    #a,b是形式参数,形参。在定义的时候没有开辟内存地址
    print(a+b)
    pass
sum(2,3)   #2,3是实参,占用内存地址
#sum()   #如果不传参或者少传参都会报错
#2.缺省参数:在调用的时候如果没赋值就会使用默认的值。缺省参数始终存在于参数列表的最后一个
def sum1(a=20,b=30):
    print(a+b)
    pass
sum1()
sum1(10)
sum1(49,33)
# def sum2(a,b=20,c):
#     print('这种就是不规范的,b已经是缺省参数了,c就不可以是必选参数')
#     pass
#3.可选参数,就是可变长参数:当参数的个数不确定时使用
def getComputer(*args):
    '''
    表示可变长的参数
    :param args:
    :return:
    '''
    print(args)
    pass
getComputer()
getComputer((1,2,3,4,5,6))   #输出来是以元组类型输出数据,调用的时候传几个参数都可以
print(getComputer((1,2,3,4,5,6)))
#4.关键字可变参数:在函数体内,关键字参数是一个字典类型,key是一个字符串
def keyFun(**kwargs):
    print(kwargs)
    pass
#keyFun(1,2,3)    这种是错的,应该按字典传参
dictA={'name':'sad','age':11}
keyFun(**dictA)             #以字典传
keyFun(name='ss',age=11)    #以命名方式传

在这里插入图片描述

#混合使用
def complexFun(*args,**kwargs):
    print('第一个参数:',end=' ')
    print(args,end=' ')
    print('第二个参数:',end=' ')
    print(kwargs)
    pass
dictA={'name':'zhangxue','age':11}
complexFun(12,dictA)  #如果采用字典传参会识别到第一个
complexFun(12,name='msj') #采用键值对传参就会识别到第二个
complexFun(name='hk',age=11)
complexFun(11,678,827)
#可选参数必须放到关键字可变参数之前,不然会报错

在这里插入图片描述

3.函数返回值

函数返回值就是指函数调用完成后传给调用者的结果。

函数返回值:
如果在函数的内部有return就有返回值,否则返回空值
可以返回任意类型的值,在一个函数体内可以出现多个return关键字,但是最终只能返回一个值
如果执行了return,则代表函数执行完成,后续将不再执行
def sum(a,b):
    return a+b
c=sum(1,2)
print(c)
#如果要返回多组数,可以返回列表、元组
a=0
def add(num):
    '''
    返回列表类型
    :param num:
    :return:
    '''
    a=num
    li=[]
    i=0
    while i<=10:
        a+=i
        li.append(a)
        i+=1
        pass
    return li
print(add(19))
print(type(add(19)))
def tu():
    '''
    返回元组类型
    :return:
    '''
    return 1,2,3
print(type(tu()))
print(tu())
def di():
    '''
    返回字典类型
    :return:
    '''
    return {'name':'11','age':11}
print(di())
print(type(di()))

在这里插入图片描述

4.函数嵌套调用

#嵌套调用
def fun1():
    print('-------------第一个函数开始--------------')
    print('-------------第一个函数执行--------------')
    print('-------------第一个函数结束--------------')
    pass
def fun2():
    print('-------------第二个函数开始,调用第一个函数')
    fun1()
    print('-------------第二个函数结束--------------')
    pass
fun2()

在这里插入图片描述

函数的分类:
1.有返回值有参数
2.有返回值没参数
3.没返回值有参数
4.没返回值没参数

5.实践

在这里插入图片描述
5.1 函数练习1

i=0
def fun1(*args):
    sum=0
    for i in args:
        sum+=i
        pass
    return sum
print('-----------第一个函数练习------------')
print(fun1(1,2,3,4,5,6,3,2,5,99))

5.2 函数练习2

def fun2(a):
    li=[]
    l=len(a)
    i=1
    while i<l:
        if i%2!=0:
            li.append(a[i])
            pass
        i+=1
    return li
print('-----------第二个函数练习-----------')
print('传元组:',end=' ')
print(fun2((1,2,3,4,5)))
print('传列表:',end=' ')
print(fun2([1,2,3,4,5,6,7,8,9]))

5.3 函数练习3

print('-----------第三个函数练习:----------')
def fun3(**kwargs):
    '''
    处理字典类型的数据
    :param kwargs: 字典类型
    :return: 字典类型
    '''
    for key,value in kwargs.items():
        if len(value)>2:
            kwargs[key]=value[0:2]
            pass
        pass
    return kwargs  #这里也可以声明一个新的字典返回
print(fun3(name='sdxfd',age='eleven',sex='nv',height='1.98',li=[1,2,3]))

5.4 综合代码

i=0
def fun1(*args):
    sum=0
    for i in args:
        sum+=i
        pass
    return sum
print('-----------第一个函数练习------------')
print(fun1(1,2,3,4,5,6,3,2,5,99))
#0,1,2,3,4,5,6,7,8,9
def fun2(a):
    li=[]
    l=len(a)
    i=1
    while i<l:
        if i%2!=0:
            li.append(a[i])
            pass
        i+=1
    return li
print('-----------第二个函数练习-----------')
print('传元组:',end=' ')
print(fun2((1,2,3,4,5)))
print('传列表:',end=' ')
print(fun2([1,2,3,4,5,6,7,8,9]))
print('-----------第三个函数练习:----------')
def fun3(**kwargs):
    '''
    处理字典类型的数据
    :param kwargs: 字典类型
    :return: 字典类型
    '''
    for key,value in kwargs.items():
        if len(value)>2:
            kwargs[key]=value[0:2]
            pass
        pass
    return kwargs  #这里也可以声明一个新的字典返回
print(fun3(name='sdxfd',age='eleven',sex='nv',height='1.98',li=[1,2,3]))

在这里插入图片描述

答案并不唯一,条条大路通罗马,随着各位的思路能够得出正确答案的就是正确答案

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux: ubi rootfs 加载故障案例

文章目录 1. 前言2. ubi rootfs 加载故障现场3. 故障分析与解决4. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. ubi rootfs 加载故障现场 问题故障内核日志如下&#xff1a; Star…

前后端分离与实现 ajax 异步请求 和动态网页局部生成

前端 <!DOCTYPE html><!-- 来源 --> <!-- https://cloud.tencent.com/developer/article/1705089 --> <!-- https://geek-docs.com/ajax/ajax-questions/19_ajax_javascript_send_json_object_with_ajax.html --> <!-- 配合java后端可以监听 --&…

Jmeter的几种参数化方式

1.为什么要做参数化&#xff1f; 在用jmeter脚本进行压测的时候&#xff0c;为了更真实的模拟起到更好的效果&#xff0c;我们需要让参数动态变化起来&#xff0c;也就是参数化。通过参数化我们也可以更好、更灵活的维护我们的测试脚本。 2.参数化的方式 能够实现参数化的方式有…

Linux 磁盘分区步骤

1.lsblk用于查看磁盘分区情况&#xff0c;lsblk -f用于查看uuid字符串以及挂载点。 以下是虚拟机部分添加磁盘的步骤。 其余没展示的都按照默认设置进入下一步即可。 2.添加完成后使用reboot重新进入后再使用lsblk就会发现磁盘sdb已经有了&#xff0c;但是没有分区。现在添加分…

LitCTF2024部分wp

litctf wp 第一次ak了web和misc&#xff0c;非常激动&#xff0c;感谢lictf给我这个机会 最终成果 全靠队里的密码逆向✌带飞。一个人就砍了近一半的分数 这里是我们队的wp web exx 题目名反过来就是xxe&#xff0c;考察xxe&#xff0c;查看登录的数据包 发现传的就是xml…

华为高斯数据库招聘

西安华为&#xff0c;部门直招数据库开发&#xff0c;测试&#xff0c;维护&#xff0c;hc充足&#xff0c;流程快。 语言不限&#xff0c;专业不限&#xff0c;与业内数据库大佬共事&#xff0c;致力于做数据库行业领军者。 一、岗位职责&#xff1a; 1.负责数据库系统内核模…

Qt信号槽与函数直接调用性能对比

1. 测试方法 定义一个类Recv&#xff0c;其中包含一个成员变量num和一个成员函数add()&#xff0c;add()实现num的递增。 另一个类Send通过信号槽或直接调用的方法调用Recv的add函数。 单独开一个线程Watcher&#xff0c;每秒计算num变量的增长数值&#xff0c;作为add函数被调…

SpaceX 首席火箭着陆工程师 MIT论文详解:非凸软着陆最优控制问题的控制边界和指向约束的无损凸化

上一篇blog翻译了 Lars Blackmore(Lars Blackmore is principal rocket landing engineer at SpaceX)的文章&#xff0c;SpaceX 使用 CVXGEN 生成定制飞行代码,实现超高速机载凸优化。利用地形相对导航实现了数十米量级的导航精度,着陆器在着陆过程中成像行星表面并将特征与机载…

Spring自带定时任务@Scheduled注解

文章目录 1. cron表达式生成器2. 简单定时任务代码示例&#xff1a;每隔两秒打印一次字符3. Scheduled注解的参数3.1 cron3.2 fixedDelay3.3 fixedRate3.4 initialDelay3.5 fixedDelayString、fixedRateString、initialDelayString等是String类型&#xff0c;支持占位符3.6 tim…

用幻灯片讲解C++手动内存管理

用幻灯片讲解C手动内存管理 1.栈内存的基本元素 2.栈内存的聚合对象 3.手动分配内存和释放内存 注意&#xff1a;手动分配内存&#xff0c;指的是在堆内存中。 除非实现自己的数据结构&#xff0c;否则永远不要手动分配内存! 即使这样&#xff0c;您也应该通过std::allocator…

gitlabcicd-k8s部署runner

一.环境信息 存储使用nfs挂载持久化 k8s环境 helm安装 建议helm 3 二.部署gitlab-runner 1.查看gitlab版本 进入容器可通过执行&#xff1a;gitlab-rake gitlab:env:info rootgitlab-647f4bd8b4-qz2j9:/# gitlab-rake gitlab:env:info System information System: Current Us…

重生之 SpringBoot3 入门保姆级学习(14、内容协商基础简介)

重生之 SpringBoot3 入门保姆级学习&#xff08;14、内容协商基础简介&#xff09; 3.3 内容协商3.3.1 基础简介3.3.2 演示效果 3.3 内容协商 3.3.1 基础简介 默认规则 基于请求头的内容协商&#xff08;默认开启&#xff09; 客户端向服务器发送请求&#xff0c;携带 HTTP 标…

php: centos+apache 启动php项目

指导文件 &#xff1a;PHP: Apache 2.x on Unix systems - Manual 下载路径 &#xff1a;Index of /httpd configure: error: APR not found. 解决方案&#xff1a; APR&#xff08;Apache Portable Runtime&#xff09;库。APR是Apache HTTP服务器的可移植运行时环境&…

51建模网3D编辑器:一键为3D模型设置特殊材质

3D设计师要对3D模型设置玻璃或者钻石材质时&#xff0c;操作比较复杂&#xff0c;但是利用51建模网的3D编辑器&#xff0c;不用下载安装软件&#xff0c;在线通过浏览器即可编辑&#xff0c;具有一键设置特殊材质的功能。目前&#xff0c;它支持钻石材质、玻璃材质和水波纹材质…

nvme-cli常见命令分析

一、背景 nvme-cli命令常常用于获取或者设置SSD参数&#xff0c;比如常见的nvme list&#xff0c;nvme id-ctrl等&#xff0c;都是获取SSD的基本信息&#xff0c;也有nvme admin-passthru用于读取或者设置自定义命令。作为使用者&#xff0c;我们并不知道nvme-cli源码怎么实现…

程序员修炼之道 07:调试

不记录&#xff0c;等于没读。 这里是我阅读《程序员修炼之道》这本书的记录。 软件缺陷以各种方式表现出来&#xff0c;从对需求的误解到编码错误。现在的计算机系统仍有局限性&#xff0c;能干你让它干的事情&#xff0c;但不一定能干你想让它干的事情。本章介绍调试中涉及的…

基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能

基于STC12C5A60S2系列1T 8051单片机实现串口调试助手软件与单片机相互发送数据的RS485通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功…

编译原理总结

编译器构成 1. 前端分析部分 1.1 词法分析 确定词性&#xff0c;输出为token序列 1.2 语法分析 识别短语 1.3 语义分析 分析短语在句子中的成分 IR中间代码生成 2. 机器无关代码优化 3. 后端综合部分 目标代码生成 机器相关代码优化 4. 其他 全局信息表 异常输出

SOCKS 代理 和 HTTP 代理, WebSocket

SOCKS 代理 和 HTTP 代理 的区别 SOCKS 代理 和 HTTP 代理 都是代理服务器&#xff0c;它们充当客户端和目标服务器之间的中介&#xff0c;但它们的工作方式和应用场景有所不同。 1. SOCKS 代理&#xff1a; 工作原理&#xff1a; SOCKS 代理是一种更底层的代理&#xff0c;…

列存在 OceanBase 数据库架构中的应用与演进

OceanBase 4.3 版本上线了列存功能&#xff0c;以满足实时分析的需求。 本文作为《特性解读&#xff1a;列存技术》的后续&#xff0c;将详细阐述列存技术在OceanBase数据库架构中的应用、发展历程&#xff0c;以及未来的趋势。 一、前言 1970 年&#xff0c;关系模型之父 Co…