函数

函数的定义

函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数
-- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名
=> 通过名字就可以找到工具 => 使用工具来解决问题

函数的优点

1. 避免代码的冗余
2. 让程序代码结构更加清晰
3. 让代码具有复用性,便于维护

函数的四部分

1. 函数名:使用该函数的依据
2. 函数体:完成功能的代码块
3. 返回值:功能完成的反馈结果
4. 参数:完成功能需要的条件信息

函数的语法

def:定义函数的关键字
函数名:该工具的名字,后期就是通过工具的名字使用工具
参数列表:使用工具需要提供一些参数
函数体:解决问题的过程逻辑
返回值:告诉外界功能执行的结果

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

函数的使用

使用函数:
 1.根据需求定义函数
 2.通过函数名找到函数所在的位置(内存地址)
 3.函数名() 执行函数地址中存放的所有代码块
 -- 函数在定义时需要外界的参数,就要在调用时传入对应的参数
 4.函数执行完一定有返回结果,通过return关键字将结果返回给外界
 -- 外界需要知道执行结果,用变量接收,反之只执行函数(不需要接收)即可

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

# 函数的四部分都可以根据需求的变化而变化
def get_water(water, money):
print('收入你的%d元钱' % money)
print('给你%s水种' % water)
return water
# 需要使用函数,就调用一次
res = get_water('矿泉水', )
print(res) print('玩耍...')
print('又口渴了...') # 又来需求,在调用一次,代码可以复用,函数只有一个,代码结构清晰且不冗余
res = get_water('王大哦', )
print(res)

函数的分类

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)

函数的返回值

在函数体中,通过return关键词返回函数的内部数据给外部

重点:函数名()  
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)

注意:
 当用一个值接收函数的返回值,一定没有问题
 -- 函数返回一个接收一个;函数返回多个,接收装有多个值得元组
 当用多个值接收函数的返回值,采用的是解压赋值的机制,返回值的个数一定要与接收值得个数相同

day-10初级函数的更多相关文章

  1. day_10初级函数

    今天讲了函数初级 函数:完成特定功能的代码块,作为一个整体对其进行特定的命名,该名字就是代表函数 --现实中很多问题要通过一些工具进行处理 ,,可以将工具提前准备好并命名 通过名字就可以找到这个工具 ...

  2. Linux pwn入门教程(10)——针对函数重定位流程的几种攻击

    作者:Tangerine@SAINTSEC 本系列的最后一篇 感谢各位看客的支持 感谢原作者的付出一直以来都有读者向笔者咨询教程系列问题,奈何该系列并非笔者所写[笔者仅为代发]且笔者功底薄弱,故无法解 ...

  3. 巨蟒python全栈开发-第10天 函数进阶

    一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...

  4. 2021.08.10 Euler函数总结

    2021.08.10 Euler函数总结 知识: 记 φ(n) 表示在 [1,n] 中与 n互质的数的个数. 1.p为质数,则 \[φ(p^l)=p^l-p=p^{l-1}(p-1) \] 注:每p个 ...

  5. int (*(*fp)(void *))[10]; 指向函数的指针类型

    <pre lang="c" escaped="true">int (*(*fp)(void *))[10]; //这个类型用typedef分解出来 ...

  6. Python核心编程读笔 10:函数和函数式编程

    第11章 函数和函数式编程 一 调用函数  1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...

  7. 关于oracle数据库(10)函数

    分析函数,用于统计排名 语法:函数名() over(order by 排序字段 asc | desc) row_number() 无论值是否相等,生成连续的行号 -- 1,2,3,4, select ...

  8. 【转】JDBC学习笔记(10)——调用函数&存储过程

    转自:http://www.cnblogs.com/ysw-go/ 如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个C ...

  9. day 10 - 2 函数练习

    1.写函数 接收 n 个数字  求这些参数数字的和 def sum_func(*args): total = 0 for i in args: total += i return total prin ...

随机推荐

  1. python-之-深浅拷贝二(元组)

    元组比较特殊 1.----元组本身为不可变类型 import copy v1 = (1, 2, 3, 4) v2 = copy.copy(v1) print(id(v1), id(v2)) v3 = ...

  2. 深入java----java内存区域及对象的创建

    看完深入理解jvm之后自己再用图的方式进行一遍梳理,用以加深理解. 第一部分,首先对整体java运行时内存区域有一个整体框架式的了解. 运行时内存区域的划分如上图所示,那么接下里看看一个对象的创建又怎 ...

  3. HTML5 浏览器支持

    css重置 header, section, footer, aside, nav, main, article, figure { display: block; } 为HTML添加新的元素 < ...

  4. linux 命令启动Oracle数据库

    首先使用oracle用户登录Linux,然后在shell命令行中执行下面的命令: 第一步:打开Oracle监听lsnrctl start 第二步:进入sqlplussqlplus /nologSQL& ...

  5. log4j 2.+框架

    今天听网友介绍说Log4j2说效率比lOG4J高而且敲级好用.晚上有空就花了几个时间研究了一下.发现嗯,的确好用.我还清楚的记得Log4j1.2的时候我们需要设置log4j需要通过一个properti ...

  6. html之跳转锚

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. python 列表、元组

    列表 List(列表) 是 Python 中使用最频繁的数据类型. 列表可以完成大多数集合类的数据结构实现.它支持字符,数字,字符串甚至可以包含列表(即嵌套). 列表用 [ ] 标识,是 python ...

  8. 在JSP中使用el函数标签获取默认值(男女性别选项)

    http://blog.csdn.net/b10060224/article/details/45771025

  9. 【linux基础】ubuntu系统NVIDIA驱动安装

    在安装GPU环境下的软件工具,特别是CUDA/CUDNN等,一定要先把GPU环境搭建好. NVIDIA驱动安装会遇到各种问题,真希望黄教主可以将各个工具如何安装使用讲解的更加细致.清楚一些,有时候按照 ...

  10. 学习笔记:分布式日志收集框架Flume

    业务现状分析 WebServer/ApplicationServer分散在各个机器上,想在大数据平台hadoop上进行统计分析,就需要先把日志收集到hadoop平台上. 思考:如何解决我们的数据从其他 ...