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 ...
随机推荐
- 【转载】kvm迁移
https://www.jianshu.com/p/60132085a3c9 kvm分静态和动态迁移,静态就是关机迁移,比较简单,动态迁移就是不关闭服务器进行迁移.静态迁移:确定虚拟机关闭 https ...
- 1.5linux用户权限相关命令
用户权限相关命令 目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01. 用户 和 权限 的基本概念 1.1 基本概念 用户 是 Linux 系统工作中重要 ...
- 10.4 route:显示或管理路由表
route命令 可以显示或管理Linux系统的路由表,route命令设置的路由主要是静态路由. 路由的概念 计算机与计算机之间的数据传输必须得经由网络,而网络可以通过直接连接两台计算机的方式或 ...
- Serializable_序列化详情
概述 Java 提供了一种对象序列化的机制.用一个字节序列可以表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等信息.字节序列写出到文件之后,相当于文件中持久保存了一个对象的信 ...
- Spring Cloud 升级之路 - 2020.0.x - 7. 使用 Spring Cloud LoadBalancer (2)
本项目代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Spri ...
- JMeter逻辑控制器完整介绍
JMeter逻辑控制器可以对元件的执行逻辑进行控制,就像编程一样,实现业务需求. JMeter包括了以下逻辑控制器: 一共17种.除了仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器. If ...
- GO学习-(28) Go语言操作influxDB
Go语言操作influxDB 本文介绍了influxDB时序数据库及Go语言操作influxDB. InfluxDB是一个开源分布式时序.事件和指标数据库.使用Go语言编写,无需外部依赖.其设计目标是 ...
- Nginx的配置参数中文说明
Nginx的配置参数中文说明 前言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力强 ...
- Linux架构思维导图
Linux架构思维导图 GUI(Graphical User Interface,图形用户界面) Linux学习路径 软件框架 Linux桌面介绍 FHS:文件系统目录标准 Linux需要特别注意的目 ...
- 用于ONNX的TensorRT后端
用于ONNX的TensorRT后端 解析ONNX模型以使用TensorRT执行. 另请参阅TensorRT文档. 有关最近更改的列表,请参见changelog. 支持的TensorRT版本 Maste ...