# 函数
# 什么是函数: 能完成特定功能的工具,在Python中表示能完成特定功能的代码块。(函数定义)
# 为什么要用函数 :①函数可以重复调用出来,效率高,而且维护成本低 ②使程序结构看起来清晰明了 ③避免重复写相同的代码。
# 这也是函数的优点
# -- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名
# => 通过名字就可以找到工具 => 使用工具来解决问题
#
# 函数的四大部分
# 函数名 :使用函数的依据 如print(函数名())
# 参数 :完成功能需要的的条件信息
# 函数体 :完成功能的代码块
# 返回值 :功能完成反馈的结果
#
# 定义函数的语法:通过def关键字来定义

def get_water(water, money):
    print('收入你的%d元钱' % money)
    print('给你%s水种' % "水种")
    return '矿泉水'

# 函数的使用 (重要)
# 使用函数
# ①根据需要定义函数
# ②通过函数名找到函数所在的位置(内存地址)
# ③函数名()执行函数地址中存放的所有代码量
# ④函数执行完一定有返回结果,通过return将执行结果返回给外部,-外部需要接受执行结果 则用变量接受 反之只执行
#  注 :函数 先定义 后使用
# 函数的四个部分都是可以根据需求来改变的

def get_water(water, money):
    print('收入你的%s元钱' % money)  # %s占位符    %s % x   x给%s占位的地方  收入你的10元钱  收入你的20元钱
    print('给你的%s的水' % water)  # 给你的矿泉水的水 给你的王老吉的水
    return water

# 需要使用函数时就使用一次
res = get_water('矿泉水', 10)
print(res)  # 矿泉水
# 再次需要时再次使用函数
res_2 = get_water('王老吉', 20)
print(res_2)  # 王老吉

# 函数的分类
# 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)

# 函数的返回值 (重点)
# 函数名()的意义
# ①拿到函数地址==》②加()就是指执行函数体==》③得到执行的结果 例如get_water()
#  返回值的功能 1:结束函数 2:将函数的内部函数反馈给外界
#  应用场景
#   1.不明确return关键词的函数:系统在函数最末尾自动添加了return,返回的是None

def fn1():
    print('不需要的函数执行')
res = fn1() # 一般不需要对这样的函数进行接收执行结果
print(res)   # None

# 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之函数介绍的更多相关文章

  1. python strip()函数 介绍

    python strip()函数 介绍,需要的朋友可以参考一下   函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除 ...

  2. (转)python之函数介绍及使用

    为什么要用函数? 1.减少代码量 2.保持一致性 3.易维护 一.函数的定义和使用 ? 1 2 3 4 5 6 def test(参数):              ...     函数体     . ...

  3. 移动端自动化测试(二)之 Appium常用的API(python)函数介绍

    上一章节已经介绍了Appium的环境搭建,其实只要掌握了Appium的工作原理,前期的准备工作和安装过程是比较简单的.那么当我们搭建好Appium环境后接下来做些什么呢?通常思路是开始appium的第 ...

  4. python socket 函数介绍

    socket 函数原型:socket.socket([family[,type[,proto]]]) family参数取值(协议族): socket.AF_INET        -->ipv4 ...

  5. python的函数介绍 位置参数 关键字参数 默认参数 参数组 *args **kwargs

    1.数学意义的函数与python中的函数 数学意义的函数 y = 2*3+1 x =3 y =7 x是自变量,y是因变量 2.python中定义函数的方法 一个函数往往都是为了完成一个特定的功能而存在 ...

  6. python strip()函数介绍

    函数原型 声明:str为字符串,s为要删除的字符序列 str.strip(s)        删除str字符串中开头.结尾处,位于 s删除序列的字符 str.lstrip(s)       删除str ...

  7. python zip函数介绍

    首先用help(zip)来看一下帮助文档:

  8. python discover 函数介绍

    discover(start_dir,pattern='test*.py',top_level_dir=None)找到指定目录下所有测试模块,并可递归查到子目录下的测试木块,只有匹配到的文件名才会被加 ...

  9. python strip() 函数和 split() 函数的详解及实例

    strip是删除的意思:split则是分割的意思.strip可以删除字符串的某些字符,split则是根据规定的字符将字符串进行分割. 1.Python strip()函数 介绍 函数原型 声明:s为字 ...

随机推荐

  1. 吴裕雄--天生自然python学习笔记:python的Bokeh 基本绘图

    使用 Bokeh 绘图时,其大部分绘图功能是由 bokeh plotting 完成的,所以我们一 般至少要导入自gure 及 show 这两个函数 : Bokeh 绘制的图形是在浏览器中显示的, 创建 ...

  2. Linux把内存挂载成硬盘提高读写速度

    tmpfs是一种虚拟内存文件系统正如这个定义它最大的特点就是它的存储空间在VM里面,这里提一下VM(virtual memory),VM是由linux内核里面的vm子系统管理,现在大多数操作系统都采用 ...

  3. Zabbix调用外部脚本发送邮件:python编写脚本

    Zabbix调用外部脚本发送邮件的时候,会在命令行传入两个参数,第一个参数就是要发送给哪个邮箱地址,第二个参数就是邮件信息,为了保证可以传入多个参数,所以假设有多个参数传入 #!/usr/bin/en ...

  4. 使用jxl操作之一: 实现对Excel简单读写操作

    项目目录树 对象类UserObject UserObject.java package com.dlab.jxl; public class UserObject { private String u ...

  5. IPFS问题总结

    1.安装包下载 ipfs安装版本下载:https://github.com/ipfs/go-ipfs/releases,这是IPFS的go语言实现版,目前实现的还有js版本. 2.安装与启动 linu ...

  6. linux安装swoole扩展

    1.首先我们要安装swoole扩展的话,需要把它的包下载下来,下载地址是: https://github.com/swoole/swoole-src 2.下载下来之后进行解压: unzip swool ...

  7. Java并发 - (无锁)篇6

    , 摘录自葛一鸣与郭超的 [Java高并发程序设计]. 本文主要介绍了死锁的概念与一些相关的基础类, 摘录自葛一鸣与郭超的 [Java高并发程序设计]. 无锁是一种乐观的策略, 它假设对资源的访问是没 ...

  8. UMD: 通用模块规范

    既然CommonJs和AMD风格一样流行,似乎缺少一个统一的规范.所以人们产生了这样的需求,希望有支持两种风格的“通用”模式,于是通用模块规范(UMD)诞生了.

  9. 在不重启MySQL的情况下用gdb工具设置变量

    前提:此方法只是参考其它博客的一个记录,未经亲自验证 当在mysql客户端设置一些变量时提示如下报错: 于是想能否有办法在不重启的情况下设置这些只读变量,在网上搜索别人的博客后发现如下方法 1.命令行 ...

  10. 大忙人的jdk8,比出生晚了好几个激情的夏天

    写给大忙人的jdk8到手了,第一件事情就蒙蔽了,mac装的jdk7,切换jdk的功能要整出来才行,下好jdk8up101安装,假装几行代码搞定目标在命令行下,可以通过命令'jdk6', 'jdk7', ...