Python基础理论 - 函数
函数是第一类对象:可以当做数据来传
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基础理论 - 函数的更多相关文章
- python的函数
函数一词起源于数学,但是在编程中的函数和数学中的有很大不同.编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块. 我们在学习过程中已经使用过一些python内建的函数,如pri ...
- python strip()函数 介绍
python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除 ...
- python split()函数
Python split()函数 函数原型: split([char][, num])默认用空格分割,参数char为分割字符,num为分割次数,即分割成(num+1)个字符串 1.按某一个字符分割. ...
- Python数学函数
1.Python数学函数 1.abs(x):取绝对值,内建函数 2.math.ceil(x):向上取整,在math模块中 3.cmp(x,y):如果 x < y ,返回-1:如果 x == y ...
- Python回调函数用法实例详解
本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...
- Python之函数与变量
本节内容 函数介绍及其作用 函数的定义与调用 函数的参数说明 全局变量与局部变量 值传递和引用传递 一.函数的介绍及其作用 编程语言中的函数与数学中的函数是有区别的:数学中的函数有参数(输入),就会有 ...
- Python基础-函数篇
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 函数与函数式编程 1.面向对象: 华山派-- ...
- 【C++实现python字符串函数库】strip、lstrip、rstrip方法
[C++实现python字符串函数库]strip.lstrip.rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' '). s.st ...
- 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
随机推荐
- Docker端口映射
Docker端口映射是指将容器内应用的服务端口映射到本机宿主机器.当要在宿主机外部访问Docker内部应用时,需要对容器内应用端口进行映射. 一.容器启动时指定端口映射 容器运行时可以通过-p 或 - ...
- 【转】Cisco交换机策略路由
[转自]https://blog.csdn.net/kkfloat/article/details/39940623 1.概念 1)策略路由(PBR)是一种比基于目标网络进行路由更加灵活的数据包路由转 ...
- systemd 编写服务管理脚本---学习
转载:https://www.cnblogs.com/sparkdev/p/8521812.html 我们运行 linux 服务器的主要目的是通过运行程序提供服务,比如 mysql.web serve ...
- 生成二维码、条形码、带logo的二维码
Nuget安装ZXing.Net,帮助类: using System; using System.Collections.Generic; using System.Drawing; using Sy ...
- database锁实现
单独创建一张表存放获取锁所需的key和value,key值保持唯一,value从0开始按1递增,在代码中用私有成员变量ConcurrentHashMap存储每个key value值,初始化时每个线程的 ...
- Jenkins+Gradle+Git自动打apk包,并上传到ftp
软件安装: 1.安装Jenkins.git.AndroidSDK 2.配置AndroidSDK环境变量 ANDROID_HOME:D:\Androidsdk PATH:%ANDROID_HOME%\p ...
- AX_ClassTemplate
static void main(Args args) { THK_InterfaceDataExtract THK_InterfaceDataExtract; FormRun formRun = a ...
- PID25 / 合并果子 ☆
这里用到了STL里面的priority_queue,我也不是很精通基本上属于现学现卖阶段,http://www.cnblogs.com/flyoung2008/articles/2136485.htm ...
- Appium+Python自动化 3 -获取 app 包名和 activity
方法一: ①手机通过USB连接电脑 ②打开手机上被测app ③在电脑上 dos命令窗口,输入命令 adb shell dumpsys window w | findstr \/ | findstr n ...
- gitlab的安装和基本使用
一.gitlab的安装 1)安装依赖包 sudo yum install git vim gcc glibc-statc telnet -y sudo yum install -y curl poli ...