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. Linux 忘记密码解决方法——RedHat

    [RedHat7.4版本] 1.将忘记密码的rhel7.4版本的虚拟机打开 2.等3秒左右出现这个画面时,用方向键,将光标移动到第二栏处,接着按"e"键 3.接在在linux16这 ...

  2. linux 服务开机自启动systemd方式 (Centos7)

    linux 服务开机自启动systemd方式 (Centos7) 1.编写一个 /opt/hello.sh 脚本 [root@jws-ftp prometheus]# cat /opt/hello.s ...

  3. JFlash ARM对stm32程序的读取和烧录-(转载)

    本篇文章主要是记录一下JFlash ARM 的相关使用和操作步骤,读取程序说不上破解,这只是在没有任何加密情况下对Flash的读写罢了!在我们装了JLINK驱动后再根目录下找到JFlash ARM , ...

  4. 1.2Linux 主要目录速查表

    Linux 主要目录速查表 /:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始 当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再 ...

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

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

  6. Locust入门

    Locust入门   Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就 ...

  7. GO语言基础---值传递与引用传递

    package main import ( "fmt" ) /* 值传递 函数的[形式参数]是对[实际参数]的值拷贝 所有对地址中内容的修改都与外界的实际参数无关 所有基本数据类型 ...

  8. GO语言面向对象03---接口与断言

    接口的实现 package main import "fmt" type Animal interface { //出生 SayHelloWord() //死亡 Godie() / ...

  9. windows 映射驱动器 图标显示不正常

    正常图标是这样的: 我的变成了这样: 解决方法: 注册表进入: HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\Explorer.exe\Drives\ ...

  10. Redis-内存优化(一)

    一.正确使用redis 数据类型 我们先了解下 String 类型的内存空间消耗问题,以及选择节省内存开销的数据类型的解决方案.例如一个图片存储系统,要求这个系统能快速地记录图片 ID 和图片在存储系 ...