函数是第一类对象:可以当做数据来传

1.  可以被引用

2.  可以作为函数参数

3.  可以作为函数返回值

4.  可以作为容器类型的元素

小例子:

def func1():
print('func1')
def func2():
print('func2')
dic = {
'func1':func1,
'func2':func2,
}
func = dic.get('func1')
func()

名称空间:名字与值的绑定关系,时刻记得左面有一根竖线,标识着作用域的不同

何时生效、何时失效,定义名字的方法

局部空间、全局名称空间、内置名称空间

作用域:用的时候,查找的范围

locals()

glocals(),系统变量__name__, __file__, __doc__

全局作用域:全局有效,在任何位置都可以被访问到,除非被删除,否则存活到文件执行结束

局部作用域:局部有效,只能在函数内部被访问,在函数执行结束后,就释放了

闭包

1. 定义在函数内部的函数

2. 该内部函数包含对外部作用域而不是全局作用域的引用

def func1():
x = 1
def func2():
print(x)
return func2
func = func1()
func()

特性:携带自己的作用域,先执行。包裹着一层

应用场景:爬虫、装饰器

装饰器

开放封闭原则,对扩展开放,对修改封闭

什么是装饰器:

装饰别的东西的工具:

装饰器本身 ---> 任意可调用的对象,如函数

被装饰对象 ---> 任意可调用的对象,如函数

装饰器要遵循的原则

1. 不修改被装饰对象的源代码

2. 不修改被装饰对象的调用方式

即定义和调用都不能修改

@deco # func = deco(func)
def func():
pass @deco1
@deco2
def func():
pass @deco(x) # 装饰器也是函数,(),先调用,拿到结果@res在func的正上方
def func():
pass

迭代器

迭代:重复上一次过程,每一次迭代都基于上一次执行地结果而继续进行

如写文档,保存,再修改

可迭代对象:obj.__iter__方法

可迭代对象 执行__iter__方法 ---> 迭代器

迭代器对象:

obj.__iter__方法

obj.__next__方法

为何要有迭代器:

提供一种不依赖于索引的迭代方式

如文件、集合、字典都可以被迭代

# for 循环原理
for i in obj:
pass
# 先执行,obj.__iter__方法,再next() 

迭代器优缺点:

优点:

1.  提供一种不依赖于索引的迭代方式

2.  内存中只有一个值,节省内存

缺点:
1.  无法获取长度

2.  一次性,只能前进,不能后退

生成器

函数体内含有yield关键字,那该函数的执行结果是生成器对象

生成器对象本质就是迭代器,所以yield的功能是

1.  把函数的执行结果做成迭代器

2.  可以返回多次值,而return只能返回一次值

3.  暂停函数的运行,保存上下文信息

如模拟管道

yield 的语句形式: yield 1

yield的表达式形式:x = yield

food = yield food_list    # 暂停、获取send赋值给food、返回food_list

内置函数

数值类:

abs()、round()、divmod()、pow()

bin()、oct()、hex()

chr()、ord()

max()、min()、sum()

变量判定:

id()、type()

数据类型 工厂函数:
dict()、int()、float()、str()、set()、list()

功能型函数:

print()、input()、len()、__import__()、sorted()、reversed()

enumarate()、range()

匿名函数相关:

f = lambda x, y: x+y
print(f)
res = f(1,2)
print(res)
"""
1. 没有名字,使用完立刻回收
2. 有参数、有返回值
3. 场景逻辑简单
"""

zip()

max(*args, key=None)

sorted(*args, **kwargs)

函数式编程:

map(func, *iterables)   # func遍历操作可迭代对象

from functools import reduce

reduce(function, sequence, initial=None)

filter(func, *iterables)  # 过滤func为True

面向对象:

property()、staticmethod()、classmethod()

hasattr()、getattr()、setattr()、delattr()

issubclass()、isinstance()

super()

Python基础理论 - 函数的更多相关文章

  1. python的函数

    函数一词起源于数学,但是在编程中的函数和数学中的有很大不同.编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块. 我们在学习过程中已经使用过一些python内建的函数,如pri ...

  2. python strip()函数 介绍

    python strip()函数 介绍,需要的朋友可以参考一下   函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除 ...

  3. python split()函数

    Python split()函数 函数原型: split([char][, num])默认用空格分割,参数char为分割字符,num为分割次数,即分割成(num+1)个字符串 1.按某一个字符分割. ...

  4. Python数学函数

    1.Python数学函数 1.abs(x):取绝对值,内建函数 2.math.ceil(x):向上取整,在math模块中 3.cmp(x,y):如果 x < y ,返回-1:如果 x == y ...

  5. Python回调函数用法实例详解

    本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...

  6. Python之函数与变量

    本节内容 函数介绍及其作用 函数的定义与调用 函数的参数说明 全局变量与局部变量 值传递和引用传递 一.函数的介绍及其作用 编程语言中的函数与数学中的函数是有区别的:数学中的函数有参数(输入),就会有 ...

  7. Python基础-函数篇

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数  函数与函数式编程 1.面向对象: 华山派-- ...

  8. 【C++实现python字符串函数库】strip、lstrip、rstrip方法

    [C++实现python字符串函数库]strip.lstrip.rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' '). s.st ...

  9. 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

随机推荐

  1. VS下.net开发常用扩展、配置

    Vue.js Pack Copy As Html HTML Tools Word Highlight With Margin 绿豆沙颜色:R:199  G:237  U:204

  2. vue-实现全选单选

    在获取列表页面数据时,通过forEach遍历存储数据的对象,给对象中添加一个selected变量,值为布尔值. 点击全选时,通过遍历将对象中selected的布尔值改变 点击单选时,被点中的通过筛选加 ...

  3. IDEA中,将项目加入maven管理。

    在项目上右键->Add Framework Support Choose Maven 生成pom.xml 在<project>下配置国内仓库 <properties>&l ...

  4. Linux-Slabinfo

    1.内存管理有两个算法:伙伴算法(buddy system)和slab算法.伙伴算法是以页为单位管理内存,slab算法是以字节为单位管理内存,是内核的小内存管理算法.特点是基于对象进行管理. slab ...

  5. mysql设置存储中文变成问号或者乱码

    技术交流群: 816227112 问题: 解决办法: 修改my.ini  如果是my-default.ini 要重命名成my.ini 要注意顺序,有可能服务启动不起来 [mysqld] charact ...

  6. 【aardio】是否取消三个按键的对话框

    import win; var id = win.msgbox("三个按钮","标题",0x3/*_MB_YESNOCANCEL*/) 参考标准库函数: nam ...

  7. EasyPR源码剖析(5):车牌定位之偏斜扭转

    一.简介 通过颜色定位和Sobel算子定位可以计算出一个个的矩形区域,这些区域都是潜在车牌区域,但是在进行SVM判别是否是车牌之前,还需要进行一定的处理.主要是考虑到以下几个问题: 1.定位区域存在一 ...

  8. 设计模式学习心得<代理模式 Proxy>

    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 概述 意图 为其他对象提供 ...

  9. NC 创建表空间数据库

    1.首先创建表空间 CREATE SMALLFILE TABLESPACE "NNC_DATA01" LOGGING DATAFILE 'D:\NCOracle\nc633sd\N ...

  10. select 的选中问题

    function bind(pageIndex) { if (getQueryString("_status") == "3") {//从首页中慢病管理人数进入 ...