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 ...
随机推荐
- 分布式存储ceph---ceph添加/删除osd(5)
一.添加osd 当前ceph集群中有如下osd,现在准备新添加osd: 1.选择一个osd节点,添加好新的硬盘: 2.显示osd节点中的硬盘,并重置新的osd硬盘: 列出节点磁盘:ceph-deplo ...
- JavaSE 知识图谱
JAVA基础语法 DOS命令 JAVA介绍 JDK安装 JAVA环境的搭建 关键字 注释 标识符命名规则(编码规范) 字面值常量 进制转换 基本类型 变量(局部变量.静态变量) 运算符 表达式 控制语 ...
- python3 访问windows共享目录
python3 访问windows共享目录 1.安装pysmb包 pip install pysmb 2.连接共享目录 #!/usr/bin/env python3 # -*- coding:utf- ...
- PID基础
经常有人会问到PID的用法,今天小编在这里例举温度控制中的PID部分,希望能够把PID的具体应用说明白. 先说几个名词: 1.直接计算法和增量算法:这里的所谓增量算法就是相对于标准算法的相邻两次运算之 ...
- 使用python实现钉钉告警通知功能
前言:日常工作中告警通知是必不可少的,一般会使用邮件.钉钉.企业微信等,今天分享一下使用python实现钉钉告警 一. 钉钉机器人创建 登录钉钉客户端,创建一个群,把需要收到报警信息的人员都拉到这个群 ...
- GO学习-(15) Go语言基础之包
Go语言基础之包 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的.本文介绍了Go语言中如何定义包.如何导出包的内容及如何导入其他包. Go语言的包(packag ...
- Docker学习(8) Docker的CS模式
Docker的CS模式 链接方式 socket
- Python+Selenium - 文件上传
如下图,从系统点击上传功能,打开到这种如下图页面的才适合本文介绍的处理方法 处理方法一 pywinauto库 优点:可以选择多个文件,路径中有中文也支持 缺点:只能Windows平台使用 安装 pip ...
- Yolov3&Yolov4网络结构与源码分析
Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 1. 论 ...
- Json文件解析(下)
Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::dequ ...