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)的更多相关文章

  1. 函数def

    函数:把执行一定功能的动作封装到一起>>> def 函数名(形参)      通过一个    函数名(实参)         去调用它,传参来执行功能.动作,输出结果 .定义:def ...

  2. day 9~11 函数

    今日内容 '''函数四个组成部分函数名:保存的是函数的地址,是调用函数的依据函数体:就是执行特定功能的代码块函数返回值:代码块执行的结果反馈函数参数:完成功能需要的条件信息​1.函数的概念2.函数的定 ...

  3. python note 11 函数名的使用、闭包、迭代器

    1.函数名就是一个变量 def func(): print("我是一个小小的函数") a = func print(a) #输出变量存放地址 <function func a ...

  4. python函数def

    #函数就是实现一个特定功能的程序块 #下面这个函数实现了打印helloworld的功能 def print_hello(): print('hello world!') #这是调用方法 print_h ...

  5. c++11 函数模板的默认模板参数

    c++11 函数模板的默认模板参数 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> ...

  6. Day 11 函数之对象和名称空间与作用域

    函数对象 函数是第一类对象,即函数可以被当做数据处理 函数对象的四大功能 1.引用 x=100 y=x def func() pass f=func print(f) #打印结果 #<funct ...

  7. python中的函数def和函数的参数

    '''函数: 1.减少代码重用性 2.易维护 3.可扩展性强 4.类型function 定义函数: def 函数变量名(): 函数的调用: 1.函数名加括号 2.函数如果没被调用,不会去执行函数内部的 ...

  8. Day 11:函数装饰器

    在说装饰器前,先说一个东西,再Python里,有一个 一切皆对象,一切皆变量. 例: def hello(name="sunjinyao"): return "hi &q ...

  9. D14 集合set 函数def

    把 字符串  元祖 变成集合的方法   因为列表是可变的所以不能变为集合 # s=set('hello')# print(s)## s=set(['alex','alex','sb'])# print ...

随机推荐

  1. [c++] 开发问题

    语言中的很多细节都是为了应对实际开发中会遇到的问题 当编写程序时,我们使用的定义多数不是自己写的,如sqrt(),是很多年前别人写的,我们只是使用它们 在C++中,对于"别处"定义 ...

  2. jolokia配置Java监控

    wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-jvm/1.3.6/jolokia-jvm-1.3.6- ...

  3. 面试官问:ZooKeeper 有几种节点类型?别再说 4 种啦!

    本文作者:HelloGitHub-老荀 好久没更新 ZK 的文章了,我想死你们啦.之前发布的 HelloZooKeeper 系列文章完结后,项目收获了将近 600 个 star.这远远超过了我自己的预 ...

  4. 程序员与年龄:四十岁普通开发、三十五岁首席架构、三十岁基层Leader

    最近,有一个词儿特别热门--躺平.有没有人跟你说过:"躺平说起来容易,做起来更容易." 和躺平相对的是另外一个词--内卷,群聊的时候,已经很多次看过草卷起来了.jpg表情包.某些节 ...

  5. GO语言面向对象06---面向对象练习01

    package main import "fmt" /* 定义动物接口:死.活着 定义动物实现类:鸟.鱼.野兽(跑.捕食) 继承野兽:实现老虎,实现人 业务场景:工作日所有动物都活 ...

  6. Paddle预训练模型应用工具PaddleHub

    Paddle预训练模型应用工具PaddleHub 本文主要介绍如何使用飞桨预训练模型管理工具PaddleHub,快速体验模型以及实现迁移学习.建议使用GPU环境运行相关程序,可以在启动环境时,如下图所 ...

  7. 腾讯 angel 3.0:高效处理模型

    腾讯 angel 3.0:高效处理模型 紧跟华为宣布新的 AI 框架开源的消息,腾讯又带来了全新的全栈机器学习平台 angel3.0.新版本功能特性覆盖了机器学习的各个阶段,包括:特征工程.模型训练. ...

  8. L4自动驾驶技术

    L4自动驾驶技术 一.SAE的五个级别分别是: L0:驾驶员完全掌控车辆,无任何自动化能力. L1:自动系统有时能够辅助驾驶员完成某些驾驶任务.比如高速自动巡航(自动认知所在车道),和一些驾驶辅助功能 ...

  9. Recommenders with TensorRT

    Recommenders with TensorRT 推荐系统用于向社交网络.媒体内容消费和电子商务平台的用户提供产品或媒体推荐.基于MLP的神经协作滤波器(NCF)推荐器使用一组完全连接或矩阵乘法层 ...

  10. STM32使用DMA发送串口数据

    1.概述 上一篇文章<STM32使用DMA接收串口数据>讲解了如何使用DMA接收数据,使用DMA外设和串口外设,使用的中断是串口空闲中断.本篇文章主要讲解使用DMA发送数据,不会讲解基础的 ...