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. Centos6下通过 oprofile分析CPU性能

    Centos6下通过 oprofile分析CPU性能 2014-01-18 10:55:15 bobpen 阅读数 2218更多 分类专栏: linux   版权声明:本文为博主原创文章,遵循CC 4 ...

  2. mysql基础之日志管理(查询日志、慢查询日志、错误日志、二进制日志、中继日志、事务日志)

    日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 ,事务日志. 修改配置或者想要使配置永久生效需将内容写入配置文 ...

  3. C语言printf-(转自shiney)

    1.调用格式为  printf("<格式化字符串>", <参量表>);   其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另 ...

  4. 标准Gitlab命令行操作指导

    gitlab是一个分布式的版本仓库,总比只是一个本地手动好些,上传你的本地代码后后还能web GUI操作,何乐不为? 贴上刚刚搭建的gitlab,看看git 如何操作标准命令行操作指导 1.命令行操作 ...

  5. Python判断身份证是否合法

    利用正则表达式实现对身份证合法程度的判断 1 # !usr/bin/env python3 2 # coding:utf-8 3 """ 4 @ Copyright (c ...

  6. 删除本地解压版Mysql

    1.关闭服务 以管理员身份运行cmd,使用命令net stop mysql停止服务. 2.卸载服务 使用命令mysqld -remove mysql卸载服务. 这时候在服务里已经找不到mysql服务了 ...

  7. libevent中最小堆实现算法解析

    libevent,一个非常好的c的网络库,最近开始学习并分析下,做个记录.源码选用的1.4版本.因为感觉这版的代码比较精简,也没有太多宏定义,个人感觉适合学习原理. 从哪里开始呢,我选择从一些最简单的 ...

  8. Python+Selenium - 一个元素有两个标签时:一个用于显示,一个用于底层

    如下图,这种一个元素由两个标签控制的,用js改值时需要两个标签的属性值都改 改值代码 js_code = 'a = document.getElementById("lostdate&quo ...

  9. Proteus仿真MSP430单片机的若干问题记录

    1.支持的具体型号: P7.8: Proteus8.9: Proteus8.9能够支持的类型明显要多于Proteus7.8.但是对于仿真而言,目前个人还是觉得Proteus7.8更稳定.这也是目前能用 ...

  10. SLAM图优化g2o

    SLAM图优化g2o 图优化g2o框架 图优化的英文是 graph optimization 或者 graph-based optimization, "图"其实是数据结构中的gr ...