11、函数(def)
11.1、函数:
函数即变量
函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系
1、函数格式:
def test(x):
'''
2*x+1
:param x:整形数字
:return: 返回计算结果
'''
y = 2 * x + 1
return y
a = test()
#调用函数
print(a)
11.2、函数返回:
1、规则:
(1)函数的返回值可以是任何数据类型
(2)函数如果有多个返回值用逗号隔开
(3)函数只用一个返回值时,返回值的数据类型不发生改变
(4)函数有多个返回值时,返回值以元组的形式返回
(5)函数遇到return时函数结束
2、用法:
def test01():
msg = 'test01'
return msg
#函数返回一个值
def test02():
msg = 'test02'
return 1, 2, 3, 4, 'a', ['alex'], {'name': 'alex'}, None
#函数返回多个值
t1 = test01()
t2 = test02()
print(t1)
print(t2)
11.3、函数普通传参:
1、规则:
(1)函数分为形参和实参,形参在函数被调用后释放
(2)位置参数,必须一一对应,缺一不行多一也不行
(3)关键字参数,无须一一对应,缺一不行多一也不行
(4)两者混用时,位置参数必须在关键字参数左边
(5)默认参数在不传入实参时使用默认值,在传入实参时默认参数值被覆盖
(6)一个参数不能传多个值
2、用法:
(1)位置参数:
def test(x, y, z):
print(x)
print(y)
print(z)
test(1, 2, 3)
(2)关键字参数:
def test(x, y, z):
print(x)
print(y)
print(z)
test(y=1, x=3, z=4)
(3)位置参数和关键字参数混用:
def test(x, y, z):
print(x)
print(y)
print(z)
test(1, y=2, 3)
#报错
test(1, 3, y=2)
#报错
test(1, 3, z=2, y=4)
#报错
test(z=2, 1, 3)
#报错
test(1, 3, z=2)
(4)默认参数:
def handle(x, type='mysql'):
print(x)
print(type)
handle('hello')
handle('hello', type='sqlite')
11.4、参数组:
1、规则:
(1)列表参数:
实参的数据类型除字典外都可以
可以传入多个实参
实参可以重复
传入的实参以元组的形式存储,不传入实参是空元组
传入的列表格式为*[1,2,3,4],传入元组的格式为*(5,6,7,8)
(2)字典参数:
实参的数据类型只能是字典
可以传入多个实参
实参的key值不可以重复
传入的实参以字典的形式存储,不传入实参是空字典
传入字典的格式为**{1:2,3:4}(key必须是字符串型)或 y=2, z=3;
(3)列表参数和字典参数在一起使用:
可以传递任何的参数
2、用法:
(1)参数组之列表参数(*args):
def test(x, *args):
print(x)
print(args)
test(1)
test(1, *['x', 'y', 'z'],*('x', 'y', 'z'),1,2,3,3,4,5)
(2)参数组之字典参数(**kwargs):
def test(x, **kwargs):
print(x)
print(kwargs)
test(1)
test(1,**{"a":5,"b":6},y=2, z=3)
(3)列表参数和字典参数混用:
def test(x, *args, **kwargs):
print(x)
print(args, args[-1])
print(kwargs, kwargs.get('y'))
test(1, *['x', 'y', 'z'],*('x', 'y', 'z'),1,2,3,3,4,5,**{"a":5,"b":6},y=2, z=3)
#输出结果:
#1
#('x', 'y', 'z', 'x', 'y', 'z', 1, 2, 3, 3, 4, 5) 5
#{'a': 5, 'b': 6, 'y': 2, 'z': 3} 2
11.5、函数局部变量和全局变量:
1、规则:
(1)函数的内容无global关键字:
1)有声明局部变量:
优先读取局部变量,能读取全局变量,无法对全局变量重新赋值
2)无声明局部变量:
能读取全局变量,无法对全局变量重新赋值
(2)函数的内容有global关键字:
1)有声明局部变量:
局部变量本质上就是全局的那个变量,全局变量可读取可赋值
2)无声明局部变量:
全局变量可读取可赋值
(3)nonlocal:
nonlocal代表指定上一级变量,如果没有就继续往上直到找到为止,上一级只能是局部变量,
如果是全局变量会报错;
(4)变量书写规范:
全局变量的变量名大写,局部变量的变量名小写
global和nonlocal声明必须写在函数的最上面
2、用法:
name = "test01"
def lc():
global name
name = "test02"
name1 = "test04"
def lc1():
nonlocal name1
name1 = "test03"
lc1()
print(name1)
print(name)
lc()
print(name)
# 输出值为:test01、test03、test02
11.6、函数的向前引进:
1、规则:
(1)函数即变量,调用时生效,不调用不生效
(2)python是按照顺序依次从上往下执行的,函数都是加载到内存当中的,
只要在所有的函数之后调用函数都能够调用到;
2、用法:
(1)
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo()
(2)
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo()
11.7、函数的递归:
1、规则:
(1)递归函数意在减小问题的规模
(2)递归函数是一层一层的调用自己,在得到结果后再一层层的将结果进行返回
(3)递归函数效率不高
2、用法:
def calc(n):
if int(n / 2) == 0:
return n
res = calc(int(n / 2))
return res
print(calc(5))
#示意图:
11.8、匿名函数:
1、匿名函数的格式:
func=lambda x:x+1
# x表示输入的变量,x+1表示return x+1
print(func(10))
上面的匿名函数等价于如下函数:
def func(x):
return x+1
print(func(10))
2、说明:
(1)匿名函数只能用于简单的逻辑计算;
(2)匿名函数常与其他函数一同使用;
11.9、高阶函数:
1、高阶函数定义:
(1)函数接收的参数是一个函数名
(2)函数的返回值是一个函数名
(3)满足上述条件任意一个,都可称之为高阶函数
2、示例:
(1)把函数当作参数传给另外一个函数:
def foo(n):
print(n)
def bar(name):
print('my name is %s' %name)
foo(bar('lc'))
"""
输出结果:
my name is lc
None #因为函数没有返回值,所以print(n)时打印出了None
"""
(2)返回值中包含函数:
def bar():
print('from bar')
def foo():
print('from foo')
return bar
foo()()
"""
输出结果:
from foo
from bar
"""
11、函数(def)的更多相关文章
- 函数def
函数:把执行一定功能的动作封装到一起>>> def 函数名(形参) 通过一个 函数名(实参) 去调用它,传参来执行功能.动作,输出结果 .定义:def ...
- day 9~11 函数
今日内容 '''函数四个组成部分函数名:保存的是函数的地址,是调用函数的依据函数体:就是执行特定功能的代码块函数返回值:代码块执行的结果反馈函数参数:完成功能需要的条件信息1.函数的概念2.函数的定 ...
- python note 11 函数名的使用、闭包、迭代器
1.函数名就是一个变量 def func(): print("我是一个小小的函数") a = func print(a) #输出变量存放地址 <function func a ...
- python函数def
#函数就是实现一个特定功能的程序块 #下面这个函数实现了打印helloworld的功能 def print_hello(): print('hello world!') #这是调用方法 print_h ...
- c++11 函数模板的默认模板参数
c++11 函数模板的默认模板参数 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> ...
- Day 11 函数之对象和名称空间与作用域
函数对象 函数是第一类对象,即函数可以被当做数据处理 函数对象的四大功能 1.引用 x=100 y=x def func() pass f=func print(f) #打印结果 #<funct ...
- python中的函数def和函数的参数
'''函数: 1.减少代码重用性 2.易维护 3.可扩展性强 4.类型function 定义函数: def 函数变量名(): 函数的调用: 1.函数名加括号 2.函数如果没被调用,不会去执行函数内部的 ...
- Day 11:函数装饰器
在说装饰器前,先说一个东西,再Python里,有一个 一切皆对象,一切皆变量. 例: def hello(name="sunjinyao"): return "hi &q ...
- D14 集合set 函数def
把 字符串 元祖 变成集合的方法 因为列表是可变的所以不能变为集合 # s=set('hello')# print(s)## s=set(['alex','alex','sb'])# print ...
随机推荐
- [刷题] 200 Number of Islands
要求 给定一个二维数组,只有0和1两个字符,1代表陆地,0代表水域,纵向和横向的陆地连接成岛屿,被水域隔开,求出地图中有多少岛屿 思路 对要查找的区域进行双重循环遍历,寻找陆地 从陆地初始点开始进行深 ...
- CentOS 8 配置 VNC Server
CentOS 8 配置 VNC Server 2020-12-31 | 标签: centos, vnc 前言 CentOS 8 配置 VNC Server, 使用户可以远程访问,本例介绍安装和配置流程 ...
- Python爬虫 小白[3天]入门笔记
笔记来源 Day-0 1.如果你还不了解Python的基础语法,可以移步|>>>Python 基础 小白 [7天] 入门笔记<<<|或自行学习. 简介 1.什么是爬 ...
- 3.socket编程示例
#block_server.py 非阻塞IO示例#有个疑惑:下面的connfd的blockind要设置为True,不然会出错,待解决from socket import *from time impo ...
- mysql基础之数据库备份和恢复的基础知识
备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...
- 3.23 vi/vim:纯文本编辑器
vi/vim 是Linux命令行界面下的文字编辑器,几乎所有的Linux系统都安装了vi,只要学会了vi这个编辑工具,就可以在任何Linux系统上使用它.而vim是vi命令的增强版(Vi IMprov ...
- 关于RabbitMQ的一些问题总结
消息中间件在工作中一般都不会采用单机模式的,该篇其实是对mq的高可用等等常见问题做一些归纳. 消息队列的高可用 普通集群与镜像集群模式,此处不做深究,另开一篇专门讲述此处 如何保证消息不被重复消费 保 ...
- 如何在idea中将项目生成API文档(超详细)(Day_32)
1.打开要生成API文档的项目,点击菜单栏中的Tools工具,选择Generate JavaDoc 2.打开如下所示的Specify Generate JavaDoc Scope 界面 3.解释下Ot ...
- x轴滚动
#region 设置x轴滚动 XYDiagram diagram = (XYDiagram)chartRoomUserAnalysisHis.Diagram; diagram.Ax ...
- lambda 函数执行流程 递归注意