基础部分先告一段落,今天开始学习函数。

一、函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数

        -- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名
        => 通过名字就可以找到工具 => 使用工具来解决问题

# 函数的优点:
# 1. 避免代码的冗余
# 2. 让程序代码结构更加清晰
# 3. 让代码具有复用性,便于维护
函数的四部分:
1. 函数名:使用该函数的依据
2. 函数体:完成功能的代码块
3. 返回值:功能完成的反馈结果
4. 参数:完成功能需要的条件信息
# 函数的定义语法:
# def:定义函数的关键字
# 函数名:该工具的名字,后期就是通过工具的名字使用工具
# 参数列表:使用工具需要提供一些参数
# 函数体:解决问题的过程逻辑
# 返回值:告诉外界功能执行的结果
# 使用函数:
# 1.根据需求定义函数
# 2.通过函数名找到函数所在的位置(内存地址)
# 3.函数名() 执行函数地址中存放的所有代码块
#       -- 函数在定义时需要外界的参数,就要在调用时传入对应的参数
# 4.函数执行完一定有返回结果,通过return关键字将结果返回给外界
#       -- 外界需要知道执行结果,用变量接收,反之只执行函数(不需要接收)即可

# 注:函数必须先定义,后使用

# 函数的四部分都可以根据需求的变化而变化

二、函数的分类

# 1.根据函数体分类
# 空函数: pass来填充函数体的函数
#        -- 优先明确函数名,暂不明确函数体(编程中就存在一些没有函数体的函数)
def login(): pass  # 在开发初期,可以讲所有功能提前列出来,用pass占位着,后期再去填充功能体

# 非空函数:有函数体的函数
def fn2():
    print('函数体')
# 2.根据函数参数分类
def add():
    print('功能体不需要外界的参数')
    n1 = input('n1: ')
    n2 = input('n2: ')
    print(n1 + n2)

# 有参函数
def add_two(n1, n2):
    print('功能体需要外界的参数')
    print(n1 + n2)
# 3.根据函数返回值分类:所有的函数都有返回值
# 不明确返回值
def low_two(n1, n2):
    # 外部不需要知道内部的执行结果
    print(n1 - n2)

# 明确返回值
def jump_two(n1, n2):
    # 外部需要知道内部的执行结果
    return n1 * n2
res = jump_two(10, 20)
print(res)

三、函数的返回值

# 重点:函数名()
# 1)拿到函数地址 => 2)加()执行函数体 => 3)得到函数的执行结果

# 重点: 返回值的功能
# 1.结束函数;2.将函数的内部数据返回给外部
# 应用场景
# 1.不明确return关键词的函数:系统在函数最末尾自动添加了return,返回的是None
def fn1():
    print('普通的函数执行')

res = fn1()  # 一般不需要对这样的函数进行接收执行结果
print(res)
# 2.明确空return关键词的函数:为了结束函数而return
def print_msg():
    while True:
        msg = input("msg: ")
        if msg == 'q':
            # break
            return  # 在特定的位置需要直接结束函数,但不需要告诉外界某个结果,用空return处理
        print(msg)
    print(msg)  # 在break下可以被执行,在return下不能被执行
res = print_msg()
print(res)
# 3.有明确的返回值需求的函数:
#       -- python中的函数本质上只能返回一个值,
#               -- 值跟在return关键词后
#               -- 可以通过语法上返回多个值,值之间用逗号隔开,但是本质上返回装有多个值的元组
# 一个值
def get_num():
    num = input('num: ')
    return num
print(get_num())

# 多个值
def get_two_num():
    n1 = input('n1: ')
    n2 = input('n2: ')
    return n1, n2
    # return (n1, n2)
# print(get_two_num())
num1, num2 = get_two_num()  # python的return支持多值返回的语法原因是python中有解压赋值
print(num1, num2)
注:
# 当用一个值接收函数的返回值,一定没有问题
#       -- 函数返回一个接收一个;函数返回多个,接收装有多个值得元组
# 当用多个值接收函数的返回值,采用的是解压赋值的机制,返回值的个数一定要与接收值得个数相同

初学python之路-day10的更多相关文章

  1. Python之路,Day10 - 异步IO\数据库\队列\缓存

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  2. python之路-Day10

    操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 ...

  3. Python之路Day10

    本节主要内容:memcache&redis.RabbitMQ.twisted框架 1. memcache&redis 1.1 memcache Memcached 是一个高性能的分布式 ...

  4. 初学python之路-day12

    本篇补上字符串的比较:按照从左往右比较每一个字符,通过字符对应的ascii进行比较 一.函数默认值的细节 # 如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值 a ...

  5. 初学python之路-day08前期总结

    # 1# 计算机原理:控制器 运算器 存储器 input设备 output设备 IO流# 三大核心:CPU 内存 硬盘 # 内存分布:栈区 与 堆区# 如二进制与十进制的转换,如1111转成十进制为1 ...

  6. 初学python之路-day08

    #学习了编码后,还要了解三种字符串.# 一.# 普通字符串:u''以字符作为输出单位,# print(u'abc') # 用于显示abc# # 二进制字符串:b'' 二进制字符串以字节作为输出单位# ...

  7. 初学python之路-day07-字符编码

    今天的博客主要关于字符编码,并对前几天学习的数据类型做些总结. 学习字符编码的目的:解决乱码问题. 应用程序打开文本文件的三步骤  1.打开应用程序  2.将数据加载到内存中  3.cpu将内存中的数 ...

  8. 初学python之路-day04

    每天一篇总结,今天学习的是有关于流程控制的知识. 流程控制,顾名思义,在计算机运行中,程序是被某种控制方式按照某种流程或者规律来执行的.而python程序的运行,肯定也是按照某种规律在执行.这些规律可 ...

  9. 初学python之路-day03

    我在前面的文章提到了变量的概念,这里详细介绍下变量的命名.变量名,只能是字母.数字及下划线 "_" 任意组成,而且不能以数字开头.在命名变量时,尽量避免与系统关键词重名,如:'an ...

随机推荐

  1. 01——Solr学习之全文检索服务系统的基础认识

    一.为什么要用Solr,Solr是个什么东西? 1.1.Solr是个开源的搜索服务器 1.2.我们用Solr主要实现搜索功能,一般的网站首页都会有一个大大的搜索框,用来搜索此网站上的商品啊什么的,如下 ...

  2. 详解TCP三次握手

    该文pdf下载地址:三次握手.pdf

  3. 从JS的深拷贝与浅拷贝到jq的$.extend()方法

    一.堆内存与栈内存 堆和栈都是内存中划分出来的用来存储的区域,栈为自动分配的内存空间,它由系统自动释放,堆为动态分配的内存,大小不定也不会自动释放. 二.js基本数据类型与引用类型的不同 基本数据类型 ...

  4. react-native-echarts在打包时出现的坑

    react-native-echarts目前是RN开发中使用echarts图表最好的插件了,用法与Echarts完全一致,默认提供了三个属性: option (object): The option ...

  5. Netty 客户端断线重连

    client 关闭后会执行 finally 代码块,可以在这里可以进行重连操作 public class NettyClient implements Runnable { private final ...

  6. ISOMAP和MDS降维

    转载自https://blog.csdn.net/victoriaw/article/details/78497316 核心:测地线距离(dijstra最短路径获得).MDS降维 Isomap(Iso ...

  7. Msi中文件替换

    转自https://blog.csdn.net/davidhsing/article/details/9962377 ※说明:目前可以用于MSI编辑的软件很多,但是有些软件在保存时会在MSI文件中写入 ...

  8. ADO.Net笔记整理(一)

    几次装机,Notes已烟消云散,近日因为Node.js死活搞不定,无奈装机,备份好的东东,没想到磁盘扇区出现异常,可能是PE启动盘的病毒,只好将磁盘全部重新分区,恢复数据也懒得恢复了,日积月累关乎将来 ...

  9. ZYNQ原理图中添加RTL设计模块

    前言 已有的RTL模块怎么添加到原理图中? 流程 (1)添加文件到设计中. (2)右键文件添加到block design中. (3)连线即可. 以上.

  10. python第十三天,函数的嵌套定义,global,nonlocal关键字的使用,闭包及闭包的运算场景,装饰器

    今日内容 1. 函数的嵌套定义 2.global,nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器 函数的嵌套定义 1. 概念:在一个函数内部定义另一个函数 2 .为什么要有函数的嵌套定义 ...